DSPL-Anleitung

DSPL steht für Dataset Publishing Language (Dataset-Veröffentlichungssprache). In DSPL beschriebene Datasets können in den Google Public Data Explorer importiert werden, einem Tool, das eine umfassende, visuelle Erkundung der Daten ermöglicht.

Hinweis:Wenn Sie Daten mit dem Tool zum Hochladen von öffentlichen Daten in Google Public Data hochladen möchten, benötigen Sie ein Google-Konto.

Diese Anleitung enthält ein Schritt-für-Schritt-Beispiel für die Vorbereitung eines einfachen DSPL-Datasets.

Ein DSPL-Dataset ist ein Bundle, das eine XML-Datei und einen Satz CSV-Dateien enthält. Die CSV-Dateien sind einfache Tabellen, die die Daten des Datasets enthalten. Die XML-Datei beschreibt die Metadaten des Datasets, einschließlich informativer Metadaten wie Beschreibungen von Maßen sowie strukturelle Metadaten wie Verweise zwischen Tabellen. Mit den Metadaten können auch unerfahrene Nutzer Ihre Daten untersuchen und visualisieren.

Die einzige Voraussetzung für das Verständnis dieser Anleitung sind gute XML-Kenntnisse. Kenntnisse über einfache Datenbankkonzepte (z.B. Tabellen, Primärschlüssel) kann helfen, ist aber nicht erforderlich. Die abgeschlossene XML-Datei und das vollständige Dataset-Bundle, die mit dieser Anleitung verknüpft sind, können ebenfalls eingesehen werden.

Überblick

Bevor Sie mit der Erstellung des Datasets beginnen, finden Sie hier einen allgemeinen Überblick darüber, was ein DSPL-Dataset enthält:

  • Allgemeine Informationen:Informationen zum Dataset
  • Konzepte: Definitionen von „Dingen“, die im Dataset vorkommen (z.B. Länder, Arbeitslosenquote, Geschlecht usw.)
  • Segmente:Kombinationen von Konzepten, für die Daten vorliegen
  • Tabellen: Daten für Konzepte und Segmente. Konzepttabellen enthalten Aufzählungen und Slice-Tabellen statistische Daten.
  • Themen:Wird verwendet, um die Konzepte des Datasets durch Labeling in einer sinnvollen Hierarchie zu organisieren.

Betrachten Sie zur Veranschaulichung dieser eher abstrakten Konzepte das in dieser Anleitung verwendete Dataset (mit Dummy-Daten): statistische Zeitreihen für Bevölkerung und Arbeitslosigkeit, aggregiert nach verschiedenen Kombinationen aus Land, US-Bundesstaat und Geschlecht.

In diesem Beispiel-Dataset werden die folgenden Konzepte definiert:

  • country
  • gender
  • Population
  • state
  • Arbeitslosenquote
  • Jahr

Kategoriale Konzepte wie „Bundesstaat“ sind mit Tabellen verknüpft, in denen alle ihre möglichen Werte aufgeführt sind (Kalifornien, Arizona usw.). Konzepte können zusätzliche Spalten für Attribute wie den Namen oder das Land eines Bundeslands enthalten.

Segmente definieren jede Kombination von Konzepten, für die das Dataset statistische Daten enthält. Ein Slice enthält Dimensionen und Messwerte. In der Abbildung oben sind die Dimensionen blau und die Messwerte orange. In diesem Beispiel enthält das Segment gender_country_slice Daten für den Messwert population und die Dimensionen country, year und gender. Ein weiteres Segment mit dem Namen country_slice gibt die jährlichen Gesamtbevölkerungszahlen (Messwert) für Länder an.

Zusätzlich zu Dimensionen und Messwerten verweisen die Segmente auch auf Tabellen, die die tatsächlichen Daten enthalten.

Gehen wir nun Schritt für Schritt durch die Erstellung eines solchen Datasets in DSPL.

Dataset-Informationen

Zuerst müssen wir eine XML-Datei für unser Dataset erstellen. Hier ist der Anfang einer DSPL-Beschreibung für unser Beispiel-Dataset:

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

Die Dataset-Beschreibung beginnt mit einem übergeordneten <dspl>-Element. Das Attribut targetNamespace enthält einen URI, der dieses Dataset eindeutig identifiziert. Der Namespace des Datasets ist beim Veröffentlichen des Datasets besonders wichtig, da er die globale Kennung des Datasets und die Möglichkeit ist, auf die andere verweisen können.

