Tutorial DSPL

DSPL è l'acronimo di Dataset Publishing Language. I set di dati descritti in DSPL possono essere importati in Google Public Data Explorer, uno strumento che consente di eseguire un'esplorazione visiva e approfondita dei dati.

Nota: per caricare i dati in Google Public Data utilizzando lo strumento di caricamento dei dati pubblici, devi disporre di un Account Google.

Questo tutorial fornisce un esempio dettagliato di come preparare un set di dati DSPL di base.

Un set di dati DSPL è un set che contiene un file XML e un insieme di file CSV. I file CSV sono tabelle semplici contenenti i dati del set di dati. Il file XML descrive i metadati del set di dati, compresi i metadati informativi come le descrizioni delle misure, nonché i metadati strutturali come i riferimenti tra tabelle. I metadati consentono agli utenti non esperti di esplorare e visualizzare i tuoi dati.

L'unico prerequisito per comprendere questo tutorial è un buon livello di comprensione di XML. Qualche conoscenza dei concetti semplici del database (ad es. tabelle, chiavi primarie) possono essere di aiuto, ma non è obbligatorio. Come riferimento, puoi anche esaminare il file XML completo e il set di set di dati completo associati a questo tutorial.

Panoramica

Prima di iniziare a creare il nostro set di dati, di seguito è riportata una panoramica generale di ciò che contiene un set di dati DSPL:

  • Informazioni generali: sul set di dati
  • Concetti: definizioni di "cose" che compaiono nel set di dati (ad esempio paesi, tasso di disoccupazione, genere e così via).
  • Sezioni: combinazioni di concetti per i quali esistono dati
  • Tabelle: dati per concetti e sezioni. Le tabelle dei concetti contengono enumerazioni e le tabelle delle sezioni contengono i dati statistici
  • Argomenti: utilizzati per organizzare i concetti del set di dati in una gerarchia significativa tramite l'etichettatura

Per illustrare queste nozioni piuttosto astratte, considera il set di dati (con dati fittizi) utilizzato in questo tutorial: serie temporali statistiche per la popolazione e la disoccupazione, aggregate in base a varie combinazioni di paese, stato degli Stati Uniti e genere.

Questo set di dati di esempio definisce i seguenti concetti:

  • country
  • genere
  • popolazione
  • state
  • tasso di disoccupazione
  • anno

I concetti che sono categorici, come lo stato, sono associati alle tabelle relative ai concetti, che enumerano tutti i loro valori possibili (California, Arizona e così via). I concetti potrebbero avere colonne aggiuntive per proprietà come il nome o il paese di uno stato.

Le fette definiscono ogni combinazione di concetti per i quali esistono dati statistici nel set di dati. Una sezione contiene dimensioni e metriche. Nell'immagine sopra, le dimensioni sono blu e le metriche sono arancioni. In questo esempio, la sezione gender_country_slice contiene dati per la metrica population e le dimensioni country, year e gender. Un'altra porzione, chiamata country_slice, fornisce i numeri totali della popolazione annuale (metrica) per i paesi.

Oltre alle dimensioni e alle metriche, le sezioni fanno riferimento anche alle tabelle che contengono i dati effettivi.

Ora vediamo la creazione passo passo di questo set di dati in DSPL.

Informazioni su set di dati

Per iniziare, dobbiamo creare un file XML per il nostro set di dati. Di seguito è riportato l'inizio di una descrizione di DSPL per il nostro set di dati di esempio:

<?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 descrizione del set di dati inizia con un elemento <dspl> di primo livello. L'attributo targetNamespace contiene un URI che identifica in modo univoco questo set di dati. Lo spazio dei nomi del set di dati è particolarmente importante durante la pubblicazione del set di dati, in quanto sarà l'identificatore globale del set di dati e i mezzi per fare riferimento ad altri.

Tieni presente che l'attributo targetNamespace potrebbe essere omesso. In questo caso viene generato automaticamente uno spazio dei nomi univoco al momento dell'importazione del set di dati.

Utilizzo delle informazioni di altri set di dati

I set di dati possono riutilizzare definizioni e dati da altri set di dati importando tali set di dati. Ogni elemento <import> specifica lo spazio dei nomi di un altro set di dati a cui farà riferimento questo set di dati.

