Учебник по DSPL

DSPL расшифровывается как язык публикации наборов данных. Наборы данных, описанные в DSPL, можно импортировать в Google Public Data Explorer , инструмент, который позволяет выполнять богатое визуальное исследование данных.

Примечание. Для загрузки данных в общедоступные данные Google с помощью инструмента загрузки общедоступных данных у вас должна быть учетная запись Google .

В этом руководстве представлен пошаговый пример подготовки базового набора данных DSPL.

Набор данных DSPL — это пакет , содержащий файл XML и набор файлов CSV. Файлы CSV представляют собой простые таблицы, содержащие данные набора данных. Файл XML описывает метаданные набора данных, включая информационные метаданные, такие как описания мер, а также структурные метаданные, такие как ссылки между таблицами. Метаданные позволяют пользователям, не являющимся экспертами, исследовать и визуализировать ваши данные.

Единственным предварительным условием для понимания этого руководства является хороший уровень понимания XML. Некоторое понимание простых концепций базы данных (например, таблицы, первичные ключи) может помочь, но это не обязательно. Для справки: готовый XML-файл и полный пакет наборов данных, связанный с этим учебным пособием, также доступны для ознакомления.

Обзор

Прежде чем приступить к созданию нашего набора данных, вот общий обзор того, что содержит набор данных DSPL:

  • Общая информация: О наборе данных
  • Понятия: определения «вещей», которые появляются в наборе данных (например, страны, уровень безработицы, пол и т. д.).
  • Срезы: комбинации понятий, для которых есть данные
  • Таблицы: данные для понятий и срезов. Таблицы понятий содержат перечисления, а таблицы срезов содержат статистические данные.
  • Темы: используются для организации концепций набора данных в осмысленной иерархии посредством маркировки.

Чтобы проиллюстрировать эти довольно абстрактные понятия, рассмотрим набор данных (с фиктивными данными), используемый в этом руководстве: статистические временные ряды для населения и безработицы, агрегированные по различным комбинациям страны, штата США и пола.

Этот пример набора данных определяет следующие понятия :

  • страна
  • Пол
  • численность населения
  • государство
  • уровень безработицы
  • год

Категориальные понятия, такие как штат, связаны с таблицами понятий, в которых перечислены все их возможные значения (Калифорния, Аризона и т. д.). Концепты могут иметь дополнительные столбцы для свойств, таких как название или страна штата.

Срезы определяют каждую комбинацию понятий, для которых в наборе данных есть статистические данные. Срез содержит параметры и показатели . На изображении выше размеры выделены синим цветом, а показатели оранжевым. В этом примере срез gender_country_slice содержит данные для метрики population и параметров country , year и gender . Другой срез, называемый 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, который содержит понятия, полезные для определения числовых величин), а также определения времени , объекта и наборы геоданных , которые предоставляют определения, связанные со временем, объектами и географией соответственно.

Верхний элемент <dspl> предоставляет объявление префикса пространства имен (например, xmlns:time="http://..." ) для каждого из импортируемых наборов данных. Объявления префиксов необходимы для краткой ссылки на элементы из других наборов данных. Например, time:year ссылается на определение year в импортированном наборе данных, пространство имен которого связано с префиксом time .

Информация о наборе данных и поставщике

Элемент <info> содержит общую информацию о наборе данных: имя, описание и URL-адрес, по которому можно найти дополнительную информацию.

Элемент <provider> содержит информацию о поставщике набора данных: его имя и URL-адрес, по которому можно найти дополнительную информацию (обычно домашняя страница поставщика данных).

Определение концепций

Теперь, когда мы предоставили некоторую общую информацию о наборе данных, мы готовы приступить к определению его содержимого. Наша следующая цель — добавить демографическую статистику по странам за последние 50 лет.

Первое, что нам нужно сделать, это дать некоторые определения понятиям населения, страны и года. В DSPL эти определения называются понятиями .

Концепция — это определение типа данных, которые появляются в наборе данных. Значения данных, которые соответствуют данному понятию, называются экземплярами этого понятия.

численность населения

Начнем с определения понятия населения. В документе DSPL понятия определяются в элементе <concepts> , который идет сразу после набора данных и информации о поставщике.

