DSPL チュートリアル

DSPL は、Dataset Publishing Language の略です。DSPL で記述されたデータセットを Google Public Data Explorer にインポートできます。Google Public Data Explorer は、データを視覚的に詳しく調べることができるツールです。

注: 一般公開データのアップロード ツールを使用して Google Public Data にデータをアップロードするには、Google アカウントが必要です。

このチュートリアルでは、基本的な DSPL データセットを準備する方法の詳しい手順の例を示します。

DSPL データセットは、XML ファイルと CSV ファイルのセットを含むバンドルです。CSV ファイルは、データセットのデータを含むシンプルなテーブルです。XML ファイルは、データセットのメタデータを記述します。メタデータには、メジャーの説明などの情報メタデータや、テーブル間の参照などの構造的なメタデータが含まれます。メタデータにより、専門知識のないユーザーでもデータを探索して可視化できます。

このチュートリアルを理解するための前提条件は、XML について十分に理解していることです。単純なデータベース コンセプト(テーブル、主キーなど)が役立つかもしれませんが、必須ではありません。参考として、このチュートリアルに関連する完成した XML ファイル完全なデータセット バンドルも確認できます。

概要

データセットの作成を開始する前に、DSPL データセットに含まれるものの概要を示します。

  • 全般情報: データセットについて
  • 概念: データセットに含まれる「物」の定義(国、失業率、性別など)
  • スライス: データが存在するコンセプトの組み合わせ
  • テーブル: コンセプトとスライスのデータ。コンセプト テーブルは列挙値を保持し、スライス テーブルは統計データを保持します。
  • トピック: ラベル付けにより、データセットのコンセプトを意味のある階層に整理するために使用されます。

こうした抽象的な概念を説明するために、このチュートリアル全体で使用されるデータセット(ダミーデータを含む)について考えてみましょう。データセットは、国、米国の州、性別のさまざまな組み合わせで集計された、人口と失業率の統計時系列です。

このサンプル データセットは、次のコンセプトを定義します。

  • country
  • gender
  • population
  • state
  • 失業率
  • year

州などのカテゴリ的なコンセプトは、取り得るすべての値(カリフォルニア州、アリゾナ州など)を列挙するコンセプト テーブルに関連付けられます。Concepts には、州の名前や国などのプロパティ用の列を追加することもできます。

スライスは、データセット内の統計データがあるコンセプトの各組み合わせを定義します。スライスにはディメンション指標が含まれています。上の図では、ディメンションは青色で、指標はオレンジ色です。この例では、スライス gender_country_slice に指標 population とディメンション countryyeargender のデータが含まれています。country_slice という別の分割データには、各国の年間総人口(指標)が表示されます。

ディメンションや指標に加えて、スライスは実際のデータを含むテーブルも参照します。

次に、このようなデータセットを DSPL で作成する手順を詳しく見ていきましょう。

データセット情報

まず、データセットの XML ファイルを作成します。こちらがサンプル データセットの DSPL 説明の冒頭です。

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

データセットの説明は、最上位の <dspl> 要素で始まります。targetNamespace 属性には、このデータセットを一意に識別する URI が含まれます。データセットの名前空間は、データセットを公開する際に特に重要です。これは、データセットのグローバル識別子であり、他のユーザーがデータセットを参照する手段にもなるためです。

targetNamespace 属性は省略される場合があります。この場合、データセットがインポートされるときに一意の名前空間が自動的に生成されます。

他のデータセットからの情報の使用

データセットは、他のデータセットをインポートすることで、他のデータセットの定義とデータを再利用できます。各 <import> 要素には、このデータセットが参照する別のデータセットの名前空間を指定します。

サンプル データセットでは、http://www.google.com/publicdata/dataset/google/quantity(数値量の定義に役立つ概念を含む Google が作成したデータセット)と、時間、エンティティ、地理に関連する定義を提供する timeentitygeo データセットからの定義が必要になります。

最上位の <dspl> 要素では、名前空間の接頭辞の宣言(xmlns:time="http://..." など)を指定します。接頭辞の宣言は、他のデータセットの要素を簡潔な方法で参照するために必要です。たとえば、time:year は、名前空間が接頭辞 time に関連付けられている、インポートされたデータセット内の year の定義を参照します。

データセットとプロバイダの情報

<info> 要素には、データセットに関する一般的な情報(名前、説明、詳細情報を確認できる URL)が含まれます。

<provider> 要素には、データセットのプロバイダに関する情報が含まれます。名前や詳細情報を確認できる URL(通常はデータ プロバイダのホームページ)が含まれます。

