Veri Kaynağı Python Kitaplığı

Google, görselleştirmelerle tüketilmek üzere DataTable nesneleri oluşturan bir Python kitaplığını açık kaynaklı hale getirmiştir. Bu kitaplık, Python'da DataTable oluşturup üç biçimden birinde oluşturmak için kullanılabilir:

  • JSON dizesi -- Verilerinizi kullanan görselleştirmeyi barındıran sayfayı barındırıyorsanız doldurmak için bir DataTable oluşturucuya iletecek bir JSON dizesi oluşturabilirsiniz.
  • JSON yanıtı -- Görselleştirmeyi barındıran sayfayı barındırmıyorsanız ve yalnızca harici görselleştirmeler için veri kaynağı olarak çalışmak istiyorsanız bir veri isteğine yanıt olarak döndürülebilecek tam bir JSON yanıt dizesi oluşturabilirsiniz.
  • JavaScript dizesi -- Veri tablosunu, google.visualization.DataTable nesnesini Python tablonuzdaki verilerle oluşturacak şekilde, birkaç JavaScript kodu satırından oluşan bir dize olarak üretebilirsiniz. Daha sonra google.visualization.DataTable nesnesini oluşturmak ve doldurmak için bu JavaScript'i bir motorda çalıştırabilirsiniz. Bu genellikle yalnızca hata ayıklama için kullanılır.

Bu belgede, temel Python programlamayı anladığınız ve görselleştirme ve görselleştirme için tanıtım görselleştirmesi belgelerini okuduğunuz varsayılmaktadır.

İçindekiler

Kitaplık'ı kullanma

Temel adımlar daha ayrıntılı olarak aşağıda verilmiştir:

1. gviz_api.DataTable nesnesi oluşturma

Yukarıdaki bağlantıdan gviz_api.py kitaplığını içe aktarın ve gviz_api.DataTable sınıfını oluşturun. Sınıf iki parametre alır: Tablodaki verilerin biçimini açıklayan tablo şeması ve tablonun doldurulacağı isteğe bağlı veriler. İsterseniz daha sonra veri ekleyebilir veya verilerin tamamen üzerine yazar, ancak tek tek satırları kaldırmaz veya tablo şemasını temizlemez.

2. Tablo şemanızı açıklayın

Tablo şeması, oluşturucuya iletilen table_description parametresiyle belirtilir. Bunu daha sonra değiştiremezsiniz. Tablo, tablodaki tüm sütunları açıklar: Her bir sütunun veri türü, kimlik ve isteğe bağlı bir etiket.

Her sütun bir tül ile tanımlanır: (No [,data_type [,etiket [,custom_property]]]).

  • Kimlik: Sütunu tanımlamak için kullanılan dize kimliği. Boşluk içerebilir. Her sütunun kimliği benzersiz olmalıdır.
  • data_type - [isteğe bağlı] Bu sütundaki verilerin Python veri türünün dize tanımlayıcısı. Desteklenen veri türlerinin listesini SingleValueToJS() yönteminde bulabilirsiniz. Buna örnek olarak "string" ve "boole" verilebilir. Belirtilmezse varsayılan olarak "dize" değeri kullanılır.
  • label - Sütunun, görselleştirmenin bir parçası olarak görüntülenebilecek, kullanıcı dostu bir adı. Belirtilmemesi durumunda kimlik değeri kullanılır.
  • custom_propertys: Özel sütun özelliklerinin bir {String:String} sözlüğü.

Tablo şeması, sütun açıklayıcı üçlülerinin bir koleksiyonudur. Her liste üyesi, sözlük anahtarı veya sözlük değeri başka bir koleksiyon ya da açıklayıcı bir unsur olabilir. Herhangi bir sözlük veya liste kombinasyonunu kullanabilirsiniz. Ancak her anahtar, değer veya üyenin sonuçta açıklayıcı bir unsur olduğunu değerlendirmesi gerekir. Aşağıda birkaç örnek verilmiştir.

  • Sütun listesi: [('a', 'number'), ('b', 'string')]
  • Sözlük listesi: {('a', 'number'): [('b', 'number'), ('c', 'string')]}
  • Sözlük sözlükleri: {('a', 'number'): {'b': 'number', 'c': 'string'}}
  • Bu, bu şekilde devam ediyor.

3. Verilerinizi doldurma

Tabloya veri eklemek için tablo şemasıyla aynı yapıda bir veri öğeleri yapısı oluşturun. Örneğin, şemanız liste ise veriler liste olmalıdır:

  • şema: [("renk", "dize") ("şekil", "dize")]
  • veri: [["mavi", "kare"], ["kırmızı", "daire"]]

Şema bir sözlükse veriler bir sözlük olmalıdır:

  • schema: {("satıradı", "dize"): [("renk", "dize") ("şekil", "dize")] }
  • veri: {"row1": ["mavi", "kare"], "satır2": ["kırmızı", "daire"]}

Bir tablo satırı, karşılık gelen verilerin ve şemanın bir bölümüdür. Örneğin, iki sütunlu bir listenin şemasının iki veri satırına nasıl uygulandığını burada görebilirsiniz.

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

Table: 
      Color    Shape
      blue     square
      red      circle

Buradaki sözlük anahtarlarının sütun verilerini değerlendirdiğini unutmayın. Koddaki RestrictData() yöntemi dokümanlarında daha karmaşık örnekler bulabilirsiniz. Bu tür karmaşık iç içe yerleştirmenin amacı, ihtiyaçlarınıza uygun bir Python veri yapısı kullanmanıza olanak tanımaktır.

4. Verilerinizi çıkarın

En yaygın çıkış biçimi JSON'dir. Döndürülecek verileri oluşturmak için muhtemelen ToJsonResponse() işlevini kullanırsınız. Bununla birlikte, giriş isteğini ayrıştırıyor ve farklı çıkış biçimlerini destekliyorsanız virgülle ayrılmış değerler, sekmeyle ayrılmış değerler ve JavaScript gibi diğer biçimleri döndürmek için diğer çıkış yöntemlerinden herhangi birini çağırabilirsiniz. JavaScript genellikle yalnızca hata ayıklama için kullanılır. Tercih edilen yanıt biçimini almaya yönelik bir isteği nasıl işleyeceğinizi öğrenmek için Veri Kaynağı Uygulama konusuna bakın.

Örnek Kullanım

Çeşitli çıkış biçimlerinin nasıl kullanılacağını gösteren bazı örnekler aşağıda verilmiştir.

ToJSon ve ToJS Örneği

#!/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 Örneği

JSonResponse, bir veri isteğinde uzak istemci tarafından kullanılır.

#!/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")