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

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

  • 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 つのパラメータを取ります。1 つはテーブル内のデータの形式を記述するテーブル スキーマで、もう 1 つはテーブルに追加するオプション データです。必要に応じて後でデータを追加できます。また、データを完全に上書きしても個々の行は削除できません。また、テーブル スキーマを消去することもできます。

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')]
  • Dictionary of lists: {('a', 'number'): [('b', 'number'), ('c', 'string')]}
  • Dictionary of dictionaries: {('a', 'number'): {'b': 'number', 'c': 'string'}}
  • どのレベルのネストでも同じように使用できます。

3. データを入力する

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

  • スキーマ: [("color", "string"), ("shape", "string")]
  • データ: [["青", "正方形"], ["赤", "円"]]

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

  • schema: {("rowname", "string"): [("color", "string"), ("shape", "string")] }
  • data: {"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")