Вот концепция населения с минимальной информацией, необходимой для любой концепции: id (уникальный идентификатор), name и type .

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

Вот как работает этот образец:

  • Каждое понятие должно иметь id , который однозначно идентифицирует понятие в наборе данных. Это означает, что никакие два понятия, определенные в одном и том же наборе данных, не могут иметь одинаковый идентификатор.
  • Как и в случае с набором данных и его поставщиком, элементы <info> предоставляют текстовую информацию о концепте, такую ​​как его имя и описание.
  • Элемент <type> указывает тип данных для экземпляров понятия (другими словами, его «значения»). В этом примере тип populationinteger . 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>

Определение понятия страны начинается так же, как и предыдущее, с id , info и type .

Концептуальные ценности

Категориальные понятия, такие как страны, имеют перечисление всех возможных экземпляров. Другими словами, вы можете перечислить все возможные страны, на которые можно ссылаться. Но для этого каждой стране нужен уникальный идентификатор. В этом примере используются коды стран ISO для идентификации стран; эти коды имеют string тип.

В этом примере вам не нужно использовать код ISO; с тем же успехом вы могли бы использовать название страны. Однако имена различаются в зависимости от языка, могут меняться со временем и не всегда последовательно используются в наборах данных. Для стран и для категориальных понятий в целом рекомендуется выбирать короткие, стабильные, широко используемые и независимые от языка идентификаторы (если они существуют).

Свойства концепции

В дополнение к id понятие страны имеет элемент <property> , который определяет название страны. Другими словами, название страны ("Ирландия") является свойством страны с id IE. Свойства — это то, как DSPL предоставляет дополнительную структурированную информацию об экземплярах концепта.

Как и сама концепция, свойства имеют id , info и type .

Концептуальные данные

Наконец, понятие страны имеет элемент <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>

В таблице стран указаны столбцы таблицы и их типы, а также ссылка на 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

В первой строке таблицы перечислены идентификаторы столбцов, как указано в определении table DSPL. Каждая из следующих строк соответствует одному экземпляру концепции страны. Если у концепта есть таблица, то таблица должна содержать все экземпляры концепта — в этом случае в ней должны быть перечислены все страны.

Столбцы сопоставляются с концепцией страны и ее свойствами на основе их идентификатора. Идентификатор первого столбца, country , соответствует идентификатору понятия. Это означает, что этот столбец содержит уникальный идентификатор страны, определенный концепцией страны. Следующий столбец соответствует name свойства концепции страны. Значения в этом столбце соответствуют значениям свойства name .

Есть несколько требований к данным CSV для таблицы понятий:

  • Заголовки столбцов в первой строке файла данных должны точно соответствовать id id понятия, с которым связаны данные (хотя порядок может различаться).
  • В каждой строке должно быть точно такое же количество элементов, как и количество свойств в концепте (даже если значение пустое).
  • Каждое значение поля id концепта (здесь код страны) должно быть уникальным и непустым (пустое поле — это поле, содержащее ноль или только пробельные символы).
  • Значения свойств, ссылающихся на другие понятия, должны быть либо пустыми, либо быть допустимым значением упомянутого понятия.
  • Значения, содержащие запятые, двойные кавычки или символы новой строки, должны быть полностью заключены в двойные кавычки.
  • Любым буквальным символам двойной кавычки внутри значения должна непосредственно предшествовать другая двойная кавычка.

Год

Последняя концепция, которая нам нужна для данных о населении нашей страны, — это концепция для представления лет. Вместо определения новой концепции мы будем использовать концепцию года из одного из импортированных наборов данных: «http://www.google.com/publicdata/dataset/google/time». Для этого нам нужно сослаться на него как time:year , где time представляет набор данных, на который ссылаются, а year идентифицирует концепцию.

Канонические концепции

time:year является частью небольшого набора канонических понятий , определенных Google. Канонические понятия дают основные определения времени, географии, числовых величин, единиц и т. д.

