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

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

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

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

कॉन्टेंट

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

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

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

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

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

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

हर कॉलम को यह जानकारी देकर बताया जाता है कि आईडी: (ID [,data_type [,label [,custom_property]]]).

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

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

  • कॉलम की सूची: [('a', 'number'), ('b', 'string')]
  • सूचियों का शब्दकोश: {('a', 'number'): [('b', 'number'), ['c', 'string')]}
  • शब्दकोशों का शब्दकोश: {('a', 'number'): {'b': 'number', 'c': 'string'}}
  • और आगे भी, नेस्टिंग के किसी भी स्तर के साथ.

3. अपने डेटा को पॉप्युलेट करना

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

  • schema: [("रंग", "स्ट्रिंग"), ("आकार", "स्ट्रिंग")]
  • डेटा: [["blue", "square"], ["red", "गोल"]]

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

  • schema: {("पंक्ति का नाम", "स्ट्रिंग"): [("रंग", "स्ट्रिंग"), ("आकार", "स्ट्रिंग")] }
  • डेटा: {"row1": ["blue", "square"], "row2": ["red", "गोल"]}

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

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

Table: 
      Color    Shape
      blue     square
      red      circle

ध्यान दें कि यहां डिक्शनरी बटन, कॉलम डेटा का आकलन करते हैं. आपको कोड में, AppendData() मेथड दस्तावेज़ में ज़्यादा कॉम्प्लेक्स उदाहरण दिखेंगे. इस तरह के कॉम्प्लेक्स नेस्टिंग की अनुमति देने के लिए, आपको अपनी ज़रूरत के मुताबिक, 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")