Das Attribut targetNamespace kann weggelassen werden. In diesem Fall wird beim Importieren des Datasets automatisch ein eindeutiger Namespace generiert.

Informationen aus anderen Datasets verwenden

Datasets können Definitionen und Daten aus anderen Datasets wiederverwenden, indem sie diese Datasets importieren. Jedes <import>-Element gibt den Namespace eines anderen Datasets an, auf das dieses Dataset verweist.

Für unser Beispiel-Dataset benötigen wir Definitionen aus http://www.google.com/publicdata/dataset/google/quantity (einem von Google erstellten Dataset, das Konzepte zum Definieren numerischer Mengen enthält) und aus den Datasets time, entity und geo, die Definitionen in Bezug auf Zeit, Entitäten bzw. Geografie enthalten.

Das oberste <dspl>-Element stellt eine Namespace-Präfixdeklaration bereit (z.B. xmlns:time="http://...") für jedes importierte Dataset. Präfixdeklarationen sind erforderlich, um prägnant auf Elemente aus anderen Datasets zu verweisen. Beispielsweise verweist time:year auf die Definition von year im importierten Dataset, dessen Namespace mit dem Präfix time verknüpft ist.

Informationen zum Datensatz und -anbieter

Das Element <info> enthält allgemeine Informationen zum Dataset: Name, Beschreibung und eine URL, unter der weitere Informationen zu finden sind.

Das Element <provider> enthält Informationen zum Anbieter des Datasets: seinen Namen und eine URL, unter der weitere Informationen zu finden sind (in der Regel die Startseite des Datenanbieters).

Konzepte definieren

Nachdem wir nun einige allgemeine Informationen über das Dataset bereitgestellt haben, können wir mit der Definition seines Inhalts beginnen. Unser nächstes Ziel ist es, Bevölkerungsstatistik für Länder der letzten 50 Jahre hinzuzufügen.

Zuerst müssen wir einige Definitionen für Bevölkerung, Land und Jahr definieren. In DSPL werden diese Definitionen als Konzepte bezeichnet.

Ein Konzept ist eine Definition eines Datentyps, der in einem Dataset angezeigt wird. Die Datenwerte, die einem bestimmten Konzept entsprechen, werden als Instanzen dieses Konzepts bezeichnet.

Einwohner

Beginnen wir mit der Definition des Populationskonzepts. In einem DSPL-Dokument werden Konzepte in einem <concepts>-Element direkt nach dem Dataset und den Anbieterinformationen definiert.

Hier ist ein Populationskonzept, das nur die für jedes Konzept erforderlichen Mindestinformationen enthält: id (eine eindeutige Kennung), name und type.

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

Erklärung:

  • Für jedes Konzept muss ein id angegeben werden, mit dem das Konzept innerhalb des Datasets eindeutig identifiziert wird. Das bedeutet, dass zwei Konzepte, die im selben Dataset definiert sind, nicht dieselbe ID haben dürfen.
  • Genau wie für das Dataset und seinen Anbieter stellen die <info>-Elemente Textinformationen über das Konzept bereit, z. B. Name und Beschreibung.
  • Mit dem Element <type> wird der Datentyp für die Instanzen des Konzepts, also die zugehörigen „Werte“, angegeben. In diesem Beispiel ist der Typ population integer. DSPL unterstützt die folgenden Datentypen:
    • string
    • integer
    • float
    • boolean
    • date

Land

Schreiben wir nun die Definition des Länderkonzepts auf:

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

Die Definition des Länderkonzepts beginnt wie die vorherige, mit id, info und type.

Konzeptwerte

Für kategorische Konzepte wie Länder gibt es eine Aufzählung aller möglichen Instanzen. Mit anderen Worten: Sie können alle möglichen Länder auflisten, auf die verwiesen werden kann. Dazu benötigt jedes Land aber eine eindeutige Kennung. In diesem Beispiel werden zum Identifizieren von Ländern ISO-Ländercodes verwendet. Diese Codes sind vom Typ string.

