DSPL ट्यूटोरियल

DSPL का मतलब डेटासेट पब्लिशिंग लैंग्वेज है. DSPL में बताए गए डेटासेट को Google Public Data Explorer में इंपोर्ट किया जा सकता है. यह एक ऐसा टूल है जिसकी मदद से डेटा को बेहतर तरीके से एक्सप्लोर किया जा सकता है.

ध्यान दें: सार्वजनिक डेटा अपलोड करने वाले टूल का इस्तेमाल करके, Google के सार्वजनिक डेटा में डेटा अपलोड करने के लिए, आपके पास एक Google खाता होना चाहिए.

यह ट्यूटोरियल, सामान्य डीएसपीएल डेटासेट तैयार करने के तरीके के बारे में सिलसिलेवार निर्देश देता है.

DSPL डेटासेट एक बंडल होता है, जिसमें एक्सएमएल फ़ाइल और CSV फ़ाइलों का सेट होता है. CSV फ़ाइलें ऐसी सरल टेबल होती हैं जिनमें डेटासेट का डेटा होता है. एक्सएमएल फ़ाइल में डेटासेट के मेटाडेटा के बारे में बताया जाता है. इसमें मेटाडेटा से जुड़ी जानकारी भी शामिल होती है, जैसे कि मेज़रमेंट का ब्यौरा और टेबल के बीच मौजूद रेफ़रंस जैसा स्ट्रक्चर का मेटाडेटा. मेटाडेटा से ऐसे उपयोगकर्ता आपके डेटा को एक्सप्लोर और विज़ुअलाइज़ कर सकते हैं जिनके पास पहले से अनुभव नहीं है.

एक्सएमएल को समझने के लिए, यह ट्यूटोरियल सिर्फ़ एक ज़रूरी शर्त है. डेटाबेस के सिद्धांतों को समझना, जैसे कि टेबल, प्राइमरी की) से मदद मिल सकती है, लेकिन इसकी ज़रूरत नहीं है. रेफ़रंस के लिए, इस ट्यूटोरियल से जुड़ी पूरी की गई एक्सएमएल फ़ाइल और पूरा डेटासेट बंडल समीक्षा के लिए भी उपलब्ध हैं.

खास जानकारी

हमारा डेटासेट बनाना शुरू करने से पहले, यहां डीएसपीएल डेटासेट में दी गई खास चीज़ों के बारे में खास जानकारी दी गई है:

  • सामान्य जानकारी: डेटासेट के बारे में जानकारी
  • कॉन्सेप्ट: डेटासेट में दिखने वाली "चीज़ों" की परिभाषाएं (जैसे, देश, बेरोज़गारी की दर, लिंग, वगैरह.)
  • स्लाइस: उन कॉन्सेप्ट के कॉम्बिनेशन जिनके लिए डेटा है
  • टेबल: कॉन्सेप्ट और स्लाइस का डेटा. कॉन्सेप्ट टेबल में गिनती और स्लाइस टेबल में आंकड़ों का डेटा होता है
  • विषय: इसका इस्तेमाल, डेटासेट के सिद्धांतों को लेबल की मदद से, काम के क्रम में व्यवस्थित करने के लिए किया जाता है

इन ऐब्स्ट्रैक्ट नोटेशन को दिखाने के लिए, इस ट्यूटोरियल में इस्तेमाल किए गए डेटासेट (डमी डेटा के साथ) पर ध्यान दें: जनसंख्या और बेरोज़गारी के लिए आंकड़ों की टाइम सीरीज़, जिसमें देश, अमेरिका के राज्य, और लिंग के हिसाब से मिले-जुले डेटा का इस्तेमाल किया गया है.

इस उदाहरण के डेटासेट में, इन कॉन्सेप्ट के बारे में बताया गया है:

  • देश
  • लिंग
  • जनसंख्या
  • राज्य
  • बेरोज़गारी की दर
  • वर्ष

राज्य, जैसे कि कैटगरी जैसी जानकारी, टेबल कॉन्सेप्ट से जुड़ी होती है. इससे सभी संभावित वैल्यू (कैलिफ़ोर्निया, एरिज़ोना वगैरह) के बारे में पता चलता है. सिद्धांत में प्रॉपर्टी के लिए अतिरिक्त कॉलम हो सकते हैं, जैसे कि नाम या किसी राज्य का देश.

