Tutoriel DSPL

DSPL signifie Dataset Publishing Language. Vous pouvez importer les ensembles de données décrits dans DSPL dans Google Public Data Explorer, un outil permettant une exploration visuelle riche des données.

Remarque : Pour importer des données dans Google Public Data à l'aide de l'outil d'importation de données publiques, vous devez disposer d'un compte Google.

Ce tutoriel fournit un exemple par étapes de la préparation d'un ensemble de données de base DSPL.

Un ensemble de données DSPL est un lot qui contient un fichier XML et un ensemble de fichiers CSV. Les fichiers CSV sont des tables simples contenant les données de l'ensemble de données. Le fichier XML décrit les métadonnées de l'ensemble de données, y compris les métadonnées informatives telles que les descriptions des mesures, ainsi que les métadonnées structurelles comme les références entre les tables. Les métadonnées permettent aux utilisateurs non expérimentés d'explorer et de visualiser vos données.

La seule condition préalable à la compréhension de ce tutoriel est un bon niveau de compréhension du langage XML. Compréhension de concepts de base de données simples (par exemple, tables, clés primaires, etc.), mais ce n'est pas obligatoire. À titre de référence, vous pouvez également consulter le fichier XML complet et le groupe d'ensembles de données complets associés à ce tutoriel.

Présentation

Avant de commencer à créer notre ensemble de données, voici une vue d'ensemble de son contenu:

  • Informations générales : À propos de l'ensemble de données
  • Concepts : Définition des "éléments" qui apparaissent dans l'ensemble de données (par exemple, pays, taux de chômage, sexe, etc.)
  • Tranches:combinaisons de concepts pour lesquels il existe des données
  • Tableaux:données sur des concepts et des secteurs. Les tables de concepts contiennent des énumérations et les tables de tranches contiennent des données statistiques.
  • Sujets:permet d'organiser les concepts de l'ensemble de données selon une hiérarchie significative à l'aide d'étiquettes.

Pour illustrer ces notions plutôt abstraites, considérons l'ensemble de données (avec des données factices) utilisé tout au long de ce tutoriel: séries temporelles statistiques sur la population et le chômage, agrégées par différentes combinaisons de pays, d'État américain et de sexe.

Cet exemple d'ensemble de données définit les concepts suivants:

  • country
  • gender (sexe)
  • population
  • state
  • taux de chômage
  • year

Les concepts catégoriques, tels que l'état, sont associés à des tables de concepts, qui énumérent toutes leurs valeurs possibles (Californie, Arizona, etc.). Les concepts peuvent comporter des colonnes supplémentaires pour des propriétés telles que le nom ou le pays d'un État.

Les tranches définissent chaque combinaison de concepts pour lesquels il existe des données statistiques dans l'ensemble de données. Une tranche contient des dimensions et des métriques. Dans l'image ci-dessus, les dimensions sont bleues et les métriques sont orange. Dans cet exemple, la tranche gender_country_slice contient des données pour la métrique population et les dimensions country, year et gender. Une autre tranche, appelée country_slice, donne le nombre total de population annuelle (métrique) pour les pays.

En plus des dimensions et des métriques, les tranches font également référence à des tables contenant les données réelles.

Voyons maintenant, étape par étape, comment créer un ensemble de données de ce type dans DSPL.

Informations sur l'ensemble de données

Pour commencer, nous devons créer un fichier XML pour notre ensemble de données. Voici le début d'une description DSPL de notre exemple d'ensemble de données:

<?xml version="1.0" encoding="UTF-8"?>
<dspl targetNamespace="http://www.stats-bureau.com/mystats"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://schemas.google.com/dspl/2010"
   xmlns:time="http://www.google.com/publicdata/dataset/google/time"
   xmlns:geo="http://www.google.com/publicdata/dataset/google/geo"
   xmlns:entity="http://www.google.com/publicdata/dataset/google/entity"
   xmlns:quantity="http://www.google.com/publicdata/dataset/google/quantity">

  <import namespace="http://www.google.com/publicdata/dataset/google/time"/>
  <import namespace="http://www.google.com/publicdata/dataset/google/entity"/>
  <import namespace="http://www.google.com/publicdata/dataset/google/geo"/>
  <import namespace="http://www.google.com/publicdata/dataset/google/quantity"/>

  <info>
    <name>
      <value>My statistics</value>
    </name>
    <description>
      <value>Some very interesting statistics about countries</value>
    </description>
    <url>
      <value>http://www.stats-bureau.com/mystats/info.html</value>
    </url>
    </info>

  <provider>
    <name>
      <value>Bureau of Statistics</value>
    </name>
    <url>
      <value>http://www.stats-bureau.com</value>
    </url>
  </provider>
 ...
