資料來源 Python 程式庫

Google 具有開放原始碼的 Python 程式庫,可建立視覺化物件供 DataTable 使用。此程式庫可用來在 Python 中建立 DataTable,並以下列三種格式輸出:

  • JSON 字串:如果您的代管網頁代管使用您資料的視覺化圖表,則可產生 JSON 字串,並傳入 DataTable 建構函式來填入資料。
  • JSON 回應 -- 如果您並未代管代管視覺化的網頁,而只想當做外部視覺化的資料來源,則可建立完整的 JSON 回應字串,以回應資料要求。
  • 「JavaScript 字串」:您可以將資料表輸出為字串,由多行 JavaScript 程式碼組成,可用來建立 Python 資料表中的資料,並填入 google.visualization.DataTable 物件。接著,您可以在引擎中執行這個 JavaScript 以產生並填入 google.visualization.DataTable 物件。這通常僅用於偵錯。

本文假設您已熟悉基本的 Python 程式設計,並已閱讀視覺化圖表使用視覺化內容的簡介視覺化說明文件。

目錄

如何使用程式庫

以下是一些基本步驟:

1. 建立 gviz_api.DataTable 物件

從上方連結匯入 gviz_api.py 程式庫並對 gviz_api.DataTable 類別執行個體化。該類別採用兩個參數:資料表結構定義,用於說明資料表中的資料格式,以及可填入資料表的選用資料。您日後可以新增資料,也可以完全覆寫或完全覆寫資料,但不會移除個別資料列或清除資料表結構定義。

2. 說明資料表結構定義

資料表結構定義由傳送至建構函式的 table_description 參數指定。設定後即無法變更。結構定義說明資料表中的所有資料欄:每個資料欄的資料類型、ID 和選用的標籤。

每一欄都以元組描述:(ID [,data_type [,label [,custom_properties]]])。

  • ID - 用來識別字串的字串 ID。可包含空格。 每一欄的 ID 不得重複。
  • data_type - [選用] 資料欄所含資料之 Python 資料類型的字串描述元。您可以在 SingleValueToJS() 方法中找到支援的資料類型清單。例如「string」和「布林值」。 如未指定,則預設值為「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")] }
  • data: ""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")