データソース Python ライブラリ

Google は、可視化によって使用できるように DataTable オブジェクトを作成する Python ライブラリをオープンソース化しています。このライブラリを使用すると、Python で DataTable を作成し、次の 3 つの形式のいずれかで出力できます。

  • JSON 文字列 -- データを使用する可視化をホストするページをホストする場合、DataTable コンストラクタに渡す JSON 文字列を生成してデータを入力できます。
  • JSON レスポンス -- ビジュアリゼーションをホストするページをホストせず、外部のビジュアリゼーションのデータソースとして機能する場合は、データ リクエストに応じて返される完全な JSON レスポンス文字列を作成します。
  • JavaScript 文字列 -- データテーブルは、 google.visualization.DataTable オブジェクトを Python テーブルで作成し、データを入力する数行の JavaScript コードで構成される文字列として出力できます。すると、この JavaScript をエンジン内で実行し、google.visualization.DataTable オブジェクトを生成してデータを入力できます。これは通常、デバッグにのみ使用されます。

このドキュメントは、基本的な Python プログラミングを理解していることを前提としています。また、ビジュアリゼーションの作成ビジュアリゼーションの使用の紹介のドキュメントも紹介しています。

目次

ライブラリの使用方法

基本的な手順は次のとおりです。

1. gviz_api.DataTable オブジェクトを作成する

上記のリンクから gviz_api.py ライブラリをインポートし、gviz_api.DataTable クラスをインスタンス化します。このクラスは、テーブル内のデータの形式を記述するテーブル スキーマと、テーブルに入力するためのオプションのデータの 2 つのパラメータを受け取ります。必要に応じて、後でデータを追加したり、データを完全に上書きしたりできますが、個々の行を削除することはできません。また、テーブル スキーマを消去することもできます。

2. テーブル スキーマを記述する

テーブル スキーマは、コンストラクタに渡される table_description パラメータで指定されます。後で変更することはできません。スキーマは、テーブル内のすべての列(各列のデータ型、ID、ラベル(省略可))を記述します。

各列はタプルで記述されます(ID [,data_type [,label ,custom_properties]])。

  • ID - 列の識別に使用される文字列 ID。スペースを含めることができます。各列の ID は一意でなければなりません。
  • data_type - [省略可] その列のデータの Python データ型の文字列記述子。サポートされているデータ型のリストについては、SingleValueToJS() メソッドをご覧ください。たとえば、「string」や「boolean」などです。 指定しない場合のデフォルトは「string」です。
  • label - 列のわかりやすい名前。ビジュアリゼーションの一部として表示されることがあります。指定しない場合は、ID 値が使用されます。
  • custom_properties - カスタム列プロパティの {String:String} 辞書。

テーブル スキーマは、列記述子のタプルのコレクションです。すべてのリストメンバー、辞書のキー、辞書の値は、別のコレクションか記述子のタプルでなければなりません。辞書やリストを自由に組み合わせることができますが、すべてのキー、値、メンバーは最終的に記述子タプルに評価する必要があります。次に例を示します。

  • 列のリスト: [('a', 'number'), ('b', 'string')]
  • リストの辞書: {('a', 'number'): [('b', 'number'), ('c', 'string')]}
  • 辞書の辞書: {('a', 'number'): {'b': 'number', 'c': 'string'}}
  • 同様に、あらゆるレベルのネストを行います。

3. データを入力する

テーブルにデータを追加するには、テーブル スキーマとまったく同じ構造のデータ要素の構造を作成します。たとえば、スキーマがリストの場合、データはリストである必要があります。

  • スキーマ: [("color", "string"), ("shape", "string")]
  • データ: [["blue", "square"][["red", "Circle"]]

スキーマが辞書の場合、データは辞書である必要があります。

  • スキーマ: {("rowname", "string"): [("color", "string"), ("shape", "string")] }
  • データ: {"row1": ["blue", "square"], "row2": ["red", "Circle"]}

表の 1 行は、対応するデータとスキーマのセクションです。たとえば、2 つの列からなるリストのスキーマが 2 つの行のデータに適用する方法は次のとおりです。

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")