На самом деле понятие страны, определенное выше, существует как каноническое понятие. Мы создали его здесь только для иллюстрации. Когда это возможно, вы должны использовать канонические концепции в своих наборах данных либо напрямую, либо путем их расширения (подробнее о расширении ниже). Канонические концепции делают ваши данные сопоставимыми с другими наборами данных и включают функции для ваших наборов данных в обозревателе общедоступных данных. Например, анимация данных во времени или отображение географических данных на карте зависит от использования концепций time и geo соответственно.

Первый кусочек

Теперь, когда у нас есть концепции для населения, страны и года, пришло время объединить их!

Для этого нам нужно создать срез , который их объединяет. В 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>

Как и у понятий, у каждого среза есть id ( countries_slice ), который однозначно идентифицирует срез в наборе данных.

Срез содержит два вида ссылок на понятия: параметры и показатели . Значения метрик зависят от значений измерений. Здесь значение population (показатель) зависит от размеров country и year .

Как и понятия, срезы содержат ссылку на таблицу , содержащую данные среза. Ссылочная таблица должна иметь по одному столбцу для каждого параметра и показателя среза. Как и в случае с понятиями, размеры и показатели среза сопоставляются со столбцами таблицы с теми же идентификаторами.

Таблица срезов

Таблица для нашего среза населения появляется в разделе tables файла 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>

Обратите внимание, что столбец year имеет атрибут format , который указывает, как форматируются годы. Поддерживаемые форматы даты определяются форматом Joda DateTime .

Таблица countries_slice определяет столбцы таблицы и их типы, а также указывает на CSV-файл, содержащий данные. CSV-файл выглядит следующим образом:

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

Каждая строка таблицы данных содержит уникальную комбинацию параметров country и year вместе с соответствующим значением показателя population (например, показатель населения Афганистана в 1960 году - параметры ).

Обратите внимание, что значения в столбце country соответствуют значению/идентификатору концепции country , которая представляет собой двухбуквенный код страны по стандарту ISO 3166.

Данные CSV для среза должны удовлетворять следующим ограничениям:

  • Каждое значение поля измерения (например, country и year ) не должно быть пустым. Значения полей метрик (таких как population ) могут быть пустыми. Пустое значение представлено без символов.
  • Каждое значение поля измерения, которое ссылается на понятие, должно присутствовать в данных этого понятия. Например, значение AF должно присутствовать в таблице данных концепции country .
  • Каждая уникальная комбинация значений измерений, например AF, 2000 , может встречаться только один раз.
  • Данные должны быть отсортированы по столбцам измерения, не относящимся к времени (в любом порядке), а затем, при желании, по любому из других столбцов. Так, например, в таблице со столбцами [date, dimension1, dimension2, metric1, metric2] вы можете сортировать по dimension1 , затем dimension2 , затем date , но не по date , а затем по параметрам.

Резюме

На данный момент у нас достаточно DSPL для описания данных о населении страны. Резюмируя, что нам нужно было сделать:

  • Создайте заголовок DSPL и описание набора данных и его поставщика.
  • Создайте одну концепцию для населения и другую для страны с файлом csv, перечисляющим все страны и их названия.
  • Создайте срез с нашей численностью населения для стран с течением времени, ссылаясь на уже определенную концепцию года в импортированном наборе данных времени из 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 (определенное во внешнем наборе геоданных , который мы импортировали в начале нашего набора данных). Семантически это означает, что state является своего рода geo:location . Следствием этого является то, что он наследует все атрибуты и свойства geo:location . В частности, location определяет свойства latitude и longitude ; расширяя предыдущую концепцию, эти свойства применяются и к состоянию. Более того, поскольку location наследуется от entity:entity , state также получает все свойства последнего, включая name , description и info_url .

Примечание. Определенное ранее понятие страны должно было технически также расширяться от geo:location . Этот пункт был опущен ранее для простоты; однако мы включили местоположение в наследование страны в окончательный XML-файл .

Примечание. Вы можете использовать конструкцию extends в своих собственных наборах данных, чтобы повторно использовать информацию, определенную другими наборами данных. Использование extends требует, чтобы все экземпляры вашего понятия были действительными экземплярами расширяемого вами понятия. Расширения позволяют добавлять дополнительные свойства и атрибуты и ограничивать набор экземпляров подмножеством экземпляров расширенного понятия.

