DSPL जेन

DSPL Gen, कमांड-लाइन वाली सुविधा है. इसकी मदद से, CSV डेटा वाली टेबल को DSPL डेटासेट में बदला जा सकता है. यह टूल इनपुट फ़ाइल को पार्स करता है, सभी ज़रूरी डेटा टेबल बनाता है, और डीएसपीएल एक्सएमएल फ़ाइल बताता है. इससे, डेटासेट "टेंप्लेट" पूरा हो जाता है. इसके लिए, अपलोड करने और विज़ुअलाइज़ करने से पहले सिर्फ़ मामूली सुधार करना ज़रूरी होता है.

DSPL जेन के पीछे मूल सिद्धांत यह है कि CSV फ़ाइल में मौजूद हर कॉलम एक डीएसपीएल कॉन्सेप्ट से मेल खाता है और हर पंक्ति डाइमेंशन के कॉम्बिनेशन के लिए सिर्फ़ एक निगरानी है. यह टूल, कॉलम में बदलाव करके, हर कॉलम / कॉन्सेप्ट के लिए सही मेटाडेटा तय करके (जैसे कि उसका आईडी, टाइप, डाइमेंशन है या नहीं, मेट्रिक वगैरह) काम करता है. इसके बाद, सभी ज़रूरी कॉन्सेप्ट परिभाषा और स्लाइस टेबल जनरेट करता है.

रनिंग DSPL जेन

सिंटैक्स

ध्यान दें: ये निर्देश यह मानते हैं कि आपने पहले ही DSPL टूल पेज पर दिए गए, इंस्टॉल करने के निर्देशों का पालन कर लिया है.

DSPL Gen को चलाने के लिए, अपने सिस्टम पर टर्मिनल / प्रॉम्प्ट पर जाएं और यह टाइप करें:

python dsplgen.py -o [output path] [path to CSV file] 

जहां ब्रैकेट में दिए गए शब्दों को इस तरह से बदला गया हो:

  • [output path] डायरेक्ट्री का पाथ, जहां से आप आउटपुट फ़ाइलें रखना चाहते हैं; यह डायरेक्ट्री आपके फ़ाइल सिस्टम में पहले से मौजूद होनी चाहिए.
  • [path to CSV file]: आपकी इनपुट CSV फ़ाइल का पाथ. इस फ़ाइल को फ़ॉर्मैट करने के तरीके के बारे में ज़्यादा जानने के लिए, नीचे दिया गया सेक्शन देखें.

-o [output path] कॉम्पोनेंट को शामिल करना ज़रूरी नहीं है. इसे शामिल न करने पर, आउटपुट फ़ाइलें मौजूदा डायरेक्ट्री में सेव हो जाती हैं.

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

आखिर में, अपनी पसंद के टेक्स्ट एडिटर में एक्सएमएल फ़ाइल खोलें और ज़रूरी बदलाव करें. कम से कम, आपको नाम और जानकारी देनी चाहिए. साथ ही, ऐसी दूसरी वैल्यू भी भरें जो टूल के ज़रिए ** INSERT ... ** नोटेशन से मार्क की गई हैं.

सरल उदाहरण

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

date,country,age_group,disease_cases
01/2000,US,old,102030
01/2000,MX,old,192939
01/2000,US,young,23131
01/2000,MX,young,12311
02/2000,US,old,143135
02/2000,MX,old,203131
02/2000,US,young,22990
02/2000,MX,young,12591

ऊपर दिए गए इनपुट पर टूल चलाने से 4 फ़ाइलें बनती हैं:

  • dataset.xml: DSPL एक्सएमएल टेंप्लेट
  • country_table.csv: country कॉन्सेप्ट की वैल्यू
  • age_group_table.csv: age_group कॉन्सेप्ट की वैल्यू
  • slice_0_table.csv डेटासेट स्लाइस की टेबल (क्रम से लगाने के अलावा, इनपुट टेबल की तरह)

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

अपने इनपुट CSV की व्याख्या करना

बुनियादी विकल्प

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

इन मामलों को हैंडल करने के लिए, यह टूल CSV हेडर वाली लाइन में DSPL जनरेट करने के विकल्प / "संकेत" दिए जाने की सुविधा देता है. इनके लिए सिंटैक्स नीचे दिया गया है:

column1[option1=value1;option2=value2;...],column2[option1=value1;option2=value2;...],column3[...],...

खास तौर पर, ध्यान दें कि विकल्प सूची को कॉलम के नाम के दाईं ओर ब्रैकेट में रखा जाता है. साथ ही, क्रम में लगे विकल्प की सेटिंग को सेमी-कोलन से अलग किया जाता है. हर विकल्प में एक विकल्प का नाम, बराबर का चिह्न, और एक विकल्प मान होता है.

DSPL Gen फ़िलहाल इन बुनियादी विकल्पों का इस्तेमाल करता है:

विकल्प ब्यौरा डिफ़ॉल्ट
type इस कॉलम के लिए DSPL डेटा टाइप; date, float, integer या string में से कोई एक होना चाहिए. डेटा से अनुमान लगाया गया
format इस तारीख के कॉलम का फ़ॉर्मैट; डीएसपीएल की तरह ही, इस फ़ॉर्मैट को Joda dateTime स्टैंडर्ड का इस्तेमाल करके कोड में बदला जाना चाहिए. डेटा से अनुमान लगाया गया
slice_role किसी भी स्लाइस में इस कॉलम की भूमिका क्या है; यह dimension या metric होना चाहिए. dimension अगर कॉलम date या string है, तो metric
concept यह कॉलम ऐसा कैननिकल कॉन्सेप्ट दिखाता है जो उदाहरण के तौर पर दिया गया है, जैसे कि geo:country; अगर दिया गया है, तो एक्सएमएल फ़ाइल में कॉन्सेप्ट इंपोर्ट हो जाता है और कोई परिभाषा तय नहीं होती. कभी नहीं
extends यह कॉलम, कैननिकल कॉलम के तौर पर मान्य है. उदाहरण के लिए, entity:entity. कभी नहीं
parent

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

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

कभी नहीं

वैल्यू रोल-अप

ऊपर बताए गए बुनियादी "संकेत" विकल्पों के अलावा, डीएसपीएल जेन भी स्लाइस रोल-अप का इस्तेमाल करता है. यह टूल, सिंगल टेबल इनपुट में डाइमेंशन के सीमित सबसेट के साथ, अपने-आप एक अलग टेबल बना सकता है. इसलिए, उदाहरण के लिए, अगर आपकी इनपुट टेबल तीन स्लाइस के बिना स्लाइस से मेल खाती है (जैसे, dimension1, dimension2, और dimensions3) टूल, कुछ और स्लाइस भी बना सकता है: सिर्फ़ dimension1, सिर्फ़ dimension2, सिर्फ़ dimension1 और dimension2 वगैरह.

इन अतिरिक्त स्लाइस को जोड़ने से, आपके डेटासेट को एक्सप्लोर करना आसान हो जाता है, क्योंकि इससे विज़ुअलाइज़ेशन बनाने के लिए ज़रूरी डाइमेंशन फ़िल्टर की संख्या कम हो जाती है. दूसरी ओर, यह प्रोसेस ऐसी हो सकती है जो "नई" डेटा ओरिजनल फ़ाइल में न मिले. इसलिए, अगर डेटा का इस्तेमाल ठीक से न किया गया हो, तो उसमें गड़बड़ियां भी दिख सकती हैं. अपना डेटासेट पब्लिश करने से पहले, रोल-अप किए गए नंबर की सावधानी से जांच करें.

रोल आउट की प्रोसेस को इनपुट CSV के हेडर में कुछ और विकल्पों को शामिल करके ट्रिगर किया जाता है:

विकल्प ब्यौरा डिफ़ॉल्ट
aggregation इस कॉलम की एक से ज़्यादा वैल्यू को मिलाने के लिए, एग्रीगेशन का तरीका इस्तेमाल किया जाना चाहिए; यह AVG, COUNT, MAX, MIN या SUM में से किसी एक का होना चाहिए; सिर्फ़ मेट्रिक के लिए. SUM
rollup अगर वैल्यू true है, तो इस कॉलम का कॉन्सेप्ट "रोल अप किया गया" है.इसका मतलब है कि इसे एग्रीगेट किया जाता है. यह सिर्फ़ डाइमेंशन वाले कॉन्सेप्ट को दिखाता है. गलत
total_val इस कॉलम में मौजूद वैल्यू यह बताती है कि इस कॉलम को रोल-अप करते समय किन पंक्तियों को रखना है. यह वैल्यू सिर्फ़ डाइमेंशन के कॉन्सेप्ट के लिए काम की है. None