コンセプトの定義

データセットに関する一般的な情報を提供したので、次はデータセットの内容の定義を始めましょう。次の目標は、過去 50 年間の国別の人口統計を追加することです。

最初に行うべきことは、人口、国、年という概念の定義を提供することです。DSPL では、こうした定義をコンセプトと呼びます。

コンセプトとは、データセットに含まれるデータタイプの定義です。特定のコンセプトに対応するデータ値は、そのコンセプトのインスタンスと呼ばれます。

人口

まず、母集団の概念を定義します。DSPL ドキュメントでは、データセットとプロバイダ情報の直後にある <concepts> 要素でコンセプトを定義します。

母集団の概念には、id(一意の識別子)、nametype という概念に必要な最小限の情報のみが含まれています。

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

このサンプルについて解説します。

  • すべてのコンセプトに、データセット内のコンセプトを一意に識別する id を指定する必要があります。つまり、同じデータセットで定義された 2 つのコンセプトが同じ ID を持つことはできません。
  • データセットとそのプロバイダと同様に、<info> 要素では名前や説明など、コンセプトに関するテキスト情報を指定します。
  • <type> 要素では、コンセプトのインスタンスのデータ型(つまり「値」)を指定します。この例では、population のタイプは integer です。DSPL は次のデータ型をサポートしています。
    • string
    • integer
    • float
    • boolean
    • date

次に、国の概念の定義を書いてみましょう。

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

国のコンセプトの定義は、前の説明と同様に、idinfotype から始まります。

コンセプト値

国などのカテゴリ概念には、考えられるすべてのインスタンスが列挙されています。つまり、参照可能なすべての国をリストできます。ただし、これを行うには国ごとに一意の ID が必要です。 この例では、 ISO 国コードを使用して国を識別しています。このコードのタイプは string です。

この例では、ISO コードを使用する必要はありません。国名を使用することもできます。ただし、名前は言語によって異なり、時間の経過とともに変更される可能性があります。また、データセット間で常に同じ名前が使用されるわけではありません。国について、またカテゴリ概念全般については、短く安定していて、一般的に使用されている、言語に依存しない識別子(存在する場合)を選ぶことをおすすめします。

コンセプトのプロパティ

国のコンセプトには、id に加えて、国の名前を指定する <property> 要素があります。つまり、国名(「アイルランド」)は id IE の国のプロパティです。プロパティは、DSPL がコンセプトのインスタンスに関する追加の構造化情報を提供する方法です。

このコンセプト自体と同様に、プロパティには idinfotype があります。

コンセプト データ

最後に、国のコンセプトには <table> 要素が含まれています。この要素は、すべての国のリストを列挙したテーブルを参照します。

テーブルの使用は、一部のコンセプトでは理にかなっていますが、他のコンセプトでは意味がありません。たとえば、コンセプト母集団の有効な値をすべて列挙しても意味はありません。ただし、あるコンセプトについてテーブルを参照する場合、そのテーブルには、そのコンセプトのすべてのインスタンスを含める必要があります。たとえば、少数のサンプルだけでなく、すべての国をリストする必要があります。

このデータセットでは、次のように countries_table テーブルを定義します。

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

