Instructivo de DSPL

DSPL significa lenguaje de publicación de conjuntos de datos. Los conjuntos de datos descritos en la DSPL se pueden importar al Explorador de datos públicos de Google, una herramienta que permite una exploración visual enriquecida de los datos.

Nota: Para subir datos a los datos públicos de Google mediante la herramienta de carga de datos públicos, debes tener una Cuenta de Google.

En este instructivo, se proporciona un ejemplo paso a paso de cómo preparar un conjunto de datos básico de la DSP.

Un conjunto de datos de DSPL es un paquete que contiene un archivo en formato XML y un conjunto de archivos CSV. Los archivos CSV son tablas sencillas que contienen los datos del conjunto de datos. El archivo XML describe los metadatos del conjunto de datos, incluidos los metadatos informativos como las descripciones de medidas y los metadatos estructurales, como las referencias entre tablas. Los metadatos permiten que los usuarios no expertos exploren y visualicen tus datos.

El único requisito previo para comprender este instructivo es tener un buen nivel de comprensión del lenguaje XML. Comprender algunos conceptos simples de las bases de datos (p.ej., tablas, claves primarias) pueden ayudar, pero no es obligatorio. A modo de referencia, el archivo XML completo y el paquete de conjunto de datos completo asociado con este instructivo también están disponibles para su revisión.

Descripción general

Antes de comenzar a crear nuestro conjunto de datos, aquí encontrarás una descripción general de alto nivel de lo que contiene un conjunto de datos de DSP:

  • Información general:sobre el conjunto de datos
  • Conceptos: Definiciones de "cosas" que aparecen en el conjunto de datos (p.ej., países, tasa de desempleo, género, etc.)
  • Segmentos:Combinaciones de conceptos para los que hay datos
  • Tablas: datos de conceptos y secciones. Las tablas de conceptos contienen enumeraciones, y las tablas de secciones contienen datos estadísticos.
  • Temas: Se usan para organizar los conceptos del conjunto de datos en una jerarquía significativa mediante el etiquetado

Para ilustrar estas nociones bastante abstractas, considera el conjunto de datos (con datos ficticios) que se usa en este instructivo: series temporales estadísticas de población y desempleo, agregadas según varias combinaciones de país, estado de EE.UU. y género.

Este conjunto de datos de ejemplo define los siguientes conceptos:

  • country
  • género
  • population
  • state
  • tasa de desempleo
  • year

Los conceptos que son categóricos, como el estado, están asociados con los conceptos de tablas, que enumeran todos sus valores posibles (California, Arizona, etc.). Los conceptos pueden tener columnas adicionales para propiedades, como el nombre o el país de un estado.

Las secciones definen cada combinación de conceptos para los que hay datos estadísticos en el conjunto de datos. Una porción contiene dimensiones y métricas. En la imagen anterior, las dimensiones son azules y las métricas, naranjas. En este ejemplo, la porción gender_country_slice tiene datos para la métrica population y las dimensiones country, year y gender. Otra porción, denominada country_slice, proporciona el número de población anual (métrica) total para los países.

Además de las dimensiones y las métricas, los segmentos también hacen referencia a tablas, que contienen los datos reales.

Ahora, revisemos paso a paso la creación de un conjunto de datos de este tipo en la DSPL.

Información del conjunto de datos

Para comenzar, debemos crear un archivo XML para nuestro conjunto de datos. Este es el comienzo de una descripción de la DSPL para nuestro conjunto de datos de ejemplo:

<?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 descripción del conjunto de datos comienza con un elemento <dspl> de nivel superior. El atributo targetNamespace contiene un URI que identifica de forma única este conjunto de datos. El espacio de nombres del conjunto de datos es especialmente importante cuando se publica el conjunto de datos, ya que será el identificador global de tu conjunto de datos y los medios para que otros lo hagan referencia.

Ten en cuenta que se puede omitir el atributo targetNamespace. En este caso, se genera un espacio de nombres único de forma automática cuando se importa el conjunto de datos.

Usa información de otros conjuntos de datos