In diesem Beispiel müssen Sie nicht den ISO-Code verwenden, sondern können auch den Ländernamen verwenden. Namen unterscheiden sich jedoch je nach Sprache, können sich im Laufe der Zeit ändern und werden nicht immer in allen Datasets einheitlich verwendet. Für Länder und für kategoriale Konzepte im Allgemeinen empfiehlt es sich, kurze, stabile, häufig verwendete und sprachunabhängige Kennzeichnungen (sofern vorhanden) auszuwählen.

Konzeptattribute

Zusätzlich zu id verfügt das Länderkonzept über ein <property>-Element, das den Namen des Landes angibt. Mit anderen Worten: Der Ländername („Irland“) ist eine Property des Landes mit dem IE id. Über Attribute kann DSPL zusätzliche strukturierte Informationen zu den Instanzen eines Konzepts bereitstellen.

Genau wie das Konzept selbst haben Attribute ein id, info und type.

Konzeptdaten

Das Länderkonzept hat schließlich ein <table>-Element. Dieses Element verweist auf eine Tabelle, in der die Liste aller Länder aufgeführt ist.

Die Verwendung von Tabellen ist bei einigen Konzepten sinnvoll, bei anderen jedoch nicht. Es ist beispielsweise nicht sinnvoll, alle möglichen Werte für die Konzeptpopulation aufzuzählen. Wenn Sie jedoch für ein Konzept auf eine Tabelle verweisen, muss diese Tabelle alle Instanzen des Konzepts enthalten – z. B. alle Länder und nicht nur einige Beispiele.

Das Dataset definiert die Tabelle countries_table so:

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

Die Ländertabelle gibt die Spalten der Tabelle und ihre Typen an und verweist auf eine CSV-Datei, die die Daten enthält. Diese CSV-Datei kann entweder gebündelt und mit der Dataset-XML-Datei hochgeladen oder per Fernzugriff über HTTP, HTTPS oder FTP aufgerufen werden. In letzteren Fällen ersetzen Sie countries.csv durch eine URL, z. B. http://www.myserver.com/mydata/countries.csv.

Wo auch immer sie gespeichert ist, sieht die CSV-Datei wie folgt aus:

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

In der ersten Zeile der Tabelle werden die Spalten-IDs aufgelistet, wie in der DSPL-Definition table angegeben. Jede der folgenden Zeilen entspricht einer Instanz des Länderkonzepts. Wenn das Konzept eine Tabelle hat, muss sie alle Instanzen des Konzepts enthalten – in diesem Fall alle Länder.

Die Spalten werden dem Länderkonzept und seinen Eigenschaften anhand ihrer ID zugeordnet. Die ID der ersten Spalte, country, stimmt mit der Konzept-ID überein. Dies bedeutet, dass diese Spalte die eindeutige Länderkennung enthält, die durch das Länderkonzept definiert wird. Die nächste Spalte entspricht der Eigenschaft name des Länderkonzepts. Die Werte in dieser Spalte entsprechen den Werten des Attributs name.

Für die Konzepttabelle gelten einige Anforderungen an die CSV-Daten:

  • Die Spaltenüberschriften in der ersten Zeile der Datendatei müssen exakt mit dem Konzept id und dem Attribut id des Konzepts übereinstimmen, mit dem die Daten verknüpft sind. Die Reihenfolge kann jedoch variieren.
  • Jede Zeile muss genau die gleiche Anzahl von Elementen wie die Anzahl der Attribute für das Konzept enthalten (auch wenn der Wert leer ist).
  • Jeder Wert für das Feld id des Konzepts (hier der Ländercode) muss eindeutig und nicht leer sein (ein leeres Feld enthält null oder nur Leerzeichen).
  • Werte für Attribute, die auf andere Konzepte verweisen, müssen entweder leer oder ein gültiger Wert des referenzierten Konzepts sein.
  • Werte, die Kommas, doppelte Anführungszeichen oder Zeilenumbruchzeichen enthalten, müssen vollständig in doppelte Anführungszeichen gesetzt werden.
  • Jedem literalen doppelten Anführungszeichen innerhalb eines Werts muss unmittelbar ein weiteres doppeltes Anführungszeichen vorangestellt werden.

Jahr

Das letzte Konzept, das wir für unsere Landesbevölkerungsdaten benötigen, ist ein Konzept, das Jahre abbildet. Anstatt ein neues Konzept zu definieren, verwenden wir das Jahreskonzept aus einem der importierten Datasets: „http://www.google.com/publicdata/dataset/google/time“. Dazu müssen wir als time:year darauf verweisen, wobei time das Dataset darstellt, auf das verwiesen wird, und year das Konzept.