स्लाइस उन सिद्धांतों के हर कॉम्बिनेशन के बारे में बताते हैं जिनके लिए डेटासेट में आंकड़ों का डेटा होता है. स्लाइस में डाइमेंशन और मेट्रिक होती हैं. ऊपर दी गई तस्वीर में, डाइमेंशन नीले रंग के और मेट्रिक नारंगी हैं. इस उदाहरण में, स्लाइस gender_country_slice में मेट्रिक population और डाइमेंशन country, year, और gender का डेटा मौजूद है. country_slice नाम का एक दूसरा सेगमेंट, देशों की सालाना जनसंख्या की संख्या (मेट्रिक) दिखाता है.

डाइमेंशन और मेट्रिक के अलावा, स्लाइस उन टेबल का भी रेफ़रंस देते हैं जिनमें असल डेटा होता है.

आइए, अब हम सिलसिलेवार तरीके से डेटासेट बनाकर, इस तरह का डेटासेट बनाते हैं.

डेटासेट की जानकारी

शुरू करने के लिए, हमें अपने डेटासेट के लिए एक्सएमएल फ़ाइल बनानी होगी. यहां हमारे उदाहरण डेटासेट के लिए, 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 एट्रिब्यूट में एक ऐसा यूआरआई होता है जो खास तौर पर इस डेटासेट की पहचान करता है. डेटासेट को पब्लिश करते समय, डेटासेट का नेमस्पेस ज़रूरी होता है, क्योंकि यह आपके डेटासेट का ग्लोबल आइडेंटिफ़ायर होता है और अन्य लोग इसका रेफ़रंस भी देते हैं.

ध्यान दें कि targetNamespace एट्रिब्यूट को हटाया जा सकता है. इस मामले में, डेटासेट इंपोर्ट करने पर एक खास नेमस्पेस अपने-आप जनरेट हो जाता है.

दूसरे डेटासेट की जानकारी का इस्तेमाल करना

डेटासेट की मदद से, दूसरे डेटासेट की परिभाषाएं और उनसे जुड़ा डेटा फिर से इस्तेमाल किया जा सकता है. हर <import> एलिमेंट, किसी दूसरे डेटासेट के नेमस्पेस की जानकारी देता है, ताकि यह डेटासेट रेफ़रंस दे सके.

अपने डेटासेट में, हमें http://www.google.com/publicdata/dataset/google/quantity से कुछ परिभाषाओं की ज़रूरत होगी. यह डेटासेट, Google का बनाया गया ऐसा डेटासेट होता है जिसमें संख्या की संख्या को तय करने के लिए काम का होता है. साथ ही, हमें समय, इकाई, और भौगोलिक डेटासेट की सुविधा मिलती है, जिसमें समय, इकाइयों, और देश या इलाके से जुड़ी जानकारी होती है.

<dspl> एलिमेंट में नेमस्पेस का प्रीफ़िक्स, जैसे कि इंपोर्ट किए गए हर डेटासेट के लिए xmlns:time="http://..."). अन्य डेटासेट के एलिमेंट का कम शब्दों में रेफ़रंस देने के लिए, प्रीफ़िक्स एलान ज़रूरी हैं. उदाहरण के लिए, time:year इंपोर्ट किए गए डेटासेट में year की जानकारी देता है, जिसका नेमस्पेस time प्रीफ़िक्स से जुड़ा हुआ है.

डेटासेट और सेवा देने वाली कंपनी की जानकारी

<info> एलिमेंट में डेटासेट के बारे में सामान्य जानकारी: नाम, ब्यौरा, और एक यूआरएल होता है, जहां ज़्यादा जानकारी देखी जा सकती है.

<provider> एलिमेंट में डेटासेट की सेवा देने वाली कंपनी के बारे में जानकारी होती है. इसमें नाम और एक यूआरएल होता है, जहां ज़्यादा जानकारी मिल सकती है (आम तौर पर, डेटा देने वाली कंपनी का होम पेज).

कॉन्सेप्ट तय करना