DSPL Gen नीचे दिए गए एल्गोरिदम का इस्तेमाल करके, रोल-अप का हिसाब लगाता है:

  • rollup टैग की वैल्यू का इस्तेमाल करके, सभी संभावित कॉलम कॉम्बिनेशन की गिनती करें
  • हर कॉम्बिनेशन के लिए:
    • अगर किसी रोल-अप किए गए कॉलम में total_val पैरामीटर सेट है, तो पंक्तियों को इस वैल्यू के हिसाब से फ़िल्टर करें. अगर ऐसा नहीं है, तो सभी पंक्तियां चुनें
    • रोल-अप कॉलम छोड़ें
    • पंक्तियों को बाकी डाइमेंशन कॉलम की वैल्यू के हिसाब से ग्रुप में बांटें
    • aggregation पैरामीटर में बताए गए तरीके का इस्तेमाल करके, हर मेट्रिक को एग्रीगेट करें
    • नतीजे के लिए एक स्लाइस और उससे जुड़ी टेबल बनाएं

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

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

बेहतर उदाहरण

मान लें कि हमारे पास पिछले उदाहरण की तरह ही इनपुट डेटा है, लेकिन अब इसमें सभी देशों का एग्रीगेट डेटा शामिल है:

date,country,age_group,disease_cases
01/2000,US,old,102030
01/2000,MX,old,192939
01/2000,total,old,152012
01/2000,US,young,23131
01/2000,MX,young,12311
01/2000,total,young,241011
02/2000,US,old,143135
02/2000,MX,old,203131
02/2000,total,old,211310
02/2000,US,young,22990
02/2000,MX,young,12591
02/2000,total,young,240131

हो सकता है कि हर उम्र समूह का देश, देश के मानों के योग से मेल न खाए. उदाहरण के लिए, मेथड में अंतर या दूसरे देशों की मौजूदगी का अंतर, जो सूची में शामिल नहीं है.

अब हम एक डीएसपीएल डेटासेट बनाना चाहते हैं, जिसमें ये अतिरिक्त सुविधाएं शामिल हैं:

  1. देशों को "रोल अप करें", ताकि हम सिर्फ़ उन आयु वर्ग के लोगों की पहचान कर सकें
  2. country कॉलम के लिए, कैननिकल geo:country कॉन्सेप्ट का इस्तेमाल करें, ताकि हमें इन नामों और जगहों के पूरे नाम अपने-आप मिल सकें
  3. disease_cases कॉन्सेप्ट को quantity:amount बढ़ाएं, ताकि हम एक्सएमएल फ़ाइल में, मैन्युअल तौर पर इकाई की जानकारी जोड़ सकें

ऐसा करने के लिए, हम इनपुट CSV की हेडर पंक्ति में इस तरह बदलाव करते हैं:

date,country[concept=geo:country;rollup=true;total_val=total],age_group,disease_cases[extends=quantity:amount]

टूल को फिर से चलाने पर, अब हमें एक और टेबल मिली है, जिसमें देश के हिसाब से अंतर हटाया गया है:

date,age_group,disease_cases
01/2000,old,152012
02/2000,old,211310
01/2000,young,241011
02/2000,young,240131

ध्यान दें कि अगर हम स्रोत टेबल में कुल मान और total_val टैग शामिल नहीं करते, तो हमें हर उम्र समूह के लिए कैलकुलेट किया गया योग मिलता.

इसके अलावा, एक्सएमएल फ़ाइल में disease_cases की परिभाषा में, अब ज़रूरत के मुताबिक quantity:amount का एक्सटेंशन भी शामिल है. country की परिभाषा को एक्सएमएल फ़ाइल से हटा दिया गया है, क्योंकि हम इसके लिए इंपोर्ट किए गए कॉन्सेप्ट का इस्तेमाल कर रहे हैं.

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