Kanonische Konzepte

time:year gehört zu einer kleinen Gruppe von kanonischen Konzepten, die von Google definiert wurden. Kanonische Konzepte enthalten grundlegende Definitionen für Zeit, Geografie, numerische Größen, Einheiten usw.

Das oben definierte Länderkonzept existiert sogar als kanonisches Konzept. Wir haben es hier nur zu Illustrationszwecken erstellt. Verwenden Sie in Ihren Datasets nach Möglichkeit kanonische Konzepte, entweder direkt oder durch Erweitern. Weitere Informationen zur Erweiterung finden Sie weiter unten. Mit kanonischen Konzepten können Sie Ihre Daten mit anderen Datasets vergleichen und Features für Ihre Datasets im Public Data Explorer aktivieren. Zum Animieren von Daten im Zeitverlauf oder zum Anzeigen geografischer Daten auf einer Karte müssen beispielsweise die kanonischen Konzepte time und geo verwendet werden.

Erster Slice

Nachdem wir nun Konzepte für Bevölkerung, Land und Jahr haben, ist es an der Zeit, sie zusammenzustellen.

Dazu müssen wir einen Slice erstellen, in dem beide Segmente kombiniert werden. In DSPL ist ein Segment eine Kombination von Konzepten, für die Daten vorhanden sind.

Warum nicht einfach eine Tabelle mit den richtigen Spalten erstellen? Weil Slices die Informationen des Datasets in Bezug auf seine Konzepte erfassen. Je mehr Informationen wir erstellen, desto klarer wird dies.

Die Segmente werden in der DSPL-Datei unter einem <slices>-Element angezeigt, das direkt nach dem concepts-Abschnitt angezeigt werden muss.

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

Genau wie bei Konzepten hat jedes Segment ein id (countries_slice), das das Segment innerhalb des Datasets eindeutig identifiziert.

Ein Slice enthält zwei Arten von Konzeptverweisen: Dimensionen und Messwerte. Die Werte von Messwerten variieren mit den Werten der Dimensionen. Hier variiert der Wert von population (der Messwert) durch die Dimensionen country und year.

Genau wie Konzepte enthalten Slices einen Verweis auf eine Tabelle, die die Daten des Slice enthält. Die referenzierte Tabelle muss eine Spalte für jede Dimension und jeden Messwert des Segments enthalten. Wie bei Konzepten werden die Dimensionen und Messwerte des Slice den Tabellenspalten mit denselben IDs zugeordnet.

Slice-Tabelle

Die Tabelle für unser Bevölkerungssegment erscheint im Abschnitt tables der DSPL-Datei:

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

Die Spalte year enthält ein format-Attribut, das angibt, wie Jahre formatiert werden. Die unterstützten Datumsformate entsprechen den durch das Joda DateTime-Format definierten Datumsformaten.

Die Tabelle countries_slice gibt die Spalten der Tabelle und ihre Typen an und verweist auf eine CSV-Datei, die die Daten enthält. Die CSV-Datei sieht so aus:

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

Jede Zeile der Datentabelle enthält eine eindeutige Kombination aus den Dimensionen country und year sowie dem entsprechenden Wert des Messwerts population (z. B. die Bevölkerung – Messwert – Afghanistan im Jahr 1960 – Dimensionen).

Die Werte in der Spalte country entsprechen dem Wert bzw. der ID des Konzepts country, also dem aus zwei Buchstaben bestehenden ISO 3166-Code des Landes.

Die CSV-Daten für ein Slice müssen die folgenden Einschränkungen erfüllen:

  • Jeder Wert eines Dimensionsfelds (z. B. country und year) darf nicht leer sein. Werte für Messwertfelder (z. B. population) können leer sein. Ein leerer Wert wird durch keine Zeichen dargestellt.
  • Jeder Wert eines Dimensionsfelds, das auf ein Konzept verweist, muss in den Daten dieses Konzepts vorhanden sein. Beispielsweise muss der Wert AF in der Konzeptdatentabelle country vorhanden sein.
  • Jede eindeutige Kombination von Dimensionswerten, z.B. AF, 2000, darf nur einmal vorkommen.
  • Daten sollten in beliebiger Reihenfolge nach den Spalten für Nicht-Zeitdimensionen und dann optional nach einer der anderen Spalten sortiert werden. In einer Tabelle mit den Spalten [date, dimension1, dimension2, metric1, metric2] können Sie also beispielsweise nach dimension1, dann nach dimension2 und dann nach date sortieren, aber nicht nach date und den Dimensionen.