हमने डेटासेट के बारे में कुछ सामान्य जानकारी दे दी है. अब हम इसके बारे में जानकारी दे सकते हैं. हमारा अगला लक्ष्य है कि हम पिछले 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> एलिमेंट, कॉन्सेप्ट के इंस्टेंस के लिए डेटा टाइप बताता है (दूसरे शब्दों में, इसकी "वैल्यू"). इस उदाहरण में 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 को या तो डेटासेट एक्सएमएल के साथ बंडल या अपलोड किया जा सकता है या एचटीटीपी, एचटीटीपीएस या फ़ाइल ट्रांसफ़र प्रोटोकॉल (एफ़टीपी) के ज़रिए दूर से ऐक्सेस किया जा सकता है. बाद वाले मामलों में, आपको countries.csv को यूआरएल से बदलना होगा. उदाहरण के लिए, http://www.myserver.com/mydata/countries.csv.

यह जहां भी स्टोर की गई है, CSV फ़ाइल ऐसी दिखती है:

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

टेबल की पहली लाइन में कॉलम आईडी होते हैं, जैसा कि डीएसपीएल table में बताया गया है. नीचे दी गई हर पंक्ति, देश के कॉन्सेप्ट के एक इंस्टेंस से मेल खाती है. अगर कॉन्सेप्ट में टेबल है, तो टेबल में उस कॉन्सेप्ट के सभी इंस्टेंस मौजूद होने चाहिए. इस मामले में, उन सभी देशों की सूची शामिल होनी चाहिए.

कॉलम को, देश के कॉन्सेप्ट और उसकी प्रॉपर्टी के आईडी के आधार पर मैप किया जाता है. पहले कॉलम का आईडी, 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 में, स्लाइस उन सिद्धांतों का एक संयोजन है जिनके लिए डेटा मौजूद है.

क्यों न सही कॉलम वाली टेबल बनाएं? स्लाइस, डेटासेट की जानकारी को उसके कॉन्सेप्ट के हिसाब से कैप्चर करते हैं. जैसे-जैसे हम अपने डेटासेट के ज़्यादा हिस्से बनाएंगे, वैसे-वैसे यह बेहतर होता जाएगा.

स्लाइस, <slices> एलिमेंट के तहत DSPL फ़ाइल में दिखते हैं. यह 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 के हिसाब से अलग-अलग होती है.

कॉन्सेप्ट की तरह ही, स्लाइस में टेबल का रेफ़रंस होता है, जिसमें स्लाइस का डेटा होता है. बताई गई टेबल में स्लाइस के हर डाइमेंशन और मेट्रिक के लिए एक कॉलम होना चाहिए. कॉन्सेप्ट की तरह ही, स्लाइस के डाइमेंशन और मेट्रिक को भी उसी आईडी वाले टेबल कॉलम में मैप किया जाता है.

स्लाइस टेबल

हमारे जनसंख्या स्लाइस की टेबल 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
...

डेटा टेबल की हर लाइन में 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>

कॉन्सेप्ट एक्सटेंशन और प्रॉपर्टी रेफ़रंस

स्टेट कॉन्सेप्ट में, डीएसपीएल की कई नई सुविधाएं जोड़ी गई हैं.

सबसे पहले, दूसरे सिद्धांत को बढ़ावा देता है, geo:location (इसकी जानकारी बाहरी भौगोलिक डेटासेट में दी गई है जिसे हमने अपने डेटासेट की शुरुआत में इंपोर्ट किया था). इसका मतलब यह है कि state एक तरह का geo:location है. नतीजे में वह geo:location के सभी एट्रिब्यूट और प्रॉपर्टी को शामिल करता है. खास तौर पर, जगह की जानकारी से latitude और longitude के लिए प्रॉपर्टी तय होती है. पुराने कॉन्सेप्ट को बड़ा करके, ये प्रॉपर्टी राज्य पर भी लागू होती हैं. इसके अलावा, जगह की जानकारी entity:entity से इनहेरिट की जाती है. इसलिए, name की description और info_url जैसी अन्य प्रॉपर्टी भी, प्रॉपर्टी में शामिल हो जाती हैं.

ध्यान दें: पहले बताए गए देश के सिद्धांत को तकनीकी तौर पर geo:location से भी बढ़ाया जाना चाहिए. इस आसान तरीके को पहले ही हटा दिया गया है. फिर भी, हमने फ़ाइनल एक्सएमएल फ़ाइल में, देश के इनहेरिटेंस की जगह शामिल की है.