Los conjuntos de datos pueden reutilizar las definiciones y los datos de otros conjuntos de datos mediante la importación de esos conjuntos de datos. Cada elemento <import> especifica el espacio de nombres de otro conjunto de datos al que hará referencia este conjunto de datos.

En nuestro conjunto de datos de ejemplo, necesitaremos algunas definiciones de http://www.google.com/publicdata/dataset/google/quantity (un conjunto de datos creado por Google que contiene conceptos útiles para definir las cantidades numéricas) y de los conjuntos de datos de time, entity y geo, que proporcionan definiciones relacionadas con la hora, las entidades y la geografía, respectivamente.

El elemento <dspl> superior proporciona una declaración de prefijo del espacio de nombres (p.ej., xmlns:time="http://...") para cada uno de los conjuntos de datos importados. Se necesitan declaraciones de prefijo para hacer referencia a elementos de otros conjuntos de datos de manera concisa. Por ejemplo, time:year hace referencia a la definición de year en el conjunto de datos importado cuyo espacio de nombres está asociado con el prefijo time.

Información del proveedor y el conjunto de datos

El elemento <info> contiene información general sobre el conjunto de datos: nombre, descripción y una URL donde se puede encontrar más información.

El elemento <provider> contiene información sobre el proveedor del conjunto de datos: su nombre y una URL en la que se puede encontrar más información (por lo general, la página principal del proveedor de datos).

Definición de conceptos

Ahora que proporcionamos información general sobre el conjunto de datos, estamos listos para comenzar a definir su contenido. Nuestro próximo objetivo es agregar estadísticas de la población de los países de los últimos 50 años.

Lo primero que debemos hacer es proporcionar algunas definiciones de las nociones de población, país y año. En la DSP, estas definiciones se llaman conceptos.

Un concepto es una definición de un tipo de datos que aparece en un conjunto de datos. Los valores de datos que corresponden a un concepto dado se denominan instancias de ese concepto.

Población

Comencemos con la definición del concepto de población. En un documento de DSPL, los conceptos se definen en un elemento <concepts> que aparece justo después de la información del proveedor y el conjunto de datos.

A continuación, se incluye un concepto de población con la información mínima requerida para cualquier concepto: id (un identificador único), name y type.

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

A continuación, te mostramos cómo funciona esta muestra:

  • Cada concepto debe proporcionar un id que identifique de forma única el concepto dentro del conjunto de datos. Esto significa que ningún concepto definido en el mismo conjunto de datos puede tener el mismo ID.
  • Al igual que el conjunto de datos y su proveedor, los elementos <info> proporcionan información textual sobre el concepto, como su nombre y descripción.
  • El elemento <type> especifica el tipo de datos para las instancias del concepto (en otras palabras, sus “valores”). En este ejemplo, el tipo de population es integer. DSPL admite los siguientes tipos de datos:
    • string
    • integer
    • float
    • boolean
    • date

País

Ahora, escribamos la definición del concepto de país:

<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 definición del concepto de país comienza como la anterior, con id, info y type.

Valores de conceptos

Los conceptos categóricos, como los países, tienen una enumeración de todas las instancias posibles. En otras palabras, puedes enumerar todos los países posibles a los que se puede hacer referencia. Sin embargo, para hacerlo, cada país necesita un identificador único. En este ejemplo, se usan códigos de país ISO para identificar los países del tipo string.

En este ejemplo, no necesitas usar el código ISO; puedes usar el nombre del país. Sin embargo, los nombres difieren por idioma, pueden cambiar con el tiempo y no siempre se usan de manera coherente en los conjuntos de datos. En el caso de los países y, en general, para los conceptos categóricos, es recomendable elegir identificadores cortos, estables, independientes y de uso común (si existen).

Propiedades del concepto

Además de su id, el concepto de país tiene un elemento <property> que especifica el nombre del país. En otras palabras, el nombre del país ("Irlanda") es una propiedad del país con id IE. Las propiedades son la forma en la que la DSPL proporciona información estructurada adicional sobre las instancias de un concepto.

Al igual que el concepto en sí, las propiedades tienen un id, un info y una type.

Datos de conceptos

Por último, el concepto de país tiene un elemento <table>. Este elemento hace referencia a una tabla que enumera la lista de todos los países.