Zusammenfassung

In unserem DSPL stehen derzeit genügend Daten zur Verfügung, um die Bevölkerungsdaten des Landes zu beschreiben. Fassen wir zusammen:

  • DSPL-Header und Beschreibung des Datasets und seines Anbieters erstellen
  • Erstellen Sie ein Konzept für die Bevölkerung und ein anderes für das Land und erstellen Sie eine CSV-Datei mit allen Ländern und deren Namen.
  • Erstellen Sie ein Segment mit unseren Bevölkerungszahlen für Länder im Zeitverlauf und beziehen Sie sich dabei auf das bereits definierte Jahreskonzept im importierten Zeit-Dataset von Google.

Im weiteren Verlauf dieser Anleitung erweitern wir unseren Datensatz, indem wir weitere Dimensionen in weiteren Segmenten und nach Themen gruppierte Messwerte hinzufügen.

Dimension hinzufügen: US-Bundesstaaten

Als Nächstes bereichern wir unser Dataset durch Hinzufügen von Bevölkerungsdaten für US-Bundesstaaten. Zunächst müssen wir ein Konzept für Bundesstaaten definieren. Dies ähnelt sehr dem Länderkonzept, das wir zuvor definiert haben.

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

Konzepterweiterungen und Property-Referenzen

Mit dem Konzept für Bundesstaaten werden mehrere neue Funktionen von DSPL eingeführt.

Zuerst extends Zustand ein weiteres Konzept, geo:location (definiert in dem externen geografischen Dataset, das wir zu Beginn des Datasets importiert haben). Semantisch bedeutet das, dass state eine Art geo:location ist. Das hat zur Folge, dass alle Attribute und Attribute von geo:location übernommen werden. Insbesondere definiert der Standort Eigenschaften für latitude und longitude. Durch die Erweiterung des vorherigen Konzepts werden diese Eigenschaften auch auf den Status angewendet. Da der Standort von entity:entity übernimmt, ruft der Bundesstaat außerdem alle Attribute des letzteren ab, einschließlich name, description und info_url.

Hinweis:Das zuvor definierte Länderkonzept sollte sich technisch auch nicht auf geo:location erstrecken. Dieser Punkt wurde der Einfachheit halber zuvor weggelassen. Den Standort zur Länderübernahme haben wir jedoch in die finale XML-Datei aufgenommen.

Hinweis:Sie können das Konstrukt extends in Ihren eigenen Datasets verwenden, um von anderen Datasets definierte Informationen wiederzuverwenden. Bei der Verwendung von extends müssen alle Instanzen Ihres Konzepts gültige Instanzen des Konzepts sein, das Sie erweitern. Mit Erweiterungen können Sie zusätzliche Attribute und Attribute hinzufügen und die Gruppe von Instanzen auf eine Teilmenge der Instanzen des erweiterten Konzepts beschränken.

Neben der Vererbung werden mit dem Attribut „state“ auch Konzepte von references eingeführt. Das Konzept des Bundesstaats hat eine Eigenschaft mit dem Namen country, die auf das oben erstellte Länderkonzept verweist. Dazu wird ein concept-Attribut verwendet. Diese Property enthält keine ID, sondern nur eine Konzeptreferenz. Dies entspricht dem Erstellen einer ID mit demselben Wert wie die ID des referenzierten Konzepts (d.h. country). Die hierarchische Beziehung zwischen Bundesstaat und County wird durch das Attribut isParent="true" für die Referenz erfasst. Im Allgemeinen sollten Dimensionen mit hierarchischen Beziehungen (z. B. Regionen) so dargestellt werden, wobei das untergeordnete Konzept ein Attribut hat, das mithilfe des Attributs isParent auf das übergeordnete Konzept verweist.

Die Tabellendefinition für Bundesstaaten sieht so aus:

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

