डेटा सोर्स Python लाइब्रेरी

Google ने एक Python लाइब्रेरी को ओपन-सोर्स किया है, जो विज़ुअलाइज़ेशन में इस्तेमाल करने के लिए DataTable ऑब्जेक्ट बनाती है. इस लाइब्रेरी का इस्तेमाल Python में DataTable बनाने के लिए किया जा सकता है. साथ ही, इसे इन तीनों में से किसी भी फ़ॉर्मैट में तैयार किया जा सकता है:

  • JSON स्ट्रिंग -- अगर ऐसा पेज होस्ट किया जा रहा है जो आपके डेटा का इस्तेमाल करने वाले विज़ुअलाइज़ेशन को होस्ट करता है, तो DataTable कंस्ट्रक्टर में पास करने के लिए JSON स्ट्रिंग जनरेट की जा सकती है, ताकि आपके डेटा का इस्तेमाल किया जा सके.
  • JSON रिस्पॉन्स -- अगर विज़ुअलाइज़ेशन को होस्ट करने वाले पेज को होस्ट नहीं किया जाता और सिर्फ़ एक्सटर्नल विज़ुअलाइज़ेशन के लिए डेटा सोर्स के तौर पर काम करना है, तो JSON रिस्पॉन्स वाली पूरी स्ट्रिंग बनाई जा सकती है. यह JSON रिस्पॉन्स स्ट्रिंग, डेटा के अनुरोध के जवाब में दिखाई जा सकती है.
  • JavaScript स्ट्रिंग -- डेटा टेबल को एक ऐसी स्ट्रिंग के रूप में दिखाया जा सकता है जिसमें JavaScript कोड की कई लाइनें होती हैं. यह कोड, google.visualization.DataTable ऑब्जेक्ट बनाएगा और Python टेबल के डेटा से उसे भरेगा. इसके बाद, google.visualization.DataTable ऑब्जेक्ट को जनरेट करने और पॉप्युलेट करने के लिए, इस JavaScript को इंजन में चलाया जा सकता है. आम तौर पर, इसका इस्तेमाल सिर्फ़ डीबग करने के लिए किया जाता है.

इस दस्तावेज़ में यह माना गया है कि आपको Python प्रोग्रामिंग के बारे में जानकारी है. साथ ही, आपने विज़ुअलाइज़ेशन बनाने और विज़ुअलाइज़ेशन का इस्तेमाल करने के लिए, शुरुआती विज़ुअलाइज़ेशन दस्तावेज़ भी पढ़ लिए हैं.

विषय सूची

लाइब्रेरी का इस्तेमाल करने का तरीका

यहां बुनियादी चरणों के बारे में ज़्यादा जानकारी दी गई है:

1. gviz_api.DataTable ऑब्जेक्ट बनाएं

ऊपर दिए गए लिंक से gviz_api.py लाइब्रेरी इंपोर्ट करें और gviz_api.DataTable क्लास को इंस्टैंशिएट करें. क्लास में दो पैरामीटर इस्तेमाल होते हैं: टेबल स्कीमा, जो टेबल में मौजूद डेटा के फ़ॉर्मैट के बारे में बताएगा और टेबल में अपने-आप जानकारी भरने के लिए वैकल्पिक डेटा होगा. अगर आप चाहें, तो बाद में डेटा जोड़ा जा सकता है या उसे पूरी तरह से ओवरराइट किया जा सकता है. हालांकि, अलग-अलग पंक्तियां या टेबल स्कीमा को हटाया नहीं जा सकता.

2. अपने टेबल स्कीमा के बारे में बताएं

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