country テーブルは、テーブルの列とそのタイプを指定し、そのデータを含む CSV ファイルを参照します。この CSV は、データセット XML と一緒にバンドルしてアップロードすることも、HTTP、HTTPS、FTP を介してリモートでアクセスすることもできます。後者の場合は、countries.csv を URL(http://www.myserver.com/mydata/countries.csv など)に置き換えます。

CSV ファイルは、保存場所にかかわらず次のようになります。

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

表の 1 行目には、DSPL table 定義で指定された列 ID がリストされています。以下の各行は、国のコンセプトの 1 つのインスタンスに対応しています。コンセプトに表がある場合、その表にはそのコンセプトのすべてのインスタンスを含める必要があります。この場合は、すべての国をリストする必要があります。

列は、ID に基づいて国のコンセプトとそのプロパティにマッピングされます。最初の列の ID country は、コンセプト ID と一致します。つまり、この列には国のコンセプトで定義された一意の国識別子が含まれます。次の列は、国のコンセプトの name プロパティに対応しています。この列の値は name プロパティの値と一致します。

コンセプト テーブルの CSV データには、いくつかの要件があります。

  • データファイルの最初の行の列見出しは、コンセプト id およびデータが関連付けられているコンセプトのプロパティ id完全に一致する必要があります(順序は異なる場合があります)。
  • 各行の要素数は、コンセプトのプロパティ数と完全に同じである必要があります(値が空であっても)。
  • コンセプトの id フィールドの各値(ここでは国コード)は一意で、空にできません(空のフィールドとは、ゼロまたは空白文字のみを含むフィールドです)。
  • 他のコンセプトを参照するプロパティの値は、空にするか、参照先のコンセプトの有効な値にする必要があります。
  • カンマ、二重引用符、改行文字を含む値は、二重引用符で完全に囲む必要があります。
  • 値内のリテラル二重引用符は、その直前にもう 1 つの二重引用符で区切る必要があります。

国の人口データに必要な最後のコンセプトは、年を表すコンセプトです。新しいコンセプトを定義するのではなく、インポートしたデータセットの一つ(http://www.google.com/publicdata/dataset/google/time)から年のコンセプトを使用します。これを行うには、time:year として参照する必要があります。ここで、time は参照されるデータセットを表し、year はコンセプトを識別します。

正規概念

time:year は、Google が定義する少数の正規のコンセプトの一部です。正規概念は、時間、地理、数値、単位などの基本的な定義を提供します。

実際、上記で定義されている国のコンセプトは、標準的なコンセプトとして存在します。ここでは説明のみを目的としています。可能な限り、正規の概念をデータセット内で直接、または拡張して使用する必要があります(詳細については後述します)。正規のコンセプトにより、データを他のデータセットと比較できます。また、Public Data Explorer でデータセットの機能を利用できます。たとえば、時間の経過に伴うデータのアニメーション表示や地図上に地理データの表示を行う場合は、それぞれ timegeo の正規のコンセプトを利用します。

最初のスライス

人口、国、年の概念がわかったところで、次はそれらをまとめます。

そのためには、それらを組み合わせるスライスを作成する必要があります。DSPL では、スライスとはデータが存在するコンセプトの組み合わせです。

適切な列を持つテーブルを作成すればよいのでしょうか。スライスは、コンセプトの観点からデータセットの情報をキャプチャするためです。これは、データセットを作成するにつれてより明確になります。

スライスは、DSPL ファイルの <slices> 要素の下に表示されます。この要素は、concepts セクションの直後に配置する必要があります。

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

コンセプトと同様に、各スライスには、データセット内でスライスを一意に識別する idcountries_slice)があります。

スライスには、ディメンションと指標という 2 種類のコンセプト参照が含まれています。指標の値は、ディメンションの値によって異なります。ここで、population の値(指標)は、ディメンション countryyear によって異なります。

コンセプトと同様に、スライスには、スライスのデータを含むテーブルへの参照が含まれます。参照先テーブルには、スライスのディメンションと指標ごとに 1 つの列が必要です。コンセプトと同様に、スライスのディメンションと指標は、同じ ID を持つテーブル列にマッピングされます。

スライス テーブル

人口スライスのテーブルは、DSPL ファイルの tables セクションにあります。

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

year 列には、年の形式を指定する format 属性が含まれています。サポートされている日付形式は、Joda DateTime 形式で定義されている日付形式です。

countries_slice テーブルは、テーブルの列とその型を指定し、そのデータを含む CSV ファイルを指します。CSV ファイルは次のようになります。

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

データテーブルの各行には、ディメンション countryyear の一意の組み合わせと、対応する population 指標の値(たとえば、1960 年のアフガニスタンの人口 - 指標 - ディメンション)が含まれます。

country 列の値は、country コンセプトの値または識別子(ISO 3166 で定義される国の 2 文字のコード)と一致します。

スライスの CSV データは、次の制約を満たす必要があります。

  • ディメンション フィールドの各値(countryyear など)は空にできません。指標フィールドの値(population など)は空にできます。空の値は文字で表されません。
  • コンセプトを参照するディメンション フィールドの各値は、そのコンセプトのデータ内に存在する必要があります。たとえば、値 AF は、country コンセプト データテーブルに存在する必要があります。
  • ディメンション値の各一意の組み合わせ(AF, 2000 など)は 1 回だけ使用できます。
  • データは時間以外のディメンション列で(任意の順序で)並べ替える必要があります。また、必要に応じて他の列でも並べ替えます。たとえば、[date, dimension1, dimension2, metric1, metric2] 列を含むテーブルでは、dimension1dimension2date の順に並べ替えることができますが、date、ディメンションで並べ替えることはできません。

まとめ

この時点で、DSPL には国の人口データを記述するのに十分な量のデータがあります。ここまでの内容をまとめます。

  • DSPL ヘッダー、およびデータセットとそのプロバイダの説明を作成する
  • すべての国とその名前を列挙した CSV ファイルを使用して、人口に関するコンセプトと国に関するコンセプトを 1 つずつ作成します。
  • Google からインポートされた時間データセットですでに定義されている年のコンセプトを参照して、国の人口数の推移を使用してスライスを作成します。

このチュートリアルの残りの部分では、より多くのスライスのディメンションと、トピック別にグループ化された指標を追加することで、データセットをより充実させます。

ディメンションを追加する: 米国の州

次に、米国の州の人口データを追加してデータセットを拡充します。まず、状態の概念を定義する必要があります。これは前に定義した国のコンセプトと よく似ています

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

拡張とプロパティ参照のコンセプト

状態のコンセプトには、DSPL のいくつかの新機能が導入されています。

まず、状態は別のコンセプト geo:location(データセットの最初にインポートした外部地理データセットで定義)を「拡張」extendsします。意味的には、stategeo:location の一種であることを意味します。そのため、geo:location のすべての属性とプロパティが継承されます。特に、location では latitudelongitude のプロパティが定義されます。前述のコンセプトを拡張することで、これらのプロパティは状態にも適用されます。さらに、ロケーションは entity:entity を継承するため、状態は後者のプロパティ(namedescriptioninfo_url など)もすべて取得します。

注: 前に定義した国の概念は、厳密には geo:location から拡張する必要があります。以前は、わかりやすくするためにこの点は省略しました。ただし、最終的な XML ファイルには国の継承先を記載しています。

注: 独自のデータセットで extends コンストラクトを使用して、他のデータセットで定義された情報を再利用できます。extends を使用するには、コンセプトのすべてのインスタンスが、拡張するコンセプトの有効なインスタンスである必要があります。拡張機能を使用すると、プロパティと属性を追加したり、インスタンスのセットを、拡張されたコンセプトのインスタンスのサブセットに制限したりできます。

状態プロパティでは、継承の他に、参照というコンセプトも導入されています。references特に、状態の概念には country というプロパティがあります。これは、上記で作成した国のコンセプトを参照します。これを行うには、concept 属性を使用します。なお、このプロパティは ID を提供せず、コンセプト参照のみを提供します。これは、参照先のコンセプトの ID と同じ値で ID を作成するのと同じです(例:country など)。州と郡の間の階層関係は、参照に属性 isParent="true" を含めることでキャプチャされます。一般に、地理などの階層関係を持つディメンションはこのように表現する必要があり、子コンセプトには、isParent 属性を使用して親コンセプトを参照するプロパティがあります。

状態のテーブル定義は次のようになります。

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

country 列には、すべての州で定数値が含まれます。DSPL でこの値を指定すると、データ内のすべての状態に対してその値が繰り返されるのを回避できます。また、州が geo:location からこれらのプロパティを継承しているため、namelatitudelongitude の列を含めています。一方、継承された一部のプロパティ(description など)には列がありません。これは問題ありません。コンセプト定義テーブルでプロパティが省略されている場合、そのコンセプトのすべてのインスタンスについて、その値は未定義とみなされます。

CSV ファイルは次のようになります。

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

すでに人口と年に関するコンセプトが用意されているため、それらを再利用して州の人口の新しいスライスを定義できます。

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

データテーブルの定義は次のようになります。

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

CSV ファイルは次のようになります。

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

前のスライスに別のディメンションを追加するのではなく、新しいスライスを作成したのはなぜですか?

州と国の両方のディメンションを持つスライスは正しくありません。これは、国データ用の行と、州データ用の行があるためです。テーブルには、一部のディメンションで「穴」が存在する場合がありますが、これは許容されません(欠損値は指標に対してのみ許可され、ディメンションに対しては許容されません)。

ディメンションはスライスの「主キー」として機能します。つまり、すべてのデータ行ですべてのディメンションの値が必須になり、2 つのデータ行ですべてのディメンションの値がまったく同じになることはありません。

指標の追加: 失業率

次に、データセットに別の指標を追加しましょう。

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

この指標の info セクションには、名前、説明、URL(米国労働統計局へのリンク)が表示されます。

このコンセプトも quantity:rate 正規コンセプトを拡張したものです。数量データセットは、数値量を表すための基本コンセプトを定義します。データセットでは、適切な数量の概念を拡張して、数値の概念を作成する必要があります。したがって、上記で定義した population のコンセプトは、厳密には quantity:amount から拡張する必要があります。

コンセプト属性

このコンセプトでは属性の構成も紹介します。この例では、属性を使用して、unemployment_rate がパーセンテージであることを示します。is_percentage 属性は、このコンセプトが拡張する quantity:rate コンセプトから継承されます。この情報は、Public Data Explorer で、データを可視化する際にパーセント記号を表示するために使用されます。

属性は、Key-Value ペアをコンセプトに関連付ける一般的なメカニズムを提供します(プロパティは追加の値をコンセプトのインスタンスに関連付けます)。コンセプトやプロパティと同様に、属性には idinfotype があります。プロパティと同様に、他のコンセプトを参照できます。

属性は、数値プロパティなど、事前定義された一般的なものだけのものではありません。コンセプトに対して独自の属性を定義できます。

米国の州の失業率データの追加

これで、米国の州の失業率データを追加する準備が整いました。失業率は指標であり、すでに州の人口データがあるため、州と年のディメンション用に作成したスライスに追加するだけで済みます。

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

さらに、テーブル定義に列を追加します。

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

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

前述のとおり、スライスごとに、ディメンションがスライスの主キーを形成します。また、各データセットには、特定のディメンションの組み合わせに対してスライスを 1 つだけ含めることができます。これらのディメンションで使用できる指標はすべて、同じスライスに属している必要があります。

その他のディメンション: 性別による人口の内訳

各国の性別による人口内訳でデータセットを拡充しましょう。もうやり方はわかってるよね... まず、性別に関するコンセプトを追加する必要があります。

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

性別のコンセプトの info セクションには pluralName があり、性別のコンセプトの複数のインスタンスを参照するために使用するテキストを指定します。info セクションには totalName も含まれています。性別のコンセプトのすべてのインスタンス全体を参照するために使用されるテキストを指定します。Public Data Explorer では、これらを使用して性別のコンセプトに関する情報を表示します。通常は、ディメンションとして使用できるコンセプトについて指定する必要があります。

性別のコンセプトも entity:entity から拡張されています。この方法は、さまざまなコンセプト インスタンスにカスタムの名前、URL、色を追加できるため、ディメンションとして使用されるコンセプトに適しています。

性別のコンセプトは、性別とその表示名(ここでは省略)に有効な値を含む genders_table テーブルを参照します。

データセットに性別の人口を追加するには、新しいスライスを作成する必要があります(利用可能なディメンションの各組み合わせは、データセット内のスライスに対応しています)。

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

スライスのテーブル定義は次のようになります。

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

このテーブルの CSV ファイルは次のようになります。

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

以前の国、人口、失業の分割項目と比較すると、この分割項目にはディメンションが追加されています。人口指標の各値は、特定の国と年だけでなく、特定の性別に対応しています。

ここでは「スパース」なデータセットを作成しました。すべてのディメンションですべての指標を利用できるわけではありません。人口は国と米国の州で年単位で確認できますが、失業率は国のみで利用できます。性別による内訳は、国別の人口についてのみ使用できます。失業率の指標や州ディメンションでは使用できません。スパース性はデータレベルでも存在することがあり、指標によっては特定のディメンション値に値がないにもかかわらず、それが DSPL で表現されない場合があります。

トピック

このデータセットで使用する DSPL の最後の特徴はトピックです。トピックは、コンセプトを階層的に分類するために使用され、ユーザーがデータに移動できるようにアプリケーションで使用されます。

DSPL ファイルでは、トピックがコンセプトの直前にあります。トピックの階層の例を次に示します。

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

トピックは必要に応じて深くネストできます。

トピックを使用するには、次のようにコンセプト定義からトピックを参照する必要があります。

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

1 つのコンセプトで複数のトピックを参照することもできます。

データセットの送信

データセットを作成したら、次はそれを zip 圧縮し、Google Public Data Explorer ツールに zip ファイルをアップロードします。問題が発生した場合は、よくある質問をご確認ください。アップロードに関してよくある問題についての説明が掲載されています。

参考として、このチュートリアルに関連する完全な XML ファイル完全なデータセット バンドルをダウンロードすることもできます。

さらに活用する

これで最初の DSPL データセットが作成されました。基本は理解できたので、デベロッパー ガイドに目を通すことをおすすめします。デベロッパー ガイドには、多言語サポートやマッピング可能な概念などの「高度な」DSPL 機能が記載されています。

その他のサンプル データセットもご覧いただけます。