Nel nostro set di dati di esempio, abbiamo bisogno di alcune definizioni di http://www.google.com/publicdata/dataset/google/quantity (un set di dati creato da Google che contiene concetti utili per definire le quantità numeriche) e dei set di dati time, entity e geo, che forniscono definizioni rispettivamente per tempo, entità e area geografica.

L'elemento <dspl> principale fornisce una dichiarazione del prefisso dello spazio dei nomi (ad esempio, xmlns:time="http://...") per ogni set di dati importato. Le dichiarazioni dei prefissi sono necessarie per fare riferimento agli elementi di altri set di dati in modo conciso. Ad esempio, time:year fa riferimento alla definizione di year nel set di dati importato il cui spazio dei nomi è associato al prefisso time.

Informazioni su set di dati e provider

L'elemento <info> contiene informazioni generali sul set di dati: nome, descrizione e un URL dove è possibile trovare ulteriori informazioni.

L'elemento <provider> contiene informazioni sul fornitore del set di dati: il nome e un URL in cui è possibile trovare ulteriori informazioni (in genere la home page del fornitore di dati).

Definizione dei concetti

Ora che abbiamo fornito alcune informazioni generali sul set di dati, siamo pronti per iniziare a definirne i contenuti. Il nostro prossimo obiettivo è aggiungere statistiche sulla popolazione per i paesi degli ultimi 50 anni.

La prima cosa da fare è fornire alcune definizioni per la nozione di popolazione, paese e anno. In DSPL, queste definizioni sono chiamate concetti.

Un concetto è una definizione di un tipo di dati che appare in un set di dati. I valori dei dati che corrispondono a un determinato concetto sono chiamati istanze di quel concetto.

Popolazione

Per iniziare, definiamo il concetto di popolazione. In un documento DSPL, i concetti sono definiti in un elemento <concepts> che si trova subito dopo il set di dati e le informazioni del provider.

Di seguito è riportato un concetto di popolazione con solo le informazioni minime richieste per qualsiasi concetto: id (un identificatore univoco), name e type.

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

Ecco come funziona questo codice di esempio:

  • Ogni concetto deve fornire un elemento id che identifichi in modo univoco il concetto all'interno del set di dati. Ciò significa che non esistono due concetti definiti nello stesso set di dati che possono avere lo stesso ID.
  • Proprio come per il set di dati e il relativo provider, gli elementi <info> forniscono informazioni testuali sul concetto, ad esempio il nome e la descrizione.
  • L'elemento <type> specifica il tipo di dati per le istanze del concetto (in altre parole, i suoi "valori"). In questo esempio, il tipo population è integer. DSPL supporta i seguenti tipi di dati:
    • string
    • integer
    • float
    • boolean
    • date

Paese

Ora descriviamo la definizione del concetto di paese:

<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>

La definizione del concetto di paese inizia come la precedente, con id, info e type.

Valori concettuali

I concetti categorici come i paesi hanno un'enumerazione di tutte le istanze possibili. In altre parole, puoi elencare tutti i paesi possibile a cui può essere fatto riferimento. Tuttavia, per farlo, ogni paese deve avere un identificatore univoco. In questo esempio vengono utilizzati i codici paese ISO per identificare i paesi; questi codici sono di tipo string.

In questo esempio, non è necessario utilizzare il codice ISO, ma anche il nome del paese. I nomi, tuttavia, variano in base alla lingua, ma possono cambiare nel tempo e non sono sempre utilizzati in modo coerente nei set di dati. Per i paesi e per i concetti categorici in generale, è buona norma scegliere identificatori brevi, stabili, comunemente utilizzati e indipendenti dalla lingua (se presenti).

Proprietà dei concetti

Oltre alla relativa id, il concetto di paese include un elemento <property> che specifica il nome del paese. In altre parole, il nome del paese ("Irlanda") è una proprietà del paese con id IE. Le proprietà consentono a DSPL di fornire ulteriori informazioni strutturate sulle istanze di un concetto.

Proprio come il concetto in sé, le proprietà hanno id, info e type.

Dati sui concetti

Infine, il concetto di paese ha un elemento <table>. Questo elemento fa riferimento a una tabella che enumera l'elenco di tutti i paesi.