Usar tablas tiene sentido para algunos conceptos, pero no para otros. Por ejemplo, no tiene sentido enumerar todos los valores posibles para la población de conceptos. Sin embargo, si haces referencia a una tabla para un concepto, esa tabla debe contener todas las instancias del concepto; por ejemplo, debe enumerar todos los países, no solo algunas muestras.

El conjunto de datos define la tabla countries_table de la siguiente manera:

...
<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 tabla de países especifica las columnas de la tabla y sus tipos, y hace referencia a un archivo CSV que contiene los datos. Este CSV se puede empaquetar y subir con el conjunto de datos XML o se puede acceder de manera remota a través de HTTP, HTTPS o FTP. En los últimos casos, reemplazarías countries.csv con una URL, por ejemplo, http://www.myserver.com/mydata/countries.csv.

Donde sea que esté almacenado, el archivo CSV se ve de la siguiente manera:

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

La primera fila de la tabla enumera los ID de las columnas, como se especifica en la definición table de la DSPL. Cada una de las siguientes filas corresponde a una instancia del concepto de país. Si el concepto tiene una tabla, debe contener todas las instancias del concepto; en este caso, debe enumerar todos los países.

Las columnas se asignan al concepto de país y sus propiedades según su ID. El ID de la primera columna, country, coincide con el ID del concepto. Esto significa que esta columna contiene el identificador de país único definido por el concepto de país. La siguiente columna corresponde a la propiedad name del concepto de país. Los valores de esta columna coinciden con los valores de la propiedad name.

Existen algunos requisitos para los datos de CSV de la tabla de conceptos:

  • Los encabezados de columna en la primera línea del archivo de datos deben coincidir exactamente con el concepto id y la propiedad id del concepto con el que se asocian los datos (aunque el orden puede variar).
  • Cada fila debe tener exactamente la misma cantidad de elementos que la cantidad de propiedades del concepto (incluso si el valor está vacío).
  • Cada valor para el campo id del concepto (aquí, el código de país) debe ser único y no está vacío (un campo vacío es uno con cero o solo caracteres de espacio en blanco).
  • Los valores de las propiedades que hacen referencia a otros conceptos deben estar vacíos o ser un valor válido del concepto al que se hace referencia.
  • Los valores que contienen comas, comillas dobles o caracteres de salto de línea deben estar entre comillas dobles.
  • Cualquier carácter de comillas dobles literales dentro de un valor debe estar inmediatamente precedido por otra comilla doble.

Año

El último concepto que necesitamos sobre los datos de la población de un país es representar los años. En lugar de definir un concepto nuevo, usaremos el concepto de año de uno de los conjuntos de datos que importamos: "http://www.google.com/publicdata/dataset/google/time". Para ello, debemos hacer referencia a él como time:year, en el que time representa el conjunto de datos al que se hace referencia y year identifica el concepto.

Conceptos canónicos

time:year es parte de un pequeño conjunto de conceptos canónicos definidos por Google. Los conceptos canónicos proporcionan definiciones básicas del tiempo, la geografía, las cantidades numéricas, las unidades, etcétera.

De hecho, el concepto de país que se definió antes existe como concepto canónico. Solo la creamos aquí para fines ilustrativos. Siempre que sea posible, debes usar los conceptos canónicos en tus conjuntos de datos, ya sea directamente o mediante su extensión (más información a continuación). Los conceptos canónicos hacen que tus datos sean comparables con otros conjuntos de datos y habilitan funciones para tus conjuntos de datos en el explorador de datos públicos. Por ejemplo, animar datos en el tiempo o mostrar datos geográficos en un mapa se basa en el uso de los conceptos canónicos time y geo, respectivamente.

Primera parte

Ahora que tenemos conceptos sobre la población, el país y el año, es hora de combinarlos.

Para ello, debemos crear una porción que las combine. En DSP, una porción es una combinación de conceptos para los que existen datos.

¿Por qué no crear una tabla con las columnas correctas? Debido a que las secciones capturan la información del conjunto de datos en términos de sus conceptos. Esto quedará más claro a medida que creemos más partes de nuestro conjunto de datos.