Die Spalte country enthält für alle Bundesstaaten einen konstanten Wert. Durch die Angabe in der DSPL wird vermieden, dass dieser Wert für jeden Status der Daten wiederholt wird. Beachten Sie auch, dass Spalten für name, latitude und longitude enthalten sind, da der Bundesstaat diese Attribute von geo:location übernommen hat. Andererseits können einige übernommene Eigenschaften (z.B. description) haben keine Spalten. Das ist in Ordnung: Wenn ein Attribut in einer Konzeptdefinitionstabelle weggelassen wird, wird es für jede Instanz des Konzepts als undefiniert angenommen.

Die CSV-Datei sieht so aus:

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

Da wir bereits Konzepte für Bevölkerung und Jahr haben, können wir sie wiederverwenden, um ein neues Segment für die Bevölkerung der Bundesstaaten zu definieren.

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

Die Definition der Datentabelle sieht so aus:

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

Die CSV-Datei sieht so aus:

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

Warum haben wir ein neues Segment erstellt, anstatt dem vorherigen eine weitere Dimension hinzuzufügen?

Ein Segment mit Dimensionen sowohl für Bundesstaat als auch Land wäre nicht korrekt, da einige Zeilen für Länderdaten und andere für Bundesstaatdaten wären. Die Tabelle würde für einige Dimensionen „Löcher“ enthalten, was nicht zulässig ist. Fehlende Werte sind nur für Messwerte und nicht für Dimensionen zulässig.

Dimensionen dienen als Primärschlüssel für das Slice. Das bedeutet, dass jede Datenzeile Werte für alle Dimensionen enthalten muss und keine zwei Datenzeilen exakt dieselben Werte für alle Dimensionen haben dürfen.

Messwert hinzufügen: Arbeitslosenquote

Jetzt fügen wir unserem Dataset einen weiteren Messwert hinzu:

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

Der Abschnitt info dieses Messwerts hat einen Namen, eine Beschreibung und eine URL (mit einem Link zum US-amerikanischen Bureau of Labor Statistics).

Mit diesem Konzept wird auch das kanonische Konzept quantity:rate erweitert. Das Mengen-Dataset definiert Kernkonzepte für die Darstellung numerischer Größen. In Ihrem Dataset sollten Sie die numerischen Konzepte erstellen, indem Sie das entsprechende Mengenkonzept erweitern. Daher sollte das oben definierte Konzept population technisch von quantity:amount erweitert worden sein.

Konzeptattribute

Mit diesem Konzept wird auch das Konstrukt eines Attributs eingeführt. In diesem Beispiel wird über ein Attribut angegeben, dass unemployment_rate ein Prozentsatz ist. Das Attribut is_percentage wird aus dem Konzept quantity:rate übernommen, das von diesem Konzept erweitert wird. Diese Informationen werden vom Public Data Explorer verwendet, um Prozentzeichen bei der Visualisierung der Daten anzuzeigen.

Attribute bieten einen allgemeinen Mechanismus zum Anhängen von Schlüssel/Wert-Paaren an ein Konzept (im Gegensatz zu Attributen, die Instanzen eines Konzepts zusätzliche Werte zuordnen). Genau wie Konzepte und Attribute haben Attribute ein id, info und ein type. Wie Properties können sie auf andere Konzepte verweisen.

Attribute sind nicht nur für vordefinierte allgemeine Dinge gedacht, z. B. numerische Attribute. Sie können eigene Attribute für Ihre Konzepte definieren.

Daten zur Arbeitslosenquote für US-Bundesstaaten hinzufügen

Wir können jetzt Daten zur Arbeitslosenquote für US-Bundesstaaten hinzufügen. Da die Arbeitslosenquote ein Messwert ist und wir bereits Bevölkerungsdaten für Bundesstaaten haben, können wir sie einfach dem Segment hinzufügen, das wir bereits für die Dimensionen „Bundesstaat“ und „Jahr“ erstellt haben:

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

... und fügen Sie der Tabellendefinition eine weitere Spalte hinzu:

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

... und in die CSV-Datei:

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

Wie bereits erwähnt, bilden die Dimensionen für jedes Segment einen Primärschlüssel für das Segment. Außerdem darf jeder Datensatz nur ein Segment für eine bestimmte Kombination von Dimensionen enthalten. Alle Messwerte, die für diese Dimensionen verfügbar sind, müssen zum selben Segment gehören.

Weitere Dimensionen: Bevölkerungsaufschlüsselung nach Geschlecht