L'utilizzo delle tabelle ha senso per alcuni concetti, ma non per altri. Ad esempio, non ha senso enumerare tutti i possibili valori per la popolazione concettuale. Tuttavia, se fai riferimento a una tabella per un concetto, questa deve contenere tutte le istanze del concetto, ad esempio deve elencare ogni paese, non solo alcuni esempi.

Il set di dati definisce la tabella countries_table come segue:

...
<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 tabella dei paesi specifica le colonne della tabella e i relativi tipi e fa riferimento a un file CSV contenente i dati. Questo file CSV può essere integrato e caricato con il set di dati XML oppure accessibile da remoto tramite HTTP, HTTPS o FTP. Negli ultimi casi, sostituiresti countries.csv con un URL, ad esempio http://www.myserver.com/mydata/countries.csv.

In qualsiasi posizione, il file CSV ha il seguente aspetto:

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

La prima riga della tabella elenca gli ID colonna, come specificato nella definizione table di DSPL. Ognuna delle seguenti righe corrisponde a un'istanza del concetto di paese. Se il concetto ha una tabella, questa deve contenere tutte le istanze del concetto, in questo caso deve elencare tutti i paesi.

Le colonne sono mappate al concetto di paese e alle relative proprietà in base all'ID. L'ID della prima colonna, country, corrisponde all'ID concetto. Ciò significa che questa colonna contiene l'identificatore univoco del paese definito dal concetto di paese. La colonna successiva corrisponde alla proprietà name del concetto di paese. I valori in questa colonna corrispondono ai valori della proprietà name.

Esistono alcuni requisiti per i dati CSV per la tabella concettuale:

  • Le intestazioni di colonna nella prima riga del file di dati devono corrispondere esattamente al concetto id e alla proprietà id del concetto a cui sono associati i dati (anche se l'ordine può variare).
  • Ogni riga deve avere esattamente lo stesso numero di elementi del numero di proprietà nel concetto (anche se il valore è vuoto).
  • Ogni valore del campo id del concetto (qui, il codice paese) deve essere univoco e non vuoto (un campo vuoto è uno con zero o solo spazi vuoti).
  • I valori delle proprietà che fanno riferimento ad altri concetti devono essere vuoti o essere un valore valido per il concetto a cui si fa riferimento.
  • I valori che contengono virgole, virgolette doppie o caratteri di nuova riga devono essere racchiusi completamente tra virgolette doppie.
  • Le virgolette doppie all'interno di un valore devono essere immediatamente precedute da un'altra citazione.

Anno

L'ultimo concetto di cui abbiamo bisogno per i dati sulla popolazione del nostro paese è quello di rappresentare gli anni. Invece di definire un nuovo concetto, utilizzeremo il concetto dell'anno da uno dei set di dati che abbiamo importato: "http://www.google.com/publicdata/dataset/google/time". Per fare ciò, dobbiamo farvi riferimento come time:year, dove time rappresenta il set di dati a cui viene fatto riferimento e year identifica il concetto.

Concetti canonici

time:year fa parte di un piccolo insieme di concetti canonici definiti da Google. I concetti canonici forniscono definizioni di base per tempo, area geografica, quantità numeriche, unità e così via.

In effetti, il concetto relativo al paese definito sopra esiste come concetto canonico. L'abbiamo creato qui solo a scopo illustrativo. Quando possibile, dovresti utilizzare concetti canonici nei tuoi set di dati, direttamente o estendendoli (di seguito puoi trovare ulteriori informazioni sull'estensione). I concetti canonici rendono i dati confrontabili con altri set di dati e abilitano le funzionalità per i set di dati in Public Data Explorer. Ad esempio, l'animazione di dati nel tempo o la visualizzazione di dati geografici su una mappa si basa rispettivamente sui concetti canonici time e geo.

Prima fetta

Ora che abbiamo dei concetti per la popolazione, il paese e l'anno, è il momento di riunirli.

Per questo motivo dobbiamo creare una sezione che li combini. In DSPL, una sezione è una combinazione di concetti per i quali esistono dati.

Perché non creare semplicemente una tabella con le colonne giuste? Perché le sezioni acquisiscono le informazioni del set di dati in termini di concetti. Questo diventerà più chiaro man mano che creeremo altri elementi del nostro set di dati.

Le sezioni vengono visualizzate nel file DSPL in un elemento <slices>, subito dopo la sezione concepts.

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

Proprio come i concetti, ogni sezione ha un elemento id (countries_slice) che identifica in modo univoco la sezione all'interno del set di dati.