Las secciones aparecen en el archivo DSP bajo un elemento <slices>, que debe aparecer justo después de la sección concepts.

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

Al igual que los conceptos, cada porción tiene una id (countries_slice) que la identifica de forma única dentro del conjunto de datos.

Una porción contiene dos tipos de referencias de concepto: Dimensiones y Métricas. Los valores de las métricas varían según los valores de las dimensiones. Aquí, el valor de population (la métrica) varía según las dimensiones country y year.

Al igual que los conceptos, las secciones incluyen una referencia a una tabla que contiene los datos de la porción. La tabla a la que se hace referencia debe tener una columna para cada dimensión y métrica de la porción. Al igual que con los conceptos, las dimensiones y métricas de los segmentos se asignan a las columnas de la tabla con los mismos ID.

Tabla de Slice

La tabla de nuestra porción de población aparece en la sección tables del archivo 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>

Ten en cuenta que la columna year incluye un atributo format que especifica cómo se les da formato a los años. Los formatos de fecha admitidos son los definidos por el formato de fecha y hora de Joda.

La tabla countries_slice especifica las columnas de la tabla y sus tipos, y apunta a un archivo CSV que contiene los datos. El archivo CSV se ve de la siguiente manera:

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

Cada fila de la tabla de datos contiene una combinación única de las dimensiones country y year, junto con el valor correspondiente de la métrica population (por ejemplo, la población - metric - de Afganistán en 1960 - dimensiones).

Ten en cuenta que los valores de la columna country coinciden con el valor o identificador del concepto country, que es el código ISO 3166 de 2 letras del país.

Los datos CSV de una porción deben cumplir con las siguientes restricciones:

  • Cada valor de un campo de dimensión (como country y year) no debe estar vacío. Los valores para los campos de métricas (como population) pueden estar vacíos. Un valor vacío se representa con ningún carácter.
  • Cada valor de un campo de dimensión que hace referencia a un concepto debe estar presente en los datos de ese concepto. Por ejemplo, el valor AF debe estar presente en la tabla de datos conceptual de country.
  • Cada combinación única de valores de dimensión, p.ej., AF, 2000, puede ocurrir solo una vez.
  • Los datos se deben ordenar por columnas de dimensión sin tiempo (en cualquier orden) y, de forma opcional, por cualquiera de las otras columnas. Por ejemplo, en una tabla con las columnas [date, dimension1, dimension2, metric1, metric2], puedes ordenar por dimension1, dimension2, date, pero no por date y, por último, las dimensiones.

Resumen

En este punto, tenemos suficiente en nuestra DSPL para describir los datos de población del país. En resumen, lo que tuvimos que hacer fue:

  • Crea el encabezado y la descripción de la DSPL del conjunto de datos y su proveedor
  • Crea un concepto para la población y otro para el país, con un archivo CSV que enumere todos los países y sus nombres.
  • Crea una porción con nuestros números de población para los países a lo largo del tiempo, haciendo referencia al concepto de año ya definido en el conjunto de datos de tiempo importado desde Google.

En el resto de este instructivo, mejoraremos nuestro conjunto de datos agregando más dimensiones en más secciones, así como más métricas agrupadas por tema.

Cómo agregar una dimensión: Estados Unidos

Ahora enriquezcamos nuestro conjunto de datos agregando datos de población para estados de EE.UU. Primero, tenemos que definir un concepto para los estados. Es muy similar al concepto de país que definimos antes.

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

Extensiones de conceptos y referencias de propiedades

El concepto de estado presenta varias funciones nuevas de DSPL.

Primero, el estado extende otro concepto, geo:location (definido en el conjunto de datos geográficos externos que importamos al comienzo de nuestro conjunto de datos). Semánticamente, esto significa que state es un tipo de geo:location. Una consecuencia es que hereda todos los atributos y las propiedades de geo:location. En particular, la ubicación define propiedades para latitude y longitude. Si extiendes el concepto anterior, estas propiedades también se aplican al estado. Además, como la ubicación hereda de entity:entity, el estado también obtiene todas las propiedades del último, incluidos name, description y info_url.