हर कॉलम के बारे में एक टपल के ज़रिए बताया गया है: (आईडी [,data_type [,label [,custom_property]]).

  • ID - स्ट्रिंग आईडी, जिसका इस्तेमाल कॉलम की पहचान करने के लिए किया जाता है. इसमें स्पेस शामिल किए जा सकते हैं. हर कॉलम का आईडी यूनीक होना चाहिए.
  • data_type - [ज़रूरी नहीं] उस कॉलम में डेटा के Python डेटा टाइप का स्ट्रिंग डिस्क्रिप्टर. SingleValueToJS() तरीके में इस्तेमाल किए जा सकने वाले डेटा टाइप की सूची देखी जा सकती है. उदाहरण के लिए, "string" और "बूलियन". अगर इसके बारे में तय नहीं किया गया है, तो डिफ़ॉल्ट फ़ाइल को "स्ट्रिंग" के तौर पर इस्तेमाल किया जाता है.
  • label - कॉलम के लिए उपयोगकर्ता के हिसाब से आसान नाम, जिसे विज़ुअलाइज़ेशन के हिस्से के तौर पर दिखाया जा सकता है. अगर इसके बारे में नहीं बताया गया है, तो आईडी की वैल्यू का इस्तेमाल किया जाता है.
  • custom_properties - कस्टम कॉलम प्रॉपर्टी का एक {String:String} डिक्शनरी.

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

  • कॉलम की सूची: [('a', 'number'), ('b', 'string')]
  • Dictionary of lists: {('a', 'number'): [('b', 'number'), ('c', 'string')]}
  • Dictionary of dictionaries: {('a', 'number'): {'b': 'number', 'c': 'string'}}
  • और इसलिए, चाहे किसी भी लेवल पर नेस्ट किए जाने पर ऐसा ही क्यों न हो.

3. अपना डेटा भरें

टेबल में डेटा जोड़ने के लिए, उसी स्ट्रक्चर में डेटा एलिमेंट का स्ट्रक्चर बनाएं जैसा टेबल स्कीमा में है. उदाहरण के लिए, अगर आपका स्कीमा एक सूची है, तो डेटा को एक सूची होना चाहिए:

  • स्कीमा: [("color", "string"), ("शेप", "स्ट्रिंग")]
  • डेटा: [["blue", "square"], ["red", "circle"]]

अगर स्कीमा एक डिक्शनरी है, तो डेटा एक डिक्शनरी होना चाहिए:

  • स्कीमा: {("rowname", "string"): [("color", "string"), ("shape", "string")] }
  • डेटा: {"row1": ["blue", "square"], "row2": ["red", "circle"]}

टेबल की एक पंक्ति, संबंधित डेटा और स्कीमा का एक सेक्शन होती है. उदाहरण के लिए, यहां बताया गया है कि दो कॉलम की सूची के स्कीमा को, डेटा की दो पंक्तियों पर कैसे लागू किया जाता है.

Schema:[(color),(shape)]
            /     \       
Data: [["blue", "square"], ["red", "circle"]]

Table: 
      Color    Shape
      blue     square
      red      circle

ध्यान दें कि यहां दी गई डिक्शनरी कुंजियां, कॉलम के डेटा का आकलन करती हैं. कोड में मौजूद अपेंड डेटा() तरीके के दस्तावेज़ में, ज़्यादा मुश्किल उदाहरण देखे जा सकते हैं. इस तरह के कॉम्प्लेक्स नेस्टिंग की अनुमति देने का मकसद, आपको अपनी ज़रूरतों के हिसाब से Python डेटा स्ट्रक्चर का इस्तेमाल करने देना है.

4. अपने डेटा का आउटपुट देना

सबसे सामान्य आउटपुट फ़ॉर्मैट JSON होता है. इसलिए, डेटा वापस पाने के लिए आपको ToJsonResponse() फ़ंक्शन का इस्तेमाल करना होगा. हालांकि, अगर इनपुट अनुरोध को पार्स किया जा रहा है और अलग-अलग आउटपुट फ़ॉर्मैट के साथ काम किया जा रहा है, तो दूसरे फ़ॉर्मैट में नतीजे दिखाने के लिए, किसी भी अन्य आउटपुट तरीके को कॉल किया जा सकता है. इनमें, कॉमा लगाकर अलग की गई वैल्यू, टैब से अलग की गई वैल्यू, और JavaScript शामिल हैं. आम तौर पर, JavaScript का इस्तेमाल सिर्फ़ डीबग करने के लिए किया जाता है. पसंदीदा रिस्पॉन्स फ़ॉर्मैट पाने के अनुरोध को प्रोसेस करने का तरीका जानने के लिए, डेटा सोर्स को लागू करना देखें.

इस्तेमाल करने के उदाहरण

यहां कुछ उदाहरण दिए गए हैं, जिनमें अलग-अलग तरह के आउटपुट फ़ॉर्मैट को इस्तेमाल करने का तरीका बताया गया है.

ToJSon और ToJS का उदाहरण

#!/usr/bin/python

import gviz_api

page_template = """
<html>
  <script src="https://www.gstatic.com/charts/loader.js"></script>
  <script>
    google.charts.load('current', {packages:['table']});

    google.charts.setOnLoadCallback(drawTable);
    function drawTable() {
      %(jscode)s
      var jscode_table = new google.visualization.Table(document.getElementById('table_div_jscode'));
      jscode_table.draw(jscode_data, {showRowNumber: true});

      var json_table = new google.visualization.Table(document.getElementById('table_div_json'));
      var json_data = new google.visualization.DataTable(%(json)s, 0.6);
      json_table.draw(json_data, {showRowNumber: true});
    }
  </script>
  <body>
    <H1>Table created using ToJSCode</H1>
    <div id="table_div_jscode"></div>
    <H1>Table created using ToJSon</H1>
    <div id="table_div_json"></div>
  </body>
</html>
"""

def main():
  # Creating the data
  description = {"name": ("string", "Name"),
                 "salary": ("number", "Salary"),
                 "full_time": ("boolean", "Full Time Employee")}
  data = [{"name": "Mike", "salary": (10000, "$10,000"), "full_time": True},
          {"name": "Jim", "salary": (800, "$800"), "full_time": False},
          {"name": "Alice", "salary": (12500, "$12,500"), "full_time": True},
          {"name": "Bob", "salary": (7000, "$7,000"), "full_time": True}]

  # Loading it into gviz_api.DataTable
  data_table = gviz_api.DataTable(description)
  data_table.LoadData(data)

  # Create a JavaScript code string.
  jscode = data_table.ToJSCode("jscode_data",
                               columns_order=("name", "salary", "full_time"),
                               order_by="salary")
  # Create a JSON string.
  json = data_table.ToJSon(columns_order=("name", "salary", "full_time"),
                           order_by="salary")

  # Put the JS code and JSON string into the template.
  print "Content-type: text/html"
  print
  print page_template % vars()


if __name__ == '__main__':
  main()

ToJSonResponse का उदाहरण

JSonResponse का इस्तेमाल, रिमोट क्लाइंट किसी डेटा अनुरोध में करता है.

#!/usr/bin/python

import gviz_api

description = {"name": ("string", "Name"),
               "salary": ("number", "Salary"),
               "full_time": ("boolean", "Full Time Employee")}
data = [{"name": "Mike", "salary": (10000, "$10,000"), "full_time": True},
        {"name": "Jim", "salary": (800, "$800"), "full_time": False},
        {"name": "Alice", "salary": (12500, "$12,500"), "full_time": True},
        {"name": "Bob", "salary": (7000, "$7,000"), "full_time": True}]

data_table = gviz_api.DataTable(description)
data_table.LoadData(data)
print "Content-type: text/plain"
print
print data_table.ToJSonResponse(columns_order=("name", "salary", "full_time"),
                                order_by="salary")