ध्यान दें: अन्य डेटासेट से मिली जानकारी का फिर से इस्तेमाल करने के लिए, अपने डेटासेट में मौजूद 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 के लिए कॉलम शामिल किए हैं, क्योंकि राज्य ने 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 सेक्शन में नाम, जानकारी, और यूआरएल शामिल होता है. यह अमेरिका के ब्यूरो ऑफ़ लेबर स्टैटिस्टिक्स से जुड़ा होता है.

यह कॉन्सेप्ट 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 भी शामिल होता है. इस टैग का इस्तेमाल करके, लिंग के कॉन्सेप्ट के सभी इंस्टेंस के बारे में बताया जाता है. Public Data Explorer, इन दोनों जानकारी का इस्तेमाल, लिंग के सिद्धांत से जुड़ी जानकारी दिखाने के लिए करता है. आम तौर पर, आपको उन्हें ऐसे कॉन्सेप्ट के बारे में बताना चाहिए जिनका इस्तेमाल डाइमेंशन के तौर पर किया जा सकता है.

ध्यान दें कि लैंगिक जानकारी भी entity:entity से जुड़ी है. डाइमेंशन के तौर पर इस्तेमाल किए जाने वाले कॉन्सेप्ट के लिए, यह एक अच्छा तरीका है. इससे, अलग-अलग कॉन्सेप्ट इंस्टेंस के लिए, पसंद के मुताबिक नाम, यूआरएल, और रंग जोड़े जा सकते हैं.

जेंडर कॉन्सेप्ट का मतलब 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...

पिछले देशों, जनसंख्या, और बेरोज़गारी के आंकड़ों की तुलना में, इस डाइमेंशन का एक और डाइमेंशन भी है. जनसंख्या मेट्रिक की हर वैल्यू किसी खास देश और साल के साथ-साथ, किसी खास लिंग से जुड़ी जानकारी से भी मेल खाती है.

ध्यान दें कि हमने "Sparse" डेटासेट बनाया है. सभी मेट्रिक, सभी डाइमेंशन के लिए उपलब्ध नहीं हैं: देशों और अमेरिका के राज्यों में सालाना आधार पर जनसंख्या की जानकारी उपलब्ध होती है. वहीं, बेरोज़गारी की दर सिर्फ़ देशों के लिए उपलब्ध है. लिंग के आधार पर ब्रेकडाउन करने की सुविधा, सिर्फ़ देश के हिसाब से जनसंख्या के लिए उपलब्ध है. यह बेरोज़गारी दर की मेट्रिक के लिए उपलब्ध नहीं है, राज्य के डाइमेंशन के लिए नहीं है. स्पेसेज़, डेटा लेवल पर भी मौजूद हो सकता है. कुछ मेट्रिक में, डाइमेंशन के कुछ वैल्यू की वैल्यू नहीं होती हैं. हालांकि, डीएसपीएल में इसकी जानकारी नहीं होती.

विषय

हमारे डेटासेट में, 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 सार्वजनिक डेटा एक्सप्लोरर टूल में ज़िप फ़ाइल अपलोड करना है. अगर आपको कोई समस्या आती है, तो अक्सर पूछे जाने वाले सवाल देखें. इसमें आम तौर पर, वीडियो अपलोड करने से जुड़ी समस्याओं की चर्चा भी शामिल होती है.

रेफ़रंस के लिए, इस ट्यूटोरियल से जुड़ी पूरी एक्सएमएल फ़ाइल और पूरा डेटासेट बंडल भी डाउनलोड किया जा सकता है.

यहां से कहां जाएं

अपना पहला DSPL डेटासेट बनाने के लिए बधाई! अब, हम बुनियादी बातें समझ चुके हैं. इसलिए, हमारी सलाह है कि आप डेवलपर गाइड पढ़ें. इसमें, "बेहतर" DSPL सुविधाओं के दस्तावेज़ शामिल हैं, जैसे कि कई भाषाओं में सहायता और मैप करने लायक सिद्धांत.

आप उदाहरण के तौर पर दिए गए कुछ और डेटासेट भी देख सकते हैं.