</dspl>

La description de l'ensemble de données commence par un élément <dspl> de premier niveau. L'attribut targetNamespace contient un URI qui identifie cet ensemble de données de manière unique. L'espace de noms de l'ensemble de données est particulièrement important lors de sa publication, car il constitue son identifiant global et permet à d'autres personnes de s'y référer.

Notez que l'attribut targetNamespace peut être omis. Dans ce cas, un espace de noms unique est automatiquement généré lors de l'importation de l'ensemble de données.

Utiliser des informations provenant d'autres ensembles de données

Les ensembles de données peuvent réutiliser des définitions et des données d'autres ensembles de données en les important. Chaque élément <import> spécifie l'espace de noms d'un autre ensemble de données auquel il fait référence.

Dans notre exemple d'ensemble de données, nous avons besoin de certaines définitions de http://www.google.com/publicdata/dataset/google/quantity (ensemble de données créé par Google et contenant des concepts utiles pour définir des quantités numériques) et des ensembles de données time, entity et geo, qui fournissent respectivement des définitions liées à l'heure, aux entités et à la zone géographique.

L'élément <dspl> supérieur fournit une déclaration de préfixe d'espace de noms (par exemple, xmlns:time="http://...") pour chacun des ensembles de données importés. Les déclarations de préfixe sont nécessaires pour référencer les éléments d'autres ensembles de données de manière concise. Par exemple, time:year fait référence à la définition de year dans l'ensemble de données importé dont l'espace de noms est associé au préfixe time.

Informations sur l'ensemble de données et le fournisseur

L'élément <info> contient des informations générales sur l'ensemble de données: nom, description et URL permettant d'obtenir plus d'informations.

L'élément <provider> contient des informations sur le fournisseur de l'ensemble de données: son nom et une URL permettant d'obtenir plus d'informations (généralement la page d'accueil du fournisseur de données).

Définition des concepts

Maintenant que nous avons fourni des informations générales sur l'ensemble de données, nous pouvons commencer à définir son contenu. Notre objectif suivant est d'ajouter les statistiques de population des pays des 50 dernières années.

La première étape consiste à fournir des définitions des notions de population, de pays et d'année. Dans DSPL, ces définitions sont appelées concepts.

Un concept est une définition d'un type de données qui apparaît dans un ensemble de données. Les valeurs de données correspondant à un concept donné sont appelées instances de ce concept.

Population

Commençons par définir le concept de population. Dans un document DSPL, les concepts sont définis dans un élément <concepts> qui suit les informations sur l'ensemble de données et le fournisseur.

Voici un concept de population avec seulement les informations minimales requises: id (un identifiant unique), name et type.

<dspl ...>
  ...
  <concepts>
    <concept id="population">
      <info>
        <name>
          <value>Population</value>
        </name>
      </info>
      <type ref="integer"/>
    </concept>
  ...
  </concepts>

Description de l'exemple

  • Chaque concept doit fournir un identifiant id qui l'identifie de manière unique dans l'ensemble de données. Ainsi, deux concepts définis dans le même ensemble de données ne peuvent pas avoir le même ID.
  • Tout comme pour l'ensemble de données et son fournisseur, les éléments <info> fournissent des informations textuelles sur le concept, telles que son nom et sa description.
  • L'élément <type> spécifie le type de données pour les instances du concept (en d'autres termes, ses "valeurs"). Dans cet exemple, le type de population est integer. DSPL est compatible avec les types de données suivants :
    • string
    • integer
    • float
    • boolean
    • date

Pays

Écrivons maintenant la définition du concept de pays:

<concept id="country">
  <info>
    <name><value>Country</value></name>
    <description>
      <value>My list of countries.</value>
    </description>
  </info>
  <type ref="string"/>
  <property id="name">
    <info>
      <name><value>Name</value></name>
      <description>
        <value>The official name of the country</value>
      </description>
    </info>
    <type ref="string" />
  </property>
  <table ref="countries_table" />
</concept>

Comme son nom l'indique, le concept de pays commence par un id, un info et un type.

Valeurs du concept

Les concepts catégoriques comme les pays présentent une énumération de toutes les instances possibles. En d'autres termes, vous pouvez répertorier tous les pays possibles qui peuvent être référencés. Pour ce faire, chaque pays doit disposer d'un identifiant unique. Cet exemple utilise des codes ISO de pays pour identifier les pays. Ces codes sont de type string.

Dans cet exemple, vous n'avez pas besoin d'utiliser le code ISO. Vous pouvez tout aussi bien utiliser le nom du pays. Toutefois, les noms diffèrent selon la langue, peuvent changer au fil du temps et ne sont pas toujours systématiquement utilisés dans les ensembles de données. Pour les pays, et pour les concepts catégoriels en général, il est recommandé de choisir des identifiants courts, stables, couramment utilisés et indépendants de la langue (le cas échéant).

Propriétés du concept

En plus du id, le concept de pays comporte un élément <property> qui spécifie le nom du pays. En d'autres termes, le nom du pays ("Irlande") est une propriété du pays ayant l'IE id. Les propriétés permettent à DSPL de fournir des informations structurées supplémentaires sur les instances d'un concept.

Tout comme le concept lui-même, les propriétés ont un id, un info et un type.

Données de concept

Enfin, le concept de pays comporte un élément <table>. Cet élément fait référence à un tableau qui énumère la liste de tous les pays.

L'utilisation de tableaux est logique pour certains concepts, mais pas pour d'autres. Par exemple, il n'est pas pertinent d'énumérer toutes les valeurs possibles pour la population de concepts. Toutefois, si vous référencez une table à un concept, celle-ci doit contenir toutes les instances du concept. Par exemple, elle doit répertorier tous les pays, et pas seulement quelques exemples.

L'ensemble de données définit la table countries_table comme suit:

...
<tables>
  <table id="countries_table">
    <column id="country" type="string"/>
    <column id="name" type="string"/>
    <data>
      <file format="csv" encoding="utf-8">countries.csv</file>
    </data>
  </table>
  ...
</tables>

La table "country" spécifie les colonnes de la table et leurs types, et fait référence à un fichier CSV contenant les données. Ce fichier CSV peut être regroupé et importé avec l'ensemble de données XML ou accessible à distance via HTTP, HTTPS ou FTP. Dans ce dernier cas, vous devez remplacer countries.csv par une URL, par exemple http://www.myserver.com/mydata/countries.csv.

Quel que soit l'emplacement de stockage, le fichier CSV se présente comme suit:

country, name
AD,      Andorra
AF,      Afghanistan
AI,      Anguilla
AL,      Albania
US,      United States

La première ligne du tableau répertorie les ID de colonne, comme spécifié dans la définition table de DSPL. Chacune des lignes suivantes correspond à une instance du concept de pays. Si le concept comporte une table, celle-ci doit contenir toutes les instances du concept. Dans ce cas, elle doit répertorier tous les pays.

Les colonnes sont associées au concept de pays et à ses propriétés en fonction de leur ID. L'ID de la première colonne, country, correspond à l'ID du concept. Cela signifie que cette colonne contient l'identifiant unique du pays défini par le concept de pays. La colonne suivante correspond à la propriété name du concept de pays. Les valeurs de cette colonne correspondent à celles de la propriété name.

Les données CSV du tableau des concepts sont soumises à certaines exigences:

  • Les en-têtes de colonne de la première ligne du fichier de données doivent correspondre exactement au concept id et à la propriété id du concept auquel les données sont associées (l'ordre peut varier).
  • Chaque ligne doit comporter exactement le même nombre d'éléments que le nombre de propriétés du concept (même si la valeur est vide).
  • Chaque valeur du champ id du concept (code de pays) doit être unique et non vide (c'est-à-dire un champ vide ou contenant uniquement des espaces blancs).
  • Les valeurs des propriétés qui font référence à d'autres concepts doivent être vides ou correspondre à une valeur valide du concept référencé.
  • Les valeurs contenant des virgules, des guillemets doubles ou des sauts de ligne doivent être placées entre guillemets doubles.
  • Tout guillemet littéral entre guillemets doit être immédiatement précédé d'un autre guillemet.

Year

Le dernier concept dont nous avons besoin pour nos données sur la population par pays est celui qui représente des années. Au lieu de définir un nouveau concept, nous allons utiliser le concept d'année de l'un des ensembles de données que nous avons importés : "http://www.google.com/publicdata/dataset/google/time". Pour ce faire, nous devons le référencer comme time:year, où time représente l'ensemble de données référencé et year identifie le concept.

Concepts canoniques

time:year fait partie d'un petit ensemble de concepts canoniques définis par Google. Les concepts canoniques fournissent des définitions de base sur le temps, la zone géographique, les quantités numériques, les unités, etc.

En fait, le concept de pays défini ci-dessus existe comme un concept canonique. Nous ne l'avons créé ici qu'à titre indicatif. Dans la mesure du possible, utilisez des concepts canoniques dans vos ensembles de données, soit directement, soit en les étendant (vous trouverez plus d'informations sur l'extension ci-dessous). Les concepts canoniques permettent de comparer vos données à d'autres ensembles de données et d'activer des fonctionnalités pour vos ensembles de données dans Public Data Explorer. Par exemple, pour animer des données au fil du temps ou afficher des données géographiques sur une carte, vous utilisez respectivement les concepts canoniques time et geo.

Première tranche

Maintenant que nous avons des concepts pour la population, le pays et l'année, il est temps de les assembler !

Pour cela, nous devons créer une tranche qui les combine. Dans DSPL, une tranche est une combinaison de concepts pour lesquels des données existent.

Pourquoi ne pas simplement créer une table avec les colonnes appropriées ? Parce que les tranches capturent les informations de l'ensemble de données en fonction de ses concepts. Cela deviendra plus clair à mesure que nous créerons d'autres ensembles de données.

Les tranches s'affichent dans le fichier DSPL sous un élément <slices>, qui doit apparaître juste après la section concepts.

<slices>
  <slice id="countries_slice">
    <dimension concept="country"/>
    <dimension concept="time:year"/>
    <metric concept="population"/>
    <table ref="countries_slice_table"/>
  </slice>
</slices>

Tout comme les concepts, chaque tranche possède un id (countries_slice) qui l'identifie de manière unique dans l'ensemble de données.

Une tranche contient deux types de références de concept: les dimensions et les métriques. Les valeurs des métriques varient avec celles des dimensions. Ici, la valeur de population (métrique) varie en fonction des dimensions country et year.

Tout comme les concepts, les tranches incluent une référence à une table qui contient les données de la tranche. Le tableau référencé doit comporter une colonne pour chaque dimension et métrique de la tranche. Comme pour les concepts, les dimensions et les métriques de la tranche sont mappées sur les colonnes du tableau ayant les mêmes ID.

Tableau des secteurs

Le tableau correspondant à notre tranche de population apparaît dans la section tables du fichier DSPL:

<tables>
  ...
  <table id="countries_slice_table">
    <column id="country" type="string"/>
    <column id="year" type="date" format="yyyy"/>
    <column id="population" type="integer"/>
    <data>
      <file format="csv" encoding="utf-8">country_slice.csv</file>
    </data>
  </table>
  ...
</tables>

Notez que la colonne year contient un attribut format qui spécifie le format d'années. Les formats de date acceptés sont ceux définis par le format Dateda Joda.

La table countries_slice spécifie les colonnes de la table et leurs types, et pointe vers un fichier CSV contenant les données. Le fichier CSV se présente comme suit:

country, year,  population
AF,      1960,  9616353
AF,      1961,  9799379
AF,      1962,  9989846
AF,      1963,  10188299
...

Chaque ligne du tableau de données contient une combinaison unique des dimensions country et year, ainsi que la valeur correspondante de la métrique population (par exemple, la population métrique de l'Afghanistan en 1960, les dimensions).

Notez que les valeurs de la colonne country correspondent à la valeur/identifiant du concept country, qui correspond au code à deux lettres ISO 3166 du pays.

Les données CSV d'une tranche doivent respecter les contraintes suivantes:

  • Chaque valeur d'un champ de dimension (telle que country et year) ne doit pas être vide. Les valeurs des champs de métrique (telles que population) peuvent être vides. Une valeur vide est représentée par aucun caractère.
  • Chaque valeur d'un champ de dimension faisant référence à un concept doit être présente dans ses données. Par exemple, la valeur AF doit être présente dans la table de données de concept country.
  • Chaque combinaison unique de valeurs de dimension, par exemple AF, 2000, ne peut se produire qu'une seule fois.
  • Les données doivent être triées en fonction des colonnes de dimensions non temporelles (dans n'importe quel ordre), puis éventuellement les autres colonnes. Par exemple, dans une table contenant les colonnes [date, dimension1, dimension2, metric1, metric2], vous pouvez trier par dimension1, puis dimension2, puis date, mais pas par date, puis selon les dimensions.

Synthèse

À ce stade, nous disposons de suffisamment de données dans notre DSPL pour décrire les données démographiques de chaque pays. Pour résumer, nous avons dû:

  • Créer l'en-tête DSPL et la description de l'ensemble de données et de son fournisseur
  • Créez un concept pour la population et un autre pour le pays, avec un fichier CSV énumérant tous les pays et leurs noms.
  • Créez une tranche avec le nombre d'habitants pour des pays au fil du temps, en référençant le concept d'année déjà défini dans l'ensemble de données d'heure importé de Google.

Dans la suite de ce tutoriel, nous allons enrichir notre ensemble de données en ajoutant d'autres dimensions dans davantage de tranches, ainsi que des métriques regroupées par thème.

Ajouter une dimension: États-Unis

À présent, enrichissons notre ensemble de données en ajoutant des données de population pour les États des États-Unis. Nous devons d'abord définir un concept pour les États. Cela ressemble beaucoup au concept de pays que nous avons défini précédemment.

<concept id="state" extends="geo:location">
  <info>
    <name>
      <value>state</value>
    </name>
    <description>
      <value>US states, identified by their two-letter code.</value>
    </description>
  </info>
  <property concept="country" isParent="true" />
  <table ref="states_table"/>
</concept>

Extensions de concept et références de propriétés

Le concept d'état introduit plusieurs nouvelles fonctionnalités de la DSPL.

Tout d'abord, l'état étend un autre concept, geo:location (défini dans l'ensemble de données géographique externe que nous avons importé au début de cet ensemble de données). Du point de vue sémantique, cela signifie que state est un type de geo:location. En conséquence, elle hérite de tous les attributs et propriétés de geo:location. En particulier, l'emplacement définit les propriétés de latitude et longitude. En étendant l'ancien concept, ces propriétés sont également appliquées à l'état. De plus, étant donné que l'emplacement hérite de entity:entity, l'état obtient également toutes les propriétés de cette dernière, y compris name, description et info_url.

Remarque:Techniquement, le concept de pays défini précédemment devrait également s'étendre de geo:location. Ce point a été omis par souci de simplicité. Nous avons toutefois inclus le point géographique hérité du pays dans le fichier XML final.

Remarque:Vous pouvez utiliser la construction extends dans vos propres ensembles de données pour réutiliser les informations définies par d'autres ensembles de données. Pour utiliser extends, toutes les instances de votre concept doivent être valides. Les extensions vous permettent d'ajouter des propriétés et des attributs supplémentaires, et de limiter l'ensemble d'instances à un sous-ensemble d'instances du concept étendu.

Outre l'héritage, la propriété d'état introduit l'idée de références de concepts. En particulier, le concept d'état comporte une propriété appelée country, qui fait référence au concept de pays que nous avons créé ci-dessus. Pour ce faire, utilisez un attribut concept. Notez que cette propriété ne fournit pas d'identifiant, mais uniquement une référence de concept. Cela revient à créer un ID ayant la même valeur que l'ID du concept référencé (par exemple, country dans cet exemple). La relation hiérarchique entre l'État et le comté est capturée en ayant un attribut isParent="true" sur la référence. En général, les dimensions avec des relations hiérarchiques, telles que les zones géographiques, doivent être représentées de cette façon, le concept enfant ayant une propriété qui fait référence au concept parent à l'aide de l'attribut isParent.

La définition du tableau des états se présente comme suit:

<tables>
  ...
  <table id="states_table">
    <column id="state" type="string"/>
    <column id="name" type="string"/>
    <column id="country" type="string">
      <value>US</value>
    </column>
    <column id="latitude" type="float"/>
    <column id="longitude" type="float"/>
    <data>
      <file format="csv" encoding="utf-8">states.csv</file>
    </data>
  </table>
  ...
</tables>

La colonne "Country" comporte une valeur constante pour tous les États. Si vous la spécifiez dans le DSPL, il est inutile de répéter cette valeur pour chaque état des données. Notez également que nous avons inclus des colonnes pour name, latitude et longitude, car l'état a hérité de ces propriétés de geo:location. D'autre part, certaines propriétés héritées (par exemple, description) n'ont pas de colonnes. Ce qui est tout à fait acceptable. Si une propriété est omise d'une table de définition de concepts, sa valeur est supposée être non définie pour chaque instance du concept.

Le fichier CSV se présente comme suit:

state, name,        latitude,  longitude
AL,    Alabama,     32.318231, -86.902298
AK,    Alaska,      63.588753, -154.493062
AR,    Arkansas,    35.20105,  -91.831833
AZ,    Arizona,     34.048928, -111.093731
CA,    California,  36.778261, -119.417932
CO,    Colorado,    39.550051, -105.782067
CT,    Connecticut, 41.603221, -73.087749
...

Comme nous disposons déjà de concepts de population et d'année, nous pouvons les réutiliser pour définir une nouvelle tranche pour la population d'États.

<slices>
  <slice id="states_slice">
    <dimension concept="state"/>
    <dimension concept="time:year"/>
    <metric concept="population"/>
    <table ref="states_slice_table"/>
  </slice>
</slices>

La définition du tableau de données se présente comme suit:

<tables>
  ...
  <table id="states_slice_table">
    <column id="state" type="string"/>
    <column id="year" type="date" format="yyyy"/>
    <column id="population" type="integer"/>
    <file format="csv" encoding="utf-8">state_slice.csv</file>
  </table>
  ...
</tables>

Et le fichier CSV ressemble à ceci:

state, year, population
AL,    1960, 9616353
AL,    1961, 9799379
AL,    1962, 9989846
AL,    1963, 10188299

Pourquoi créer une tranche au lieu d'ajouter une dimension à la précédente ?

Une tranche avec des dimensions à la fois pour l'État et le pays ne serait pas correcte, car certaines lignes seraient destinées aux données par pays et d'autres aux États. Le tableau comporterait des "trous" pour certaines dimensions, ce qui n'est pas autorisé (n'oubliez pas que les valeurs manquantes ne sont autorisées que pour les métriques et non pour les dimensions).

Les dimensions agissent comme une "clé primaire" pour la tranche. Cela signifie que toutes les lignes de données doivent avoir des valeurs pour toutes les dimensions, et qu'aucune ligne ne peut avoir exactement les mêmes valeurs pour toutes les dimensions.

Ajouter une métrique: Taux de chômage

Ajoutons maintenant une autre métrique à notre ensemble de données:

<concept id="unemployment_rate" extends="quantity:rate">
  <info>
    <name>
      <value>Unemployment rate</value>
    </name>
    <description>
      <value>The percent of the labor force that is unemployed.</value>
    </description>
    <url>
      <value>http://www.bls.gov/cps/cps_htgm.htm</value>
    </url>
  </info>
  <type ref="float/>
  <attribute id="is_percentage">
    <type ref="boolean"/>
    <value>true</value>
  </attribute>
</concept>

La section info de cette métrique comporte un nom, une description et une URL (lien vers le Bureau des statistiques de travail des États-Unis).

Ce concept étend également le concept canonique de quantity:rate. L'ensemble de données de quantité définit les concepts fondamentaux de la représentation des quantités numériques. Dans votre ensemble de données, vous devez créer vos concepts numériques en étendant le concept de quantité approprié. Ainsi, le concept population défini ci-dessus aurait techniquement été étendu à partir de quantity:amount.

Attributs du concept

Ce concept introduit également la construction d'un attribut. Dans cet exemple, un attribut indique que unemployment_rate est un pourcentage. L'attribut is_percentage est hérité du concept quantity:rate que ce concept étend. Ces informations sont utilisées par Public Data Explorer pour afficher des signes de pourcentage lors de la visualisation des données.

Les attributs fournissent un mécanisme général permettant d'associer des paires clé/valeur à un concept (contrairement aux propriétés, qui associent des valeurs supplémentaires aux instances d'un concept). Tout comme les concepts et les propriétés, les attributs ont un id, un info et un type. Tout comme les propriétés, elles peuvent faire référence à d'autres concepts.

Les attributs ne concernent pas que des éléments généraux prédéfinis, tels que des propriétés numériques. Vous pouvez définir vos propres attributs pour vos concepts.

Ajouter des données sur le taux de chômage pour les États-Unis

Nous sommes maintenant prêts à ajouter des données sur le taux de chômage pour les États américains. Étant donné que le taux de chômage est une métrique et que nous disposons déjà de données sur la population des États, nous pouvons simplement l'ajouter à la tranche que nous avons déjà créée pour les dimensions d'État et d'année:

<slices>
  ...
  <slice id="states_slice">
    <dimension concept="state"/>
    <dimension concept="time:year"/>
    <metric concept="population"/>
    <metric concept="unemployment_rate"/>
    <table ref="states_slice_table"/>
  </slice>
  ...
</slices>

... et ajouter une colonne à la définition de table:

<tables>
  ...
  <table id="states_slice_table">
    <column id="state" type="string"/>
    <column id="year" type="date" format="yyyy"/>
    <column id="population" type="integer"/>
    <column id="unemployment_rate" type="float"/>
    <data>
      <file format="csv" encoding="utf-8">state_slice.csv</file>
    </data>
  </table>
  ...
</tables>

... et dans le fichier CSV:

state, year, population, unemployment_rate
AL,    1960, 9616353,    5.1
AL,    1961, 9799379,    5.2
AL,    1962, 9989846,    4.8
AL,    1963, 10188299,   6.9

Comme nous l'avons dit précédemment, les dimensions constituent une clé primaire pour chaque tranche. En outre, chaque ensemble de données ne peut contenir qu'une seule tranche pour une combinaison donnée de dimensions. Toutes les métriques disponibles pour ces dimensions doivent appartenir à la même tranche.

Plus de dimensions: Répartition de la population par sexe

Enrichissons notre ensemble de données avec une répartition par sexe et par pays. À présent, vous commencez à connaître le détail... Nous devons d'abord ajouter un concept de genre:

<concept id="gender" extends="entity:entity">
  <info>
    <name>
      <value>Gender</value>
    </name>
    <description>
      <value>Gender, Male or Female</value>
    </description>
    <pluralName>
      <value>Genders</value>
    </pluralName>
    <totalName>
      <value>Both genders</value>
    </totalName>
  </info>
  <type ref="string"/>
  <table ref="genders_table"/>
</concept>

La section info du concept de genre contient un pluralName, qui fournit le texte à utiliser pour faire référence à plusieurs instances du concept de genre. La section info inclut également un élément totalName, qui fournit le texte à utiliser pour faire référence à toutes les instances du concept de genre dans son ensemble. L'explorateur de données publiques s'en sert pour afficher des informations liées au concept de genre. En général, vous devez les indiquer pour les concepts pouvant être utilisés en tant que dimensions.

Notez que le concept de genre s'étend également de entity:entity. Il s'agit d'une bonne pratique pour les concepts utilisés comme dimensions, car elle vous permet d'ajouter des noms, des URL et des couleurs personnalisés pour les différentes instances de concept.

Le concept de genre fait référence à la table genders_table, qui contient les valeurs possibles pour le genre et ses noms à afficher (non répertoriés ici).

Pour ajouter la population par sexe à notre ensemble de données, nous devons créer une tranche (n'oubliez pas que chaque combinaison de dimensions disponible correspond à une tranche de l'ensemble de données).

<slice id="countries_gender_slice">
  <dimension concept="country"/>
  <dimension concept="gender"/>
  <dimension concept="time:year"/>
  <metric concept="population"/>
  <table ref="countries_gender_slice_table"/>
</slice>

La définition de la table pour la tranche se présente comme suit:

<table id="countries_gender_slice_table">
  <column id="country" type="string"/>
  <column id="gender" type="string"/>
  <column id="year" type="date" format="yyyy"/>
  <column id="population" type="integer"/>
  <data>
    <file format="csv" encoding="utf-8">gender_country_slice.csv</file>
  </data>
</table>

Le fichier CSV de la table se présente comme suit:

country, gender, year, population
AF,      M,      1960, 4808176
AF,      F,      1960, 4808177
AF,      M,      1961, 4899689
AF,      F,      1961, 4899690...

Par rapport aux pays, à la population et au chômage indiqués précédemment, cette variable a une dimension supplémentaire. Chaque valeur de la métrique de population correspond non seulement à un pays et à une année spécifiques, mais également à un sexe particulier.

Notez que nous avons créé un ensemble de données "creux". Toutes les métriques ne sont pas disponibles pour toutes les dimensions: la population est disponible par an et par pays aux États-Unis, tandis que le taux de chômage n'est disponible que pour les pays. La répartition par sexe n'est disponible que pour la population par pays. Elle n'est pas disponible pour la métrique de taux de chômage, ni pour la dimension État. La parcimonie peut également exister au niveau des données, car certaines métriques n'ont pas de valeurs pour certaines valeurs de dimensions, mais elles ne sont pas représentées dans DSPL.

Rubriques

La dernière fonctionnalité de DSPL que nous allons utiliser dans notre ensemble de données est topics. Les sujets permettent de classer les concepts de manière hiérarchique, et les applications aident les utilisateurs à accéder à vos données.

Dans le fichier DSPL, les thèmes apparaissent juste avant les concepts. Voici un exemple de hiérarchie de sujets:

<dspl ... >
  ...
  <topics>
    <topic id="geography">
      <info>
        <name>
          <value>Geography</value>
        </name>
      </info>
    </topic>
    <topic id="social_indicators">
      <info>
        <name>
          <value>Social indicators</value>
        </name>
      </info>
    </topic>
    <topic id="population_indicators">
      <info>
        <name>
          <value>Population indicators</value>
        </name>
      </info>
    </topic>
    <topic id="poverty_and_income">
      <info>
        <name>
          <value>Poverty & income</value>
        </name>
      </info>
    </topic>
    <topic id="health">
      <info>
        <name>
          <value>Health</value>
        </name>
      </info>
    </topic>
  </topics>

Vous pouvez imbriquer des sujets aussi précisément que nécessaire.

Pour utiliser des sujets, il vous suffit de les référencer depuis la définition du concept, comme suit:

<concept id="population">
  <info>
    <name>
      <value>Population</value>
    </name>
    <description>
      <value>Size of the resident population.</value>
    </description>
  </info>
  <topic ref="population_indicators"/>
  <type ref="integer"/>
</concept>

Un concept peut faire référence à plusieurs sujets.

Envoyer votre ensemble de données

Maintenant que vous avez créé votre ensemble de données, l'étape suivante consiste à le compresser et à importer le fichier ZIP dans l'outil Google Public Data Explorer. Si vous rencontrez des problèmes, consultez les questions fréquentes, qui incluent une discussion sur les problèmes de mise en ligne les plus courants.

Pour référence, vous pouvez également télécharger le fichier XML complet et le groupe d'ensembles de données complet associés à ce tutoriel.

Étapes suivantes

Félicitations pour la création de votre premier ensemble de données DSPL ! Maintenant que vous connaissez les principes de base, nous vous recommandons de lire le Guide du développeur, qui décrit, entre autres, les fonctionnalités DSPL "avancées" telles que la compatibilité multilingue et les concepts pouvant être mappés.

Vous pouvez également consulter d'autres exemples d'ensembles de données.