Nota: El concepto del país que se definió antes debería, técnicamente, extenderse desde geo:location. Este punto se omitió anteriormente por cuestiones de simplicidad. Sin embargo, incluimos la ubicación a la herencia de países en el archivo XML final.

Nota: Puedes usar la construcción extends en tus propios conjuntos de datos para reutilizar la información definida por otros conjuntos de datos. Usar extends requiere que todas las instancias de tu concepto sean instancias válidas del concepto que estás extendiendo. Las extensiones te permiten agregar propiedades y atributos adicionales, y restringir el conjunto de instancias a un subconjunto de las instancias del concepto extendido.

Además de la herencia, la propiedad de estado también presenta la idea de concepto de referencias. En particular, el concepto de estado tiene una propiedad llamada country, que hace referencia al concepto de país que creamos antes. Para ello, se usa un atributo concept. Ten en cuenta que esta propiedad no proporciona un ID, solo una referencia de concepto. Esto equivale a crear un ID con el mismo valor que el ID del concepto al que se hace referencia (es decir, country en este ejemplo). La relación jerárquica entre el estado y el condado se captura mediante el uso de un atributo isParent="true" en la referencia. En general, las dimensiones con relaciones jerárquicas, como las geografías, deben representarse de esta manera, y el concepto secundario debe tener una propiedad que haga referencia al concepto superior mediante el atributo isParent.

La definición de la tabla para los estados se ve de la siguiente manera:

<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 columna de país tiene un valor constante para todos los estados. Cuando se especifica en la DSPL, no se repite ese valor para cada estado de los datos. Además, ten en cuenta que incluimos columnas para name, latitude y longitude, ya que el estado heredó estas propiedades de geo:location. Por otro lado, algunas propiedades heredadas (p.ej., description) no tienen columnas. Esto está bien. Si se omite una propiedad de una tabla de definición de conceptos, se supone que su valor es indefinido para cada instancia del concepto.

El archivo CSV se ve así:

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

Dado que ya tenemos conceptos de población y año, podemos volver a utilizarlos a fin de definir una porción nueva de población de estado.

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

La definición de la tabla de datos se ve de la siguiente manera:

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

Y el archivo CSV se verá así:

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

Espera, ¿por qué creamos una porción nueva en lugar de agregar otra dimensión a la anterior?

Una porción con dimensiones para el estado y el país no sería correcta, ya que algunas filas serían para los datos de país y algunas filas para los datos de estado. La tabla tendría "agujeros" para algunas dimensiones, lo cual no está permitido (recuerda que se permiten valores faltantes solo para las métricas y no en las dimensiones).

Las dimensiones actúan como una "clave primaria" de la porción. Esto significa que cada fila de datos debe tener valores para todas las dimensiones y que dos filas de datos no pueden tener exactamente los mismos valores para todas las dimensiones.

Agregar una métrica: tasa de desempleo

Agreguemos otra métrica a nuestro conjunto de datos:

<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 sección info de esta métrica tiene un nombre, una descripción y una URL (vínculo a la Oficina de Estadísticas Laborales de EE.UU.).

Este concepto también extiende el concepto canónico quantity:rate. El conjunto de datos de cantidad define los conceptos principales para representar las cantidades numéricas. En tu conjunto de datos, debes crear tus conceptos numéricos extendiendo el concepto de cantidad adecuada. Por lo tanto, desde el punto de vista técnico, el concepto de population definido debe extenderse desde quantity:amount.

Atributos de conceptos

Este concepto también introduce la construcción de un atributo. En este ejemplo, un atributo se usa para decir que unemployment_rate es un porcentaje. El atributo is_percentage se hereda del concepto quantity:rate que extiende este concepto. Public Data Explorer usa esta información para mostrar los signos de porcentaje al visualizar los datos.

Los atributos proporcionan un mecanismo general para adjuntar pares clave-valor a un concepto (en contraposición con las propiedades, que asocian valores adicionales con las instancias de un concepto). Al igual que los conceptos y las propiedades, los atributos tienen una id, una info y una type. Al igual que las propiedades, pueden hacer referencia a otros conceptos.

Los atributos no son solo para elementos generales predefinidos, como las propiedades numéricas. Puedes definir tus propios atributos para tus conceptos.