Una porzione contiene due tipi di riferimenti a concetti: Dimensioni e metriche. I valori delle metriche variano in base ai valori delle dimensioni. qui, il valore di population (la metrica) varia a seconda delle dimensioni country e year.

Proprio come i concetti, le sezioni includono un riferimento a una tabella che contiene i dati della sezione. La tabella di riferimento deve avere una colonna per ogni dimensione e metrica della sezione. Come per i concetti, le dimensioni e le metriche della sezione vengono mappate alle colonne della tabella con gli stessi ID.

Tabella sezioni

La tabella della sezione relativa alla popolazione viene visualizzata nella sezione tables del file 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>

Tieni presente che la colonna year include un attributo format che specifica la modalità di formattazione degli anni. I formati di data supportati sono quelli definiti dal formato Jooda DateTime.

La tabella countries_slice specifica le colonne della tabella e i relativi tipi e rimanda a un file CSV contenente i dati. Il file CSV avrà il seguente aspetto:

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

Ogni riga della tabella di dati contiene una combinazione unica delle dimensioni country e year, insieme al valore corrispondente della metrica population (ad esempio, la popolazione - metrica - dell'Afghanistan nel 1960 - dimensioni).

Tieni presente che i valori nella colonna country corrispondono al valore/identificatore del concetto country, che rappresenta il codice ISO 3166 di due lettere del paese.

I dati CSV di una sezione devono soddisfare i seguenti vincoli:

  • Ogni valore di un campo dimensione (come country e year) non deve essere vuoto. I valori dei campi delle metriche (ad esempio population) possono essere vuoti. Un valore vuoto è rappresentato da nessun carattere.
  • Ciascun valore di un campo dimensione che fa riferimento a un concetto deve essere presente nei dati del concetto. Ad esempio, il valore AF deve essere presente nella tabella dei dati sui concetti di country.
  • Ogni combinazione univoca di valori di dimensione, ad esempio AF, 2000, può verificarsi una sola volta.
  • I dati devono essere ordinati in base alle colonne delle dimensioni non temporali (in qualsiasi ordine) e, facoltativamente, in base a qualsiasi altra colonna. Ad esempio, in una tabella con le colonne [date, dimension1, dimension2, metric1, metric2], puoi ordinare l'elenco per dimension1, quindi per dimension2, quindi per date, ma non per date e infine per le dimensioni.

Riepilogo

A questo punto, nel nostro DSPL disponiamo di dati sufficienti per descrivere i dati sulla popolazione del paese. Riassumendo, abbiamo dovuto:

  • Crea l'intestazione DSPL e la descrizione del set di dati e del relativo provider
  • Crea un concetto per la popolazione e un altro per il paese, con un file CSV che elenca tutti i paesi e i relativi nomi.
  • Crea una sezione con i nostri dati sulla popolazione per i paesi nel tempo, facendo riferimento al concetto dell'anno già definito nel set di dati importati da Google.

Nel resto di questo tutorial, arricchiremo il nostro set di dati aggiungendo più dimensioni in più sezioni e più metriche raggruppate per argomento.

Aggiunta di una dimensione: Stati USA

Ora arricchiamo il nostro set di dati aggiungendo dati sulla popolazione per gli stati degli Stati Uniti. Dobbiamo prima definire un concetto per gli stati. Assomiglia molto al concetto di paese che abbiamo definito in precedenza.

<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>

Estensioni concettuali e riferimenti delle proprietà

Il concetto dello stato introduce diverse nuove funzionalità di DSPL.

Innanzitutto, lo stato estende un altro concetto, geo:location (definito nel set di dati geografico esterno che abbiamo importato all'inizio del nostro set di dati). Semalmente, ciò significa che state è un tipo di geo:location. Di conseguenza, eredita tutti gli attributi e le proprietà di geo:location. In particolare, la località definisce le proprietà per latitude e longitude; estendendo il concetto precedente, queste proprietà vengono applicate anche allo stato. Inoltre, poiché la località eredita da entity:entity, lo stato ottiene anche tutte le proprietà di quest'ultima, tra cui name, description e info_url.

Nota: tecnicamente, anche il concetto di paese definito in precedenza deve essere esteso da geo:location. Questo punto è stato omesso in precedenza per semplicità; abbiamo incluso la località in base all'ereditarietà del paese, nel file XML finale.

Nota: puoi utilizzare il costrutto extends nei tuoi set di dati per riutilizzare le informazioni definite da altri set di dati. L'utilizzo di extends richiede che tutte le istanze del concetto siano istanze valide del concetto che stai estendendo. Le estensioni ti consentono di aggiungere ulteriori proprietà e attributi e di limitare l'insieme di istanze a un sottoinsieme di istanze del concetto esteso.

Oltre all'ereditarietà, la proprietà dello stato introduce anche l'idea di riferimenti. In particolare, il concetto a livello di stato ha una proprietà denominata country, che fa riferimento al concetto di paese creato sopra. A tal fine, utilizza un attributo concept. Tieni presente che questa proprietà non fornisce un ID, ma solo un riferimento a un concetto. Ciò equivale a creare un ID con lo stesso valore dell'ID del concetto a cui viene fatto riferimento (ad es. country in questo esempio). La relazione gerarchica tra stato e contea viene acquisita inserendo un attributo isParent="true" nel riferimento. In generale, le dimensioni con relazioni gerarchiche, come le aree geografiche, devono essere rappresentate in questo modo: il concetto secondario ha una proprietà che fa riferimento al concetto padre utilizzando l'attributo isParent.

La definizione della tabella per gli stati ha il seguente aspetto:

<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 colonna del paese ha un valore costante in tutti gli stati. Specificarlo nel DSPL evita di ripetere questo valore per ogni stato nei dati. Inoltre, abbiamo incluso le colonne per name, latitude e longitude perché lo stato ha ereditato queste proprietà da geo:location. D'altra parte, alcune proprietà ereditate (ad esempio description).

Il file CSV ha il seguente aspetto:

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
...

Poiché abbiamo già dei concetti per la popolazione e l'anno, possiamo riutilizzarli per definire una nuova sezione per la popolazione degli stati.

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

La definizione della tabella di dati ha il seguente aspetto:

<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>

E il file CSV avrà il seguente aspetto:

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

Perché abbiamo creato una nuova sezione invece di aggiungere un'altra dimensione a quella precedente?

Una sezione con dimensioni sia per lo stato che per il paese non sarebbe corretta, perché alcune righe indicano i dati di paese e altre di dati statali. La tabella presenta "buchi" per alcune dimensioni, il che non è consentito (ricorda che i valori mancanti sono consentiti solo per le metriche e non per le dimensioni).

Le dimensioni fungono da "chiave primaria" per la sezione. Ciò significa che ogni riga di dati deve avere valori per tutte le dimensioni e nessuna riga di dati può avere gli stessi valori per tutte le dimensioni.

Aggiunta di una metrica: tasso di disoccupazione

Ora aggiungiamo un'altra metrica al nostro set di dati:

<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 sezione info di questa metrica ha un nome, una descrizione e un URL (collegamento al Bureau of Labor Statistics degli Stati Uniti).

Questo concetto estende anche il concetto canonico quantity:rate. Il set di dati quantità definisce i concetti principali per la rappresentazione delle quantità numeriche. Nel set di dati, devi creare i tuoi concetti numerici estendendo il concetto di quantità appropriata. Pertanto, il concetto population definito sopra dovrebbe, tecnicamente, essere stato esteso da quantity:amount.

Attributi dei concetti

Questo concetto introduce anche la struttura di un attributo. In questo esempio, viene utilizzato un attributo per indicare che unemployment_rate è una percentuale. L'attributo is_percentage è ereditato dal concetto quantity:rate esteso da questo concetto. Queste informazioni vengono utilizzate da Public Data Explorer per mostrare i segni di percentuale durante la visualizzazione dei dati.

Gli attributi forniscono un meccanismo generale per collegare le coppie chiave/valore a un concetto (al contrario delle proprietà, che associano valori aggiuntivi alle istanze di un concetto). Proprio come i concetti e le proprietà, gli attributi hanno id, info e type. Come le proprietà, possono fare riferimento ad altri concetti.

Gli attributi non sono solo per elementi generici predefiniti, ad esempio proprietà numeriche. Puoi definire degli attributi personalizzati per i tuoi concetti.

Aggiunta dei dati relativi al tasso di disoccupazione per gli Stati Uniti

Ora possiamo aggiungere dati sul tasso di disoccupazione per gli Stati Uniti. Poiché il tasso di disoccupazione è una metrica e disponiamo già di dati sulla popolazione per gli stati, possiamo semplicemente aggiungerla alla porzione già creata per le dimensioni stato e anno:

<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>

... e aggiungi un'altra colonna alla definizione della tabella:

<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>

... e al file 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

In precedenza abbiamo detto che per ogni porzione le dimensioni formano una chiave primaria. Inoltre, ogni set di dati può contenere una sola sezione per una determinata combinazione di dimensioni. Tutte le metriche disponibili per queste dimensioni devono appartenere alla stessa sezione.

Altre dimensioni: suddivisione della popolazione per genere

Arricchiamo il nostro set di dati con una suddivisione della popolazione per genere nei paesi. A questo punto stai iniziando a conoscere il dettaglio... Innanzitutto, dobbiamo aggiungere un concetto per il genere:

<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 sezione del concetto di genere info ha un pluralName, che fornisce il testo da utilizzare per fare riferimento a più istanze del concetto di genere. La sezione info include anche un totalName, che fornisce il testo da utilizzare per fare riferimento a tutte le istanze del concetto di genere nel suo complesso. Entrambi sono utilizzati da Public Data Explorer per visualizzare informazioni relative al concetto di genere. In generale, dovete fornirli per i concetti che possono essere utilizzati come dimensioni.

Tieni presente che il concetto di genere si estende anche da entity:entity. Questa è una buona pratica per i concetti utilizzati come dimensioni, poiché ti consente di aggiungere nomi, URL e colori personalizzati per le varie istanze di concetto.

Il concetto di genere si riferisce alla tabella genders_table, che contiene i possibili valori per il genere e i relativi nomi visualizzati (omessi qui).

Per aggiungere la popolazione per genere al nostro set di dati, dobbiamo creare una nuova sezione (ricorda: ogni combinazione disponibile di dimensioni corrisponde a una porzione nel set di dati).

<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 definizione della tabella per la sezione ha il seguente aspetto:

<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>

Il file CSV per la tabella è simile al seguente:

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

Rispetto ai paesi precedenti, alla popolazione e alle fasce di disoccupazione, questa ha una dimensione aggiuntiva: ogni valore della metrica della popolazione corrisponde non solo a un determinato paese e anno, ma anche a un determinato genere.

Abbiamo creato un set di dati "sparse". Non tutte le metriche sono disponibili per tutte le dimensioni: la popolazione è disponibile per paesi e stati USA su base annuale, mentre il tasso di disoccupazione è disponibile solo per i paesi. La suddivisione per genere è disponibile solo per la popolazione in base al paese; non è disponibile per la metrica del tasso di disoccupazione e non per la dimensione Stato. La sparsità può esistere anche a livello di dati, con determinate metriche che non presentano valori per alcuni valori di dimensione, ma che non sono rappresentati in DSPL.

Argomenti

L'ultima funzionalità di DSPL che utilizzeremo nel nostro set di dati è l'argomento. Gli argomenti vengono utilizzati per classificare i concetti in modo gerarchico e vengono utilizzati dalle applicazioni per aiutare gli utenti a raggiungere i tuoi dati.

Nel file DSPL, gli argomenti vengono visualizzati prima dei concetti. Di seguito è riportata una gerarchia di argomenti di esempio:

<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>

Puoi nidificare gli argomenti nel modo più necessario.

Per utilizzare gli argomenti, devi solo farvi riferimento dalla definizione del concetto, come segue:

<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 concetto può fare riferimento a più di un argomento.

Inviare il set di dati

Dopo aver creato il set di dati, il passaggio successivo consiste nel comprimerlo e caricare il file ZIP nello strumento Google Public Data Explorer. In caso di problemi, consultate le Domande frequenti, che includono una discussione sui problemi più comuni relativi al caricamento.

Come riferimento, puoi anche scaricare il file XML completo e il set di set di dati completo associati a questo tutorial.

Come procedere

Congratulazioni per aver creato il tuo primo set di dati DSPL. Ora che conosci le nozioni di base, ti consigliamo di leggere la guida per gli sviluppatori, che documenta, tra le altre cose, le funzionalità DSPL "avanzate" come il supporto multilingue e i concetti mappabili.

Puoi anche esaminare altri set di dati di esempio.