Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ajout d'un modèle de données IRVE #63

Open
loco-philippe opened this issue Jun 4, 2024 · 0 comments
Open

Ajout d'un modèle de données IRVE #63

loco-philippe opened this issue Jun 4, 2024 · 0 comments

Comments

@loco-philippe
Copy link

Contexte

Le guide data.gouv.fr lié à la qualité des données open-data présente les 6 thèmes principaux pour bien documenter un jeu de données et notamment celui dédié au "modèle de données".

Il rappelle notamment qu'un modèle de données (modèle entité-association) est avant tout un outil de dialogue entre les différents intervenants en agrégeant sur un même support d'une part les concepts métier/client/utilisateur (ex. les entités manipulées et les relations entre ces entités) et d'autre part la traduction de ces concepts en structures physiques et logiques (ex. les attributs, les cardinalités) que l'on retrouve en partie dans le schéma de données.

Application aux IRVE

Les données IRVE correspondent à une structure de données complexe (concepts de 'point de charge', 'station', 'opérateur', 'aménageur', 'enseigne', 'localisation') qui se traduit par un ensemble de champs important (une cinquantaine pour le schéma statique).

Cette structure est décrite principalement dans les schémas de données statiques et dynamiques.

Cependant les schémas décrivent clairement comment chaque champ doit être documenté mais ne décrivent pas la cohérence qui doit être assurée entre certains champs ou entre certaines lignes.

Les jeux de données partagés sont donc constitués de données unitairement bien documentées (grace au schéma de données) mais qui peuvent être globalement difficilement exploitables.

Par exemple, comment représenter sur une carte une station qui a deux coordonnées géographiques différentes ou bien comment interpréter qu'une même station soit indiquée ouverte 24h/24h et en même temps 9h-19h ?

Evolution proposée

La proposition est d'une part de compléter la documentation des jeux de données IRVE conformément au guide data.gouv.fr avec:

  • un modèle de données composé d'une partie 'utilisateur' qui présente sous forme simplifiée et didactique (exemples) la structure des données (les entités et les relations entre ces entités) et d'une partie 'technique' sous une forme standardisée (modèle entité-association),

  • l'ajout dans le schéma de données des relations entre champs qui découlent du modèle de données (voir méthodologie) en suivant les spécifications TableSchema (Data Package V1, Data Package V2),

  • une association explicite entre modèle de données et schéma de données (ex. nom des attributs identique, versions du schéma et du modèle identiques),

et d'autre part d'adapter la chaine de contrôle des jeux de données aux évolutions du schéma.

Ces dispositions permettent d'améliorer et de garantir la qualité des jeux de données IRVE en amont (par une meilleure compréhension des informations à documenter) et en aval par un contrôle complet des données.
Elles permettront également de réduire notablement la charge de travail récurrente liée à la recherche et à la correction des erreurs.

Mise en oeuvre

Trois aspects sont à prendre en compte : l'existant, la chaîne de contrôle et les futures évolutions.

  • Documentation existantes:

    Une premier travail de modélisation a été effectué pour la partie statique (voir modèle de données en Annexe ci-dessous). Il reste à le compléter (partie "utilisateur") et à le valider.
    Le schéma de données est à compléter avec l'ajout de la propriété relationships qui exprime les dépendances entre champs (elle se déduit du modèle de données et est identifiée).
    L'analyse reste également à effectuer pour la partie dynamique (mais celle-ci est beaucoup plus simple).

  • Chaîne de contrôle:

    Le contrôle de la propriété relationships est intégré dans le package python tab-analysis accessible via le gestionnaire PyPI.
    Il fait l'objet d'une intégration FrictionLess (custom_check FrictionLess) et d'une intégration Validata (custom_check Validata en cours).
    Il reste donc à intégrer ce custom_check dans la chaîne de contrôle.

  • futures évolutions:

    La structure de données IRVE n'est pas figée et des hypothèses de modification sont à prendre en compte.
    Il serait donc intéressant d'intégrer ces hypothèses dans un modèle de données qui servirait à la fois de capitalisation de celles-ci et de support de partage et de décision.
    L'utilisation de l'éditeur de modèles de données mermaid utilisable dans les structure de document markdown et notamment sous Github (cf exemple ci-dessous) facilite l'élaboration et le partage des modèles de données.

Annexe : modèle de données proposé

---
title: Modele - schema statique v2.3.1
--- 
erDiagram
    AMENAGEUR ||..|{ STATION : amenage
    AMENAGEUR {
        string nom_amenageur
        string siren_amenageur
        string contact_amenageur 
    }
    OPERATEUR ||..|{ STATION : "exploite pour le compte de l enseigne"
    OPERATEUR {
        string contact_operateur PK "M"
        string nom_operateur 
        string telephone_operateur 
    }
    ENSEIGNE ||..|{ STATION : "heberge"
    ENSEIGNE {
        string nom_enseigne PK "M" 
    }
    STATION {
        string  id_station_itinerance PK "M"
        string  nom_station "M"
        enum    implantation_station "M"
        integer nbre_pdc "M"
        string  condition_acces "M"
        string  horaires "M"
        boolean station_deux_roues "M"
        date    date_maj "M"
        string  id_station_local
        enum    raccordement
        string  num_pdl
        date    date_mise_en_service 
    }
    LOCALISATION ||--|{ STATION : "localise"
    LOCALISATION {
       array   coordonneesXY PK "M"
       string  adresse_station "M"
       string  code_insee_commune 
    }
    STATION ||--|{ POINT_DE_CHARGE : regroupe
    POINT_DE_CHARGE {
        string id_pdc_itinerance PK "M Root"
        number puissance_nominale "M"
        boolean prise_type_ef "M"
        boolean prise_type_2 "M"
        boolean prise_type_combo_ccs "M"
        boolean prise_type_chademo "M"
        boolean prise_type_autre "M"
        boolean paiement_acte "M"
        boolean reservation "M"
        enum    accessibilite_pmr "M"
        string  restriction_gabarit "M"
        string  id_pdc_local
        boolean gratuit
        boolean paiement_autre
        boolean paiement_cb
        string  tarification
        string  observations
        boolean cable_t2_attache 
    }
Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant