DSPL 튜토리얼

DSPL은 Dataset Publishing Language(데이터 세트 게시 언어)의 약자입니다. DSPL에 설명된 데이터 세트를 풍부한 시각적 탐색이 가능한 도구인 Google Public Data Explorer로 가져올 수 있습니다.

참고: 공개 데이터 업로드 도구를 사용하여 Google 공개 데이터에 데이터를 업로드하려면 Google 계정이 있어야 합니다.

이 튜토리얼에서는 기본 DSPL 데이터 세트를 준비하는 방법의 단계별 예시를 제공합니다.

DSPL 데이터 세트는 XML 파일과 CSV 파일 집합을 포함하는 번들입니다. CSV 파일은 데이터 세트의 데이터를 포함하는 간단한 테이블입니다. XML 파일은 측정 설명과 같은 정보 메타데이터는 물론 테이블 간의 참조와 같은 구조 메타데이터를 비롯한 데이터 세트의 메타데이터를 설명합니다. 메타데이터를 사용하면 전문 사용자가 아닌 사용자가 데이터를 탐색하고 시각화할 수 있습니다.

이 튜토리얼을 이해하는 데 필요한 유일한 요구사항은 XML을 충분히 이해하고 있어야 한다는 것입니다. 간단한 데이터베이스 개념에 대한 이해 (예: 테이블, 기본 키)가 도움이 될 수 있지만 필수는 아닙니다. 참고로 이 튜토리얼과 관련된 완료된 XML 파일전체 데이터 세트 번들도 검토할 수 있습니다.

개요

데이터 세트를 만들기 전에 DSPL 데이터 세트에 포함된 내용을 개략적으로 살펴보겠습니다.

  • 일반 정보: 데이터 세트 정보
  • 개념: 데이터 세트에 표시되는 '사물'의 정의 (예: 국가, 실업률, 성별 등)
  • 슬라이스: 데이터가 있는 개념의 조합입니다.
  • 표: 개념 및 슬라이스 데이터입니다. 개념 테이블에는 열거형이 포함되고 슬라이스 테이블에는 통계 데이터가 저장됩니다.
  • 주제: 라벨 지정을 통해 의미 있는 계층 구조로 데이터 세트의 개념을 구성하는 데 사용됩니다.

이러한 추상적인 개념을 보여주기 위해 국가, 미국 주, 성별의 다양한 조합으로 집계된 인구와 실업률에 대한 통계 시계열이 이 가이드 전체에서 사용되는 데이터 세트 (더미 데이터 포함)를 고려합니다.

이 예시 데이터 세트는 다음 개념을 정의합니다.

  • 국가
  • gender
  • population
  • state
  • 실업률

주와 같이 범주형인 개념은 가능한 모든 값 (캘리포니아, 애리조나 등)을 열거하는 개념 테이블과 연결됩니다. 개념에는 이름 또는 주 국가와 같은 속성을 위한 추가 열이 있을 수 있습니다.

슬라이스는 데이터 세트에 통계 데이터가 있는 각 개념 조합을 정의합니다. 슬라이스에는 측정기준측정항목이 포함되어 있습니다. 위 그림에서는 측정기준이 파란색이고 측정항목은 주황색입니다. 이 예시에서 슬라이스 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:yeartime 프리픽스와 연결된 네임스페이스가 있는 가져온 데이터 세트에서 year의 정의를 참조합니다.

데이터 세트 및 제공업체 정보

<info> 요소에는 데이터 세트에 관한 일반적인 정보(이름, 설명, 추가 정보를 찾을 수 있는 URL)가 포함됩니다.

<provider> 요소에는 데이터 세트에 관한 제공자 정보(이름 및 추가 정보를 찾을 수 있는 URL)(일반적으로 데이터 제공자의 홈페이지)가 포함됩니다.

개념 정의

이제 데이터 세트에 대한 몇 가지 일반 정보를 제공했으므로 이제 데이터 정의를 정의할 수 있습니다. 다음 목표는 지난 50년 동안의 인구 통계 추가입니다.

가장 먼저 해야 할 일은 인구, 국가, 연도의 개념에 관한 몇 가지 정의를 제공하는 것입니다. DSPL에서는 이러한 정의를 개념이라고 부릅니다.

개념은 데이터 세트에 표시되는 데이터 유형의 정의입니다. 특정 개념에 해당하는 데이터 값을 해당 개념의 인스턴스라고 합니다.

인구

먼저 인구 개념 정의부터 살펴보겠습니다. DSPL 문서에서는 개념이 데이터 세트 및 제공업체 정보 바로 다음에 오는 <concepts> 요소에 정의됩니다.

다음은 인구 개념이며 개념에 필요한 최소한의 정보만 포함합니다(id(고유 식별자), nametype).

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

샘플의 기본 원리는 다음과 같습니다.

  • 모든 개념은 데이터 세트 내에서 개념을 고유하게 식별하는 id를 제공해야 합니다. 즉, 동일한 데이터 세트에 정의된 두 개념은 동일한 ID를 가질 수 없습니다.
  • 데이터 세트 및 데이터 제공자와 마찬가지로 <info> 요소는 이름 및 설명과 같이 개념에 대한 텍스트 정보를 제공합니다.
  • <type> 요소는 개념 인스턴스의 데이터 유형 (즉, '값')을 지정합니다. 이 예에서 population 유형은 integer입니다. DSPL은 다음 데이터 유형을 지원합니다.
    • string
    • integer
    • float
    • boolean
    • date

국가

이제 국가 개념의 정의를 작성해 보겠습니다.

<concept id="country">
  <info>
    <name><value>Country</value></name>
    <description>
      <value>My list of countries.</value>
    </description>
  </info>
  <type ref="string"/>
  <property id="name">
    <info>
      <name><value>Name</value></name>
      <description>
        <value>The official name of the country</value>
      </description>
    </info>
    <type ref="string" />
  </property>
  <table ref="countries_table" />
</concept>

국가 개념 정의는 이전 정의와 마찬가지로 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

표의 첫 번째 행에는 DSPL table 정의에 지정된 대로 열 ID가 나열됩니다. 다음 각 행은 국가 개념의 한 인스턴스에 해당합니다. 개념에 테이블이 있으면 테이블에 개념의 모든 인스턴스가 포함되어야 합니다. 이 경우에는 모든 국가를 나열해야 합니다.

열은 ID를 기반으로 국가 개념 및 속성에 매핑됩니다. 첫 번째 열의 ID country는 개념 ID와 일치합니다. 즉, 이 열에는 국가 개념에 따라 정의된 고유 국가 식별자가 포함됩니다. 다음 열은 국가 개념의 name 속성에 해당합니다. 이 열의 값은 name 속성의 값과 일치합니다.

개념 표의 CSV 데이터에는 몇 가지 요구사항이 있습니다.

  • 데이터 파일의 첫 번째 행의 열 제목은 id 개념과 데이터가 연결된 개념의 id 속성과 정확하게 일치해야 합니다 (순서는 다를 수 있음).
  • 각 행은 개념에 있는 속성 수와 정확히 동일한 수의 요소를 가져야 합니다 (값이 비어 있는 경우에도).
  • 개념의 id 필드(여기서는 국가 코드)의 각 값은 고유하고 비어 있지 않아야 합니다. 빈 필드는 0자 또는 공백 문자만 있는 값입니다.
  • 다른 개념을 참조하는 속성 값은 비어 있거나 참조된 개념의 유효한 값이어야 합니다.
  • 쉼표, 큰따옴표 또는 줄바꿈 문자를 포함하는 값은 큰따옴표로 묶어야 합니다.
  • 값 내의 리터럴 큰따옴표 문자는 바로 앞에 다른 큰따옴표가 와야 합니다.

연도

국가 인구 데이터에 필요한 마지막 개념은 연도를 나타내는 개념입니다. 새 개념을 정의하는 대신 가져온 데이터 세트 중 하나인 'http://www.google.com/publicdata/dataset/google/time'이라는 연도 개념을 사용합니다. 이렇게 하려면 time:year로 참조해야 합니다. 여기서 time는 참조되는 데이터 세트를 나타내고 year는 개념을 식별합니다.

표준 개념

time:year는 Google에서 정의한 소수의 표준 개념에 속합니다. 표준 개념은 시간, 지역, 숫자 수량, 단위 등에 관한 기본 정의를 제공합니다.

실제로 위에 정의된 국가 개념은 표준 개념으로 존재합니다. 이 페이지는 설명을 위해 만들어졌습니다. 가능하면 데이터 세트에 직접 또는 확장하여 표준 개념을 사용해야 합니다 (자세한 내용은 아래 확장 프로그램 참조). 표준 개념을 사용하면 데이터를 다른 데이터 세트와 비교할 수 있으며 Public Data Explorer에서 데이터 세트의 기능을 사용할 수 있습니다. 예를 들어 시간 경과에 따른 데이터에 애니메이션을 적용하거나 지도에 지리 데이터를 표시하려면 각각 timegeo 표준 개념을 사용해야 합니다.

첫 번째 슬라이스

이제 인구, 국가, 연도에 대한 개념이 생겼으므로 정리해 보겠습니다.

이를 위해 이를 결합하는 슬라이스를 만들어야 합니다. DSPL에서 슬라이스는 데이터가 존재하는 개념의 조합입니다.

적절한 열을 사용하여 테이블을 만들면 어떨까요? Slice가 개념 측면에서 데이터 세트의 정보를 캡처하기 때문입니다. 데이터 세트를 더 만들수록 더욱 명확해집니다.

슬라이스는 DS 요소 파일 내 <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)가 있습니다.

Slice에는 측정기준측정항목이라는 두 가지 종류의 개념 참조가 포함됩니다. 측정항목 값은 측정기준의 값에 따라 다릅니다. 여기에서 population의 값(측정항목)은 측정기준 countryyear에 따라 다릅니다.

개념과 마찬가지로 슬라이스에는 슬라이스의 데이터가 포함된 테이블 참조가 포함됩니다. 참조된 테이블에는 슬라이스의 측정기준 및 측정항목당 하나의 열이 있어야 합니다. 개념과 마찬가지로 슬라이스의 측정기준 및 측정항목은 ID가 동일한 표 열에 매핑됩니다.

슬라이스 테이블

모집단 슬라이스의 표는 DSPL 파일의 tables 섹션에 표시됩니다.

<tables>
  ...
  <table id="countries_slice_table">
    <column id="country" type="string"/>
    <column id="year" type="date" format="yyyy"/>
    <column id="population" type="integer"/>
    <data>
      <file format="csv" encoding="utf-8">country_slice.csv</file>
    </data>
  </table>
  ...
</tables>

year 열에는 연도의 형식을 지정하는 format 속성이 함께 제공됩니다. 지원되는 날짜 형식은 Joda DateTime 형식으로 정의된 형식입니다.

countries_slice 테이블은 테이블의 열과 유형을 지정하며 데이터가 포함된 CSV 파일을 가리킵니다. CSV 파일은 다음과 같습니다.

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

데이터 표의 각 행에는 population 측정항목의 해당 값 (예: 1960년 아프가니스탄의 인구 - 측정항목 - 측정기준)과 함께 측정기준 countryyear의 고유한 조합이 포함됩니다.

country 열의 값은 country 개념의 값/식별자(국가의 ISO 3166 ISO 3자리 코드)와 일치합니다.

슬라이스의 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의 모든 속성과 속성이 상속됩니다. 특히 위치는 latitudelongitude의 속성을 정의합니다. 전자 개념을 확장하면 이러한 속성이 상태에도 적용됩니다. 또한 위치가 entity:entity에서 상속되므로 상태는 name, description, info_url를 포함한 두 번째 속성의 모든 속성도 가져옵니다.

참고: 이전에 정의된 국가 개념은 기술적으로도 geo:location에서 확장되어야 합니다. 이 점은 편의를 위해 이전에 생략되었습니다. 하지만 최종 XML 파일에는 위치-국가 상속이 포함되어 있습니다.

참고: 자체 데이터 세트에 있는 extends 구문을 사용하여 다른 데이터 세트에서 정의한 정보를 재사용할 수 있습니다. extends를 사용하려면 개념의 모든 인스턴스가 확장 중인 개념의 유효한 인스턴스여야 합니다. 확장 프로그램을 사용하면 추가 속성 및 속성을 추가하고 인스턴스 집합을 확장 개념의 인스턴스 중 하나로 제한할 수 있습니다.

상태 속성에는 상속 외에도 개념 참조라는 개념이 있습니다. 특히 주 개념에는 위에서 만든 국가 개념을 참조하는 country라는 속성이 있습니다. concept 속성을 사용하면 됩니다. 이 속성은 ID를 제공하지 않고 개념 참조만 제공합니다. 참조된 개념의 ID와 동일한 값으로 ID를 생성하는 것과 같습니다 (예: country). 참조에 isParent="true" 속성을 사용하여 주와 카운티 사이의 계층적 관계를 캡처합니다. 일반적으로 지역과 같이 계층적 관계가 있는 측정기준은 이렇게 표현되어야 하며 하위 개념에는 isParent 속성을 사용하는 상위 개념을 참조하는 속성이 있어야 합니다.

상태의 테이블 정의는 다음과 같습니다.

<tables>
  ...
  <table id="states_table">
    <column id="state" type="string"/>
    <column id="name" type="string"/>
    <column id="country" type="string">
      <value>US</value>
    </column>
    <column id="latitude" type="float"/>
    <column id="longitude" type="float"/>
    <data>
      <file format="csv" encoding="utf-8">states.csv</file>
    </data>
  </table>
  ...
</tables>

국가 열에는 모든 주에 대한 값이 일정합니다. DSPL에서 지정하면 데이터의 모든 상태에 이 값이 반복되지 않습니다. name, latitude, longitude 열을 포함했습니다. 상태가 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 개념에서 상속됩니다. Public Data Explorer에서 이 정보를 사용하여 데이터를 시각화할 때 퍼센트 기호를 표시합니다.

속성은 키-값 쌍을 개념에 연결하는 일반적인 메커니즘을 제공합니다 (추가 값을 개념의 인스턴스와 연결하는 속성과 다름). 개념 및 속성과 마찬가지로 속성에는 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도 포함되어 있습니다. 둘 다 Public Data Explorer에서 성별 개념과 관련된 정보를 표시하는 데 사용됩니다. 일반적으로 측정기준으로 사용할 수 있는 개념에 제공해야 합니다.

성별 개념도 entity:entity에서 확장됩니다. 이를 통해 측정기준으로 사용되는 개념에 유용합니다. 다양한 개념 인스턴스에 커스텀 이름, URL, 색상을 추가할 수 있기 때문입니다.

성별 개념은 성별과 표시 이름에 사용할 수 있는 값(여기서는 생략됨)을 포함하는 genders_table 테이블을 나타냅니다.

데이터 세트에 성별별 인구를 추가하려면 새 슬라이스를 만들어야 합니다(사용 가능한 각 측정기준 조합은 데이터 세트의 슬라이스에 해당).

<slice id="countries_gender_slice">
  <dimension concept="country"/>
  <dimension concept="gender"/>
  <dimension concept="time:year"/>
  <metric concept="population"/>
  <table ref="countries_gender_slice_table"/>
</slice>

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

이전 국가, 인구, 실업률 슬라이스와 비교하면 이 측정기준에는 추가적인 측정기준이 있습니다. 인구 측정항목의 각 값은 특정 국가와 연도뿐만 아니라 특정 성별에도 해당합니다.

'희소' 데이터 세트를 만들었습니다. 모든 측정기준에 모든 측정항목을 사용할 수 있는 것은 아닙니다. 인구는 1년 단위로 국가 및 주에서 사용할 수 있지만 실업률은 국가에만 사용할 수 있습니다. 성별에 따른 분류는 국가별 인구에 대해서만 사용할 수 있으며, 실업률 측정항목에는 사용할 수 없고 주 측정기준에는 사용할 수 없습니다. 희소성은 데이터 수준에서도 존재할 수 있으며, 특정 측정항목에는 특정 측정기준 값에 대한 값이 없지만 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>

개념은 둘 이상의 주제를 참조할 수 있습니다.

데이터 세트 제출

데이터 세트를 만들었으므로 다음 단계는 데이터를 압축하고 Google Public Data Explorer 도구에 ZIP 파일을 업로드하는 것입니다. 문제가 발생하면 가장 일반적인 업로드 문제에 관한 설명이 포함된 FAQ를 확인하세요.

참고로 이 튜토리얼과 연결된 전체 XML 파일전체 데이터 세트 번들을 다운로드할 수도 있습니다.

다음 단계

첫 번째 DSPL 데이터 세트를 만든 것을 축하합니다 이제 기본사항을 이해했으므로 여러 언어 지원 및 매핑 가능 개념과 같은 '고급' DSPL 기능을 문서화하는 개발자 가이드를 읽어보는 것이 좋습니다.

예시 데이터 세트를 살펴보는 것도 좋습니다.