Cómo agregar datos de tasa de desempleo para estados de EE.UU.

Ahora estamos listos para agregar datos de tasa de desempleo para estados de los EE.UU. Debido a que la tasa de desempleo es una métrica y ya tenemos datos de población para los estados, podemos agregarlos a la porción que ya creamos para las dimensiones de estado y año:

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

... y agregue otra columna a la definición de la tabla:

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

... y al archivo 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

Antes dijimos que, para cada porción, las dimensiones forman una clave primaria para la porción. Además, cada conjunto de datos solo puede contener una porción para una combinación determinada de dimensiones. Todas las métricas disponibles para estas dimensiones deben pertenecer a la misma porción.

Más dimensiones: desglose de la población por género

Enriquezcamos nuestro conjunto de datos con un desglose de la población por género para los países. Ya estás comenzando a conocer el simulacro... Primero, debemos agregar un concepto para el género:

<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 sección info del concepto de género tiene una pluralName, que proporciona el texto que se usará para referirse a varias instancias del concepto de género. La sección info también incluye un totalName, que proporciona el texto que se usará para referirse a todas las instancias del concepto de género en su totalidad. Public Data Explorer usa ambos para mostrar información relacionada con el concepto de género. En general, debes proporcionarlos para conceptos que se puedan usar como dimensiones.

Ten en cuenta que el concepto de género también se extiende desde entity:entity. Esta es una práctica recomendada para los conceptos que se usan como dimensiones, ya que te permite agregar nombres, URL y colores personalizados a las diferentes instancias de conceptos.

El concepto de género se refiere a la tabla genders_table, que contiene los valores posibles para el género y sus nombres visibles (omitidos aquí).

Para agregar la población por género a nuestro conjunto de datos, debemos crear una porción nueva (recuerda que cada combinación de dimensiones disponible corresponde a una porción del conjunto de datos).

<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 definición de tabla de la porción se verá de la siguiente manera:

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

El archivo CSV para la tabla se ve de la siguiente manera:

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

En comparación con los países, la población y el segmento de desempleo anteriores, este tiene una dimensión adicional; cada valor de la métrica de población corresponde no solo a un país y a un año en particular, sino también a un género en particular.

Ten en cuenta que creamos un conjunto de datos "disperso". No todas las métricas están disponibles para todas las dimensiones: la población está disponible para los países y estados de EE.UU. por año, mientras que la tasa de desempleo solo está disponible para los países. El desglose por género solo está disponible para la población por país. No está disponible para la métrica de tasa de desempleo ni para la dimensión de estado. La dispersión también puede existir a nivel de los datos, y ciertas métricas no tienen valores para valores de dimensión determinados, pero eso no se representa en la DSPL.

Temas

La última función de DSPL que usaremos en nuestro conjunto de datos son los temas. Los temas se usan para clasificar conceptos de forma jerárquica, y las apps los usan para ayudar a los usuarios a navegar por tus datos.

En el archivo DSPL, los temas aparecen justo antes de los conceptos. A continuación, se muestra una jerarquía de temas de muestra:

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

Puedes anidar temas tan profundamente como sea necesario.

Para usar temas, solo debes hacer referencia a ellos desde la definición del concepto de la siguiente manera:

<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 concepto puede hacer referencia a más de un tema.

Envía tu conjunto de datos

Ahora que ya creaste el conjunto de datos, el siguiente paso es comprimirlo y subir el archivo ZIP a la herramienta Explorador de datos públicos de Google. Si tienes algún problema, consulta las Preguntas frecuentes, que incluyen un debate sobre los problemas de carga más comunes.

Como referencia, también puedes descargar el archivo en formato XML completo y el paquete de conjunto de datos completo asociado con este instructivo.

Dónde ir desde aquí

¡Felicitaciones por crear su primer conjunto de datos de DSPL! Ahora que comprendes los conceptos básicos, te recomendamos que leas la Guía para desarrolladores, que, entre otras cosas, documenta funciones "avanzadas" de la DSPL, como la compatibilidad con varios lenguajes y los conceptos que se pueden asignar.

También puedes consultar otros conjuntos de datos de ejemplo.