Skip to content

Publier des statistiques en RDF (3) : structure, méta-structure, méta-méta-structure

26/10/2012

J’en étais resté à : avant de publier les données, il faut que je décrive leur structure.

Qu’est-ce qu’un cube dans RDF Data Cube

J’étais parti dans le premier billet sur une erreur d’interprétation en fournissant ce schéma, censé restituer la valeur multidimensionnelle d’un tableau de données statistiques.

En fait, ce n’est pas le tableau qui doit être représenté par un cube : c’est chaque donnée.

Pour pouvoir utiliser le vocabulaire RDF Data Cube, il faut en comprendre et en adopter la terminologie et la logique. Donc :

Chaque donnée statistique est une observation

Cette observation est l’intersection :
  • de plusieurs dimensions: par exemple la date, le lieu, le genre (masculin/féminin)
    Sert à identifier l’observation. Un ensemble de valeurs pour chaque dimension permet d’identifier une seulement observation
    (càd que la combinaison de l’ensemble des dimensions détermine un seul point : l’observation en cours) : temps, lieu
  • d’une ou plusieurs mesures (nombre d’habitants)
  • des attributs précisant les conditions de la mesure et ses unités (projection future, euros ou dollars, etc.)
Ces caractéristiques (dimensions, mesures, attributs) sont les composants (components) de l’observation.
Reprenons l’exemple qui sert de fil conducteur à la documentation fournie : L’espérance de vie dans 4 villes du Pays de Galle)
2004-2006 2005-2007 2006-2008
Male Female Male Female Male Female
Newport 76.7 80.7 77.1 80.9 77.0 81.5
Cardiff 78.7 83.3 78.6 83.7 78.7 83.4
Monmouthshire 76.6 81.3 76.5 81.5 76.6 81.7
Merthyr Tydfil 75.5 79.1 75.5 79.4 74.9 79.6

La page de documentation explique étape par étape comment « transformer » ce tableau en triplets.

Je me suis trouvé obligé de coller à ces étapes pour comprendre comment faire de même avec mon tableau de statistiques des Universités. Donc je reprends ici les 2 premières colonnes et les 4 premières lignes (vous pouvez toujours accéder au tableau complet des données PAPESR extraites).

id PAPESR Universités Nombre d’étudiants inscrits Nombre de nouveaux bacheliers
632 AixMarseille 1 20963 2907
633 AixMarseille 2 20815 3185
634 AixMarseille 3 21863 3033
707 Amiens 22243 4235

Type de données rencontrées : description

La première étape suivie par la doc RDF Data Cube consiste à décrire les différents composants (components) au sens décrit ci-dessus

Je vais utiliser comme namespace papesrLully l’ensemble des informations directement liées à la mise en ligne de données PAPESR (n’osant pas en toute simplicité prendre l’espace de nom « papesr »…).

Exemple RDF Data Cube Statistiques des Universités
Liste des
composants
3 dimensions :

  • période (2004-2006, 2005-2007, etc.)
  • région
  • sexe (M/F)

1 mesure :

  • Espérance de vie
    dont la valeur est donnée en nombre d’années
2 dimensions :

  • période (année scolaire)
  • Université

2 mesures :

  • Nombre d’étudiants inscrits
    valeur en unités
  • Nombre de nouveaux bacheliers inscrits
    valeur en unités
Dim. 1 Période

eg:refPeriod a rdf:Property, qb:DimensionProperty;
rdfs:label "reference period"@en;
rdfs:subPropertyOf sdmx-dimension:refPeriod;
rdfs:range interval:Interval;
qb:concept sdmx-concept:refPeriod .

Remarque : utilisation aussi fréquente que possible du vocabulaire préexistant fourni par SDMX

Période

papesrLully:refPeriod a rdf:Property, qb:DimensionProperty;
rdfs:label "Période"@fr, »Period »@en;
rdfs:subPropertyOf sdmx-dimension:refPeriod.

Dim. 2 Région

eg:refArea a rdf:Property, qb:DimensionProperty;
rdfs:label "reference area"@en;
rdfs:subPropertyOf sdmx-dimension:refArea;
rdfs:range admingeo:UnitaryAuthority;
qb:concept sdmx-concept:refArea .

Université

papesrLully:university a rdf:Property,
qb:DimensionProperty;
rdfs:label "Université"@fr;
rdfs:range foaf:Organization.

Dim. 3 Sexe
sdmx-dimension:sex a qb:DimensionProperty.
Mesure 1 Espérance de vie

eg:lifeExpectancy a rdf:Property, qb:MeasureProperty;
rdfs:label "life expectancy"@en;
rdfs:subPropertyOf sdmx-measure:obsValue;
rdfs:range xsd:decimal .

Nombre d’étudiants inscrits

papesrLully:nbEtudInscrits a rdf:Property,
qb:MeasureProperty;
rdfs:label "Nb d'étudiants Inscrits"@fr.

Mesure 2 Nombre de nouveaux bacheliers inscrits

papesrLully:nbNvxBacheliersInscrits a rdf:Property, qb:MeasureProperty;
rdfs:label "Nb de nouveaux bacheliers inscrits"@fr.

Structure d’un jeu de données : description

Là, on n’a décrit que les composants d’une donnée : dimensions et mesures. Il faut encore décrire de quoi un ensemble de données (jeu de données, ou data set) est fait. Il faut définir une Data Structure Definition.

papesrLully:Papesr_Structure rdf:type qb:DataStructureDefinition;
papesrLully:Papesr_Structure qb:component [qb:dimension papesrLully:university;
                                            qb:dimension papesrLully:refPeriod;
                                            qb:measure papesrLully:nbEtudInscrits;
                                            qb:measure papesrLully:nbNvxBacheliersInscrits].

En l’état, chaque donnée serait donc composée de 2 dimensions et de 2 mesures. C’est à dire que pour une « observation » (donc pour une combinaison université-année), je serais tenu d’indiquer l’ensemble des nombre associés, l’ensemble des indicateurs mesurés.

Or je veux que chaque observation fournisse 1 seul indicateur. Il y a pour cela une « astuce » RDF Data Cube (décrite en partie 5.5.2), en rajoutant une ligne à la liste ci-dessus :

papesrLully:Papesr_Structure rdf:type qb:DataStructureDefinition;
                              qb:component [qb:dimension papesrLully:university;
                                            qb:dimension papesrLully:refPeriod;
                                            qb:measure papesrLully:nbEtudInscrits;
                                            qb:measure papesrLully:nbNvxBacheliersInscrits;
                                            qb:dimension qb:measureType].

Ainsi le type de mesure utilisée pour l’observation en cours devient lui-même une dimension permettant de caractériser de manière unique la donnée décrite.

Tout ça n’est pas forcément très lisible. Je voulais surtout vous indiquer que j’avais été obligé de coller à l’exemple donné par le W3C pour voir comment faire de même.

Je vous mets les URL en clair pour que vous puissiez constater au passage l’utilisation d’une redirection PURL, qui garantit donc des URL pérennes (à condition que je les maintienne en cas de déplacement de mes fichiers, bien sûr)

Parmi les différents outils que j’ai utilisés pour générer et contrôler ce document, vous pouvez voir ce qu’il donne avec le navigateur RDF SIOC RDF Browser (celui utilisé par l’extension Semantic Radar, dont j’avais parlé en fin de ce billet)

%d blogueurs aiment cette page :