В дополнение к наследованию свойство состояния также вводит идею ссылок на концепты. В частности, концепция состояния имеет свойство под названием « country », которое ссылается на концепцию страны, которую мы создали выше. Это делается с помощью атрибута concept . Обратите внимание, что это свойство не предоставляет идентификатор, а только ссылку на понятие. Это эквивалентно созданию идентификатора с тем же значением, что и идентификатор упомянутого понятия (т. е. 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>

Столбец страны имеет постоянное значение для всех штатов. Указание его в DSPL позволяет избежать повторения этого значения для каждого состояния в данных. Также обратите внимание, что мы включили столбцы для name , latitude и longitude , так как state унаследовал эти свойства от geo:location . С другой стороны, некоторые унаследованные свойства (например, 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

Подождите, а почему мы создали новый срез вместо того, чтобы добавить еще одно измерение к предыдущему?

Срез с измерениями как для штата, так и для страны был бы неправильным, поскольку некоторые строки были бы для данных о стране, а некоторые строки — для данных по штату. В таблице могут быть «дыры» для некоторых измерений, что недопустимо (помните, что отсутствующие значения допускаются только для показателей, а не измерений).

Размеры действуют как «первичный ключ» для среза. Это означает, что каждая строка данных должна иметь значения для всех измерений, и никакие две строки данных не могут иметь одинаковые значения для всех измерений.

Добавление показателя: уровень безработицы

Давайте теперь добавим еще одну метрику в наш набор данных:

<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 , которую расширяет эта концепция. Эта информация используется обозревателем общедоступных данных для отображения знаков процента при визуализации данных.

Атрибуты предоставляют общий механизм для присоединения пар ключ/значение к понятию (в отличие от свойств, которые связывают дополнительные значения с экземплярами понятия). Точно так же, как концепты и свойства, атрибуты имеют id , info и type . Подобно свойствам, они могут ссылаться на другие понятия.

Атрибуты предназначены не только для предопределенных общих вещей, таких как числовые свойства. Вы можете определить свои собственные атрибуты для своих понятий.

Добавление данных об уровне безработицы для штатов США

Теперь мы готовы добавить данные об уровне безработицы для штатов США. Поскольку уровень безработицы — это метрика, и у нас уже есть данные о населении штатов, мы можем просто добавить их в срез, который мы уже создали для измерений штата и года:

<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

Ранее мы говорили, что для каждого среза измерения формируют первичный ключ для среза. Кроме того, каждый набор данных может содержать только один срез для данной комбинации измерений. Все показатели, доступные для этих параметров, должны принадлежать одному и тому же срезу.

Дополнительные параметры: разбивка населения по полу

Давайте обогатим наш набор данных разбивкой населения по полу по странам. К настоящему моменту вы уже начинаете понимать упражнение... Сначала нам нужно добавить понятие пола:

<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 , который предоставляет текст, который будет использоваться для ссылки на все экземпляры гендерной концепции в целом. Оба они используются обозревателем общедоступных данных для отображения информации, связанной с концепцией пола. Как правило, вы должны предоставить их для понятий, которые можно использовать в качестве измерений.

Обратите внимание, что концепция пола также распространяется на 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>

Концепция может относиться к более чем одной теме.

Отправка набора данных

Теперь, когда вы создали свой набор данных, следующим шагом будет его заархивирование и загрузка zip-файла в инструмент Google Public Data Explorer. Если у вас возникнут какие-либо проблемы, ознакомьтесь с часто задаваемыми вопросами , в которых обсуждаются наиболее распространенные проблемы с загрузкой.

Для справки вы также можете загрузить полный XML-файл и полный пакет наборов данных, связанный с этим учебным пособием.

Куда пойти отсюда

Поздравляем с созданием вашего первого набора данных DSPL! Теперь, когда вы понимаете основы, мы рекомендуем прочитать Руководство разработчика , в котором, среди прочего, документированы «расширенные» функции DSPL, такие как многоязычная поддержка и отображаемые концепции.

Вы также можете посмотреть еще несколько примеров наборов данных .