Instructivo sobre DSPL

DSPL es la sigla en inglés de Dataset Publishing Language. Los conjuntos de datos descritos en la DSPL se pueden importar a Google Public Data Explorer, una herramienta que permite la exploración visual y enriquecida de los datos.

Nota: Para subir datos a los datos públicos de Google con 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 DSPL.

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

El único requisito previo para comprender este instructivo es tener un buen nivel de comprensión de XML. Cierta comprensión de los conceptos de bases de datos simples (p.ej., tablas, claves primarias) pueden ser útiles, pero no es obligatorio. Como referencia, el archivo en formato XML completo y el paquete completo de conjuntos de datos 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í hay una descripción general de alto nivel de lo que contiene un conjunto de datos de DSPL:

  • Información general: Acerca del conjunto de datos
  • Conceptos: Definiciones de "cosas" que aparecen en el conjunto de datos (p.ej., países, tasa de desempleo, género, etcétera).
  • Slices: Son combinaciones de conceptos para los que hay datos.
  • Tablas: Son datos para conceptos y porciones. Las tablas de conceptos contienen enumeraciones y las tablas de segmentos contienen datos estadísticos
  • Temas: Se usan para organizar los conceptos del conjunto de datos en una jerarquía significativa a través del etiquetado.

Para ilustrar estas nociones más bien abstractas, considera el conjunto de datos (con datos ficticios) que se usa en este instructivo: series temporales estadísticas sobre la población y el 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, se asocian con tablas de conceptos, que enumeran todos sus valores posibles (California, Arizona, etcétera). 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 la 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 son naranjas. En este ejemplo, la porción gender_country_slice tiene datos de la métrica population y las dimensiones country, year y gender. Otra porción, llamada country_slice, proporciona los números de población anuales totales (métricas) de los países.

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

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

Información del conjunto de datos

Para comenzar, debemos crear un archivo en formato XML para nuestro conjunto de datos. Aquí está el comienzo de una descripción en 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 este conjunto de datos de forma única. El espacio de nombres del conjunto de datos es muy importante cuando lo publicas, ya que será el identificador global de tu conjunto de datos y los medios para que otros puedan referirse a él.

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

Usa información de otros conjuntos de datos

Los conjuntos de datos pueden volver a usar definiciones y datos de otros conjuntos de datos cuando los importan. 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 cantidades numéricas) y de los conjuntos de datos de tiempo, entidad y geo, que proporcionan definiciones relacionadas con el tiempo, las entidades y la geografía, respectivamente.

El elemento <dspl> superior proporciona una declaración de prefijo de 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 del conjunto de datos

El elemento <info> contiene información general sobre el conjunto de datos: nombre, descripción y una URL con la que 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 siguiente objetivo es agregar estadísticas de población de los países de los últimos 50 años.

Lo primero que debemos hacer es proporcionar algunas definiciones para las nociones de población, país y año. En la DSPL, estas definiciones se denominan 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 determinado se denominan instancias de ese concepto.

Población

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

A continuación, se muestra 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 manera única el concepto dentro del conjunto de datos. Esto significa que no puede haber dos conceptos definidos en el mismo conjunto de datos con el mismo ID.
  • Al igual que sucede con 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. La 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 un 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 posibles países 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 países; estos códigos son del tipo string.

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

Propiedades de los conceptos

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 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 un 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 propagación del concepto. 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 algunos de muestra.

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 archivo CSV se puede agrupar y subir con el conjunto de datos XML, o bien se puede acceder de forma remota a través de HTTP, HTTPS o FTP. En los últimos casos, reemplazarías countries.csv por una URL, por ejemplo, http://www.myserver.com/mydata/countries.csv.

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

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

En la primera fila de la tabla, se enumeran los ID de columna, 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, esta 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 en función de su ID. El ID de la primera columna, country, coincide con el ID de concepto. Esto significa que esta columna contiene el identificador único de país 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.

Hay algunos requisitos para los datos 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 están asociados los datos (aunque el orden puede variar).
  • Cada fila debe tener exactamente la misma cantidad de elementos que la cantidad de propiedades en el concepto (incluso si el valor está vacío).
  • Cada valor del campo id del concepto (aquí, el código de país) debe ser único y no estar 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 contengan comas, comillas dobles o caracteres de salto de línea deben encerrarse por completo entre comillas dobles.
  • Cualquier carácter literal de comillas dobles dentro de un valor debe estar precedido inmediatamente por otra comilla doble.

Año

El último concepto que necesitamos para nuestros datos de la población de un país es un concepto para representar 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, necesitamos 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 forma parte de un pequeño conjunto de conceptos canónicos definidos por Google. Los conceptos canónicos proporcionan definiciones básicas de tiempo, geografía, cantidades numéricas, unidades, etcétera.

De hecho, el concepto de país que se definió anteriormente existe como un concepto canónico. Solo lo creamos aquí con fines ilustrativos. Siempre que sea posible, debes usar conceptos canónicos en tus conjuntos de datos, ya sea directamente o extendiéndolos (más información sobre la extensión a continuación). Los conceptos canónicos permiten que tus datos se puedan comparar con otros conjuntos de datos y habilitan funciones para tus conjuntos de datos en Public Data Explorer. Por ejemplo, animar datos en el tiempo o mostrar datos geográficos en un mapa dependen del uso de los conceptos canónicos time y geo, respectivamente.

Primera porción

Ahora que tenemos conceptos de población, país y año, es hora de unirlos.

Para eso, debemos crear una slice que los combine. En la DSPL, una porción es una combinación de conceptos para los que existen datos.

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

Las secciones aparecen en el archivo DSPL 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 un id (countries_slice) que la identifica de manera única dentro del conjunto de datos.