Erweitern wir unser Dataset mit einer Aufschlüsselung der Bevölkerung nach Geschlecht für die einzelnen Länder. Mittlerweile fangen Sie an, sich mit der Vorgehensweise vertraut zu machen... Zuerst müssen wir ein Konzept für das Geschlecht hinzufügen:

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

Der Abschnitt info für das Geschlechtskonzept enthält einen pluralName mit dem Text, der verwendet werden soll, um auf mehrere Instanzen des Geschlechtskonzepts zu verweisen. Der Abschnitt info enthält auch eine totalName mit dem Text, der verwendet werden soll, um auf alle Instanzen des Geschlechtskonzepts als Ganzes zu verweisen. Beide werden vom Public Data Explorer verwendet, um Informationen zum Geschlechtskonzept anzuzeigen. Im Allgemeinen sollten Sie sie für Konzepte bereitstellen, die als Dimensionen verwendet werden können.

Hinweis: Das Geschlechtskonzept geht auch auf entity:entity zurück. Diese Vorgehensweise empfiehlt sich bei Konzepten, die als Dimensionen verwendet werden, da Sie so benutzerdefinierte Namen, URLs und Farben für die verschiedenen Konzeptinstanzen hinzufügen können.

Das Geschlechtskonzept bezieht sich auf die Tabelle genders_table, die die möglichen Werte für das Geschlecht und ihre Anzeigenamen (hier ausgelassen) enthält.

Um unserem Dataset die Bevölkerung nach Geschlecht hinzuzufügen, müssen wir ein neues Slice erstellen. Hinweis: Jede verfügbare Kombination von Dimensionen entspricht einem Segment im Dataset.

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

Die Tabellendefinition für das Segment sieht so aus:

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

Die CSV-Datei für die Tabelle sieht so aus:

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

Im Vergleich zu den vorherigen Ländern, dem Anteil der Bevölkerung und dem Anteil der Arbeitslosigkeit hat dieses Land eine zusätzliche Dimension: Jeder Wert des Bevölkerungsmesswerts entspricht nicht nur einem bestimmten Land und Jahr, sondern auch einem bestimmten Geschlecht.

Beachten Sie, dass wir ein "dünnbesetztes" Dataset erstellt haben. Nicht alle Messwerte sind für alle Dimensionen verfügbar: Bevölkerung ist für Länder und US-Bundesstaaten auf Jahresbasis verfügbar, Arbeitslosenquote nur für Länder. Die Aufschlüsselung nach Geschlecht ist nur für die Bevölkerung nach Land verfügbar. Sie ist nicht für den Messwert „Arbeitslosenquote“ und nicht für die Dimension „Bundesstaat“ verfügbar. Die Datendichte kann auch auf Datenebene vorliegen. Bestimmte Messwerte haben dann keine Werte für bestimmte Dimensionswerte, werden aber in DSPL nicht dargestellt.

Themen

Die letzte Funktion von DSPL, die wir in unserem Dataset verwenden, ist topics. Themen werden zur hierarchischen Klassifizierung von Konzepten verwendet und von Anwendungen verwendet, um Nutzern bei der Navigation zu Ihren Daten zu helfen.

In der DSPL-Datei werden Themen direkt vor Konzepten angezeigt. Hier ist ein Beispiel für eine Themenhierarchie:

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

Sie können Themen so tief wie nötig verschachteln.

Zur Verwendung von Themen müssen Sie nur in der Konzeptdefinition so darauf verweisen:

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

Ein Konzept kann sich auf mehr als ein Thema beziehen.

Dataset senden

Nachdem Sie nun das Dataset erstellt haben, können Sie es zippen und in Google Public Data Explorer hochladen. Falls Probleme auftreten, sehen Sie in den FAQs nach. Dort werden die häufigsten Probleme beim Hochladen beschrieben.

Als Referenz können Sie auch die vollständige XML-Datei und das vollständige Dataset-Bundle aus dieser Anleitung herunterladen.

Fortsetzung

Herzlichen Glückwunsch zur Erstellung Ihres ersten DSPL-Datasets! Nachdem Sie nun die Grundlagen verstanden haben, empfehlen wir Ihnen, sich den Entwicklerleitfaden durchzulesen. Dort finden Sie unter anderem „erweiterte“ DSPL-Funktionen wie die Unterstützung für mehrere Sprachen und zuordenbare Konzepte.

Sehen Sie sich bei Bedarf weitere Beispiel-Datasets an.