Una porción contiene dos tipos de referencias de conceptos: Dimensiones y métricas. Los valores de las métricas varían con 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 porciones 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 para nuestra porción de propagació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 da formato a los años. Los formatos de fecha admitidos son aquellos definidos por el formato de Joda DateTime.

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 - métrica - de Afganistán en 1960 - dimensiones).

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

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

  • Ningún valor de un campo de dimensión (como country y year) debe estar vacío. Los valores de los campos de métricas (como population) pueden estar vacíos. Un valor vacío se representa sin caracteres.
  • 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 del concepto 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 las columnas de dimensiones que no son de tiempo (en cualquier orden) y, luego, 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, luego por dimension2, por date, pero no por date ni por las dimensiones.

Resumen

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

  • Crear el encabezado y la descripción de 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 y haz referencia al concepto de año ya definido en el conjunto de datos de tiempo importado de Google.

En el resto de este instructivo, agregaremos más dimensiones y porciones, y más métricas agrupadas por tema para enriquecer el conjunto de datos.

Cómo agregar una dimensión: Estados de EE.UU.

Ahora, enriquezcamos nuestro conjunto de datos agregando datos sobre la población de los estados de EE.UU. Primero tenemos que definir un concepto para los estados. Esto se parece mucho 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 introduce varias funciones nuevas de la DSPL.

Primero, el estado extends 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 propiedades de geo:location. En particular, la ubicación define las propiedades para latitude y longitude. Al extender el concepto anterior, estas propiedades también se aplican al estado. Además, como la ubicación se hereda de entity:entity, el estado también obtiene todas las propiedades de este último, incluidas name, description y info_url.

Nota: El concepto de país definido con anterioridad también debe extenderse, en términos técnicos, también desde geo:location. Este punto se omitió antes por cuestiones de simplicidad. No obstante, incluimos la ubicación de la herencia del país 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 references de conceptos. En particular, el concepto de estado tiene una propiedad llamada country, que hace referencia al concepto de país que creamos anteriormente. 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). Para capturar la relación jerárquica entre el estado y el condado, se debe incluir 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 con el atributo isParent.

La definición de 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 país tiene un valor constante para todos los estados. Si se especifica en la DSPL, se evita repetir 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 no está definido para cada instancia del concepto.

El archivo CSV se ve de la siguiente manera:

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

Como ya tenemos conceptos de población y año, podemos reutilizarlos para definir una nueva porción para la población estatal.

<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 ve 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 datos del país y otras filas serían para datos de estado. La tabla tendrá "agujeros" para algunas dimensiones, lo cual no está permitido (recuerda que los valores faltantes solo se permiten para las métricas, no para las dimensiones).

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

Agrega una métrica: tasa de desempleo

Ahora, 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 (con un vínculo a la Oficina de Estadísticas Laborales de EE.UU.).

Este concepto también extiende el concepto canónico de quantity:rate. El conjunto de datos de cantidad define conceptos básicos para representar cantidades numéricas. En tu conjunto de datos, debes crear tus conceptos numéricos extendiendo el concepto de cantidad apropiado. Por lo tanto, técnicamente, el concepto population definido antes debería haberse extendido desde quantity:amount.

Atributos de conceptos

Este concepto también introduce la construcción de un atributo. En este ejemplo, se usa un atributo para indicar 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 signos de porcentaje cuando se visualizan los datos.

Los atributos proporcionan un mecanismo general para adjuntar pares clave-valor a un concepto (a diferencia de las propiedades, que asocian valores adicionales con instancias de un concepto). Al igual que los conceptos y las propiedades, los atributos tienen un id, un info y un 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 los conceptos.

Agregar datos sobre la tasa de desempleo para los estados de EE.UU.

Ahora estamos listos para agregar los datos sobre la tasa de desempleo en estados de 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 agrega 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

Anteriormente, dijimos que, para cada porción, las dimensiones forman una clave primaria para ella. 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. A esta altura, ya estás empezando a saber el taladro... Primero, debemos agregar un concepto de 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 un pluralName, que proporciona el texto que se usará para hacer referencia a varias instancias del concepto de género. En la sección info, también se incluye un totalName, que proporciona el texto que se usará para hacer referencia a todas las instancias del concepto de género en su totalidad. Public Data Explorer los utiliza para mostrar información relacionada con el concepto de género. En general, debes proporcionarlas para conceptos que se pueden 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 personalizados, URLs y colores para las diversas instancias de conceptos.

El concepto de género hace referencia a la tabla genders_table, que contiene los valores posibles de género y sus nombres visibles (se omite 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 en el 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 para la porción se ve 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 de la tabla tiene el siguiente aspecto:

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 la porción 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ño en particular, sino también a un género en particular.

Ten en cuenta que hemos creado un conjunto de datos "disperso". No todas las métricas están disponibles para todas las dimensiones: la población está disponible de manera anual para países y estados de EE.UU., mientras que la tasa de desempleo solo está disponible para 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 ciertos valores de dimensión, 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 aplicaciones los usan para ayudar a los usuarios a navegar hacia tus datos.

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

<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 con la profundidad necesaria.

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 creaste el conjunto de datos, el siguiente paso es comprimirlo y subir el archivo ZIP a la herramienta Google Public Data Explorer. Si encuentras algún problema, consulta las Preguntas frecuentes, que incluyen un análisis de los problemas de carga más comunes.

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

Lo que vendrá

¡Felicitaciones por crear tu primer conjunto de datos en DSPL! Ahora que comprendes los conceptos básicos, te recomendamos que leas la guía para desarrolladores, que, entre otras cosas, documenta las funciones de DSPL “avanzadas”, como la compatibilidad con varios lenguajes y los conceptos asignables.

También puedes analizar más ejemplos de conjuntos de datos.