Thư viện Python Source Data

Google đã cung cấp một thư viện Python mã nguồn mở nhằm tạo các đối tượng DataTable để sử dụng bằng cách trực quan hoá. Bạn có thể dùng thư viện này để tạo DataTable bằng Python và xuất tệp ra ba định dạng sau:

  • Chuỗi JSON – Nếu đang lưu trữ trang lưu trữ hình ảnh trực quan sử dụng dữ liệu của mình, bạn có thể tạo một chuỗi JSON để chuyển vào một hàm khởi tạo DataTable để điền giá trị đó.
  • Phản hồi JSON – Nếu không lưu trữ trang lưu trữ hình ảnh trực quan và chỉ muốn đóng vai trò là nguồn dữ liệu để thể hiện hình ảnh bên ngoài, thì bạn có thể tạo một chuỗi phản hồi JSON hoàn chỉnh mà có thể được trả về trong yêu cầu dữ liệu.
  • Chuỗi JavaScript – Bạn có thể xuất bảng dữ liệu dưới dạng một chuỗi bao gồm một số dòng mã JavaScript sẽ tạo và điền đối tượng google.visualization.DataTable bằng dữ liệu từ bảng Python của bạn. Sau đó, bạn có thể chạy JavaScript này trong một công cụ để tạo và điền đối tượng google.visualization.DataTable. Lệnh này thường chỉ được dùng để gỡ lỗi.

Tài liệu này giả định rằng bạn đã nắm được cách lập trình Python cơ bản, đồng thời đã đọc tài liệu trực quan hoá về cách tạo hình ảnh để tạo hình ảnhdùng hình ảnh.

Nội dung

Cách sử dụng Thư viện

Sau đây là thông tin chi tiết hơn về các bước cơ bản:

1. Tạo đối tượng gviz_api.DataTable

Nhập thư viện gviz_api.py từ đường liên kết ở trên và tạo bản sao của lớp gviz_api.DataTable. Lớp này có 2 tham số: một giản đồ về bảng, trong đó mô tả định dạng của dữ liệu trong bảng và dữ liệu không bắt buộc để điền vào bảng. Bạn có thể thêm dữ liệu sau (nếu muốn) hoặc ghi đè hoàn toàn dữ liệu, nhưng không xoá từng hàng hoặc xoá giản đồ của bảng.

2. Mô tả giản đồ của bảng

Giản đồ về bảng được xác định bởi thông số table_description được chuyển vào hàm khởi tạo. Bạn không thể thay đổi tên này sau đó. Giản đồ mô tả tất cả các cột trong bảng: loại dữ liệu của từng cột, mã nhận dạng và nhãn không bắt buộc.

Mỗi cột được mô tả bằng một bộ dữ liệu: (ID [,data_type [,label [,custom_properties]]]).

  • Mã nhận dạng – Mã nhận dạng chuỗi dùng để xác định cột. Có thể chứa dấu cách. Mã cho mỗi cột phải là duy nhất.
  • data_type – [không bắt buộc] Chỉ số mô tả chuỗi của loại dữ liệu Python cho dữ liệu trong cột đó. Bạn có thể tìm thấy danh sách các loại dữ liệu được hỗ trợ trong phương thức SingleValueToJS(). Ví dụ: "string" và "boolean". Nếu không xác định thì giá trị mặc định sẽ là "chuỗi".
  • label – Tên thân thiện với người dùng cho cột, có thể hiển thị dưới dạng một phần của hình ảnh trực quan. Nếu bạn không chỉ định, hệ thống sẽ sử dụng giá trị mã nhận dạng.
  • custom_properties – Từ điển {String:String} của các thuộc tính cột tuỳ chỉnh.

Giản đồ về bảng là một tập hợp các bộ mô tả cột. Mỗi thành phần trong danh sách, khoá từ điển hoặc giá trị từ điển phải là một tập hợp khác hoặc một bộ dữ liệu mô tả. Bạn có thể sử dụng bất kỳ tổ hợp từ điển hoặc danh sách nào, nhưng mọi khoá, giá trị hoặc thành viên đều phải đánh giá một bộ dữ liệu mô tả. Dưới đây là một số ví dụ.

  • Danh sách cột: [('a', 'number'), ('b', 'string')]
  • Từ điển của các danh sách: {('a', 'number'): [('b', 'number'), ('c', 'string')]}
  • Từ điển từ điển: {('a', 'number'): {'b': 'number', 'c': 'string'}}
  • Và như vậy, với bất kỳ cấp độ lồng ghép nào.

3. Điền dữ liệu

Để thêm dữ liệu vào bảng, hãy xây dựng cấu trúc của các phần tử dữ liệu trong chính cấu trúc đó giống như giản đồ trong bảng. Vì vậy, ví dụ: nếu giản đồ của bạn là một danh sách, thì dữ liệu phải là danh sách:

  • giản đồ: [("color", "string"), ("shape", "string")]
  • dữ liệu: [["blue", "square"], ["red", "round"]]

Nếu giản đồ là từ điển, thì dữ liệu phải là từ điển:

  • schema: {("rowname", "string"): [("color", "string"), ("shape", "string")] }
  • dữ liệu: {"row1": ["blue", "square"], "row2": ["red", "round"]}

Một hàng trong bảng là một phần của dữ liệu và giản đồ tương ứng. Ví dụ: đây là cách áp dụng giản đồ của danh sách hai cột cho hai hàng dữ liệu.

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

Table: 
      Color    Shape
      blue     square
      red      circle

Xin lưu ý rằng các khoá từ điển ở đây sẽ đánh giá dữ liệu trong cột. Bạn có thể tìm thấy các ví dụ phức tạp hơn trong tài liệu về phương pháp appendData() trong mã. Mục đích của việc cho phép lồng ghép phức tạp như vậy là cho phép bạn sử dụng cấu trúc dữ liệu Python phù hợp với nhu cầu.

4. Xuất dữ liệu

Định dạng đầu ra phổ biến nhất là JSON, vì vậy bạn có thể sẽ sử dụng hàm ToJsonResponse() để tạo dữ liệu cần trả về. Tuy nhiên, nếu đang phân tích cú pháp yêu cầu nhập dữ liệu và hỗ trợ nhiều định dạng đầu ra khác, thì bạn có thể gọi bất kỳ phương thức đầu ra nào khác để trả về các định dạng khác, bao gồm cả các giá trị được phân tách bằng dấu phẩy, giá trị được phân cách bằng ký tự tab và JavaScript. JavaScript thường chỉ được dùng để gỡ lỗi. Hãy xem phần Triển khai nguồn dữ liệu để tìm hiểu cách xử lý yêu cầu để có được định dạng phản hồi ưu tiên.

Ví dụ về cách sử dụng

Dưới đây là một số ví dụ minh họa cách sử dụng nhiều định dạng đầu ra.

Ví dụ về ToJSon và 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()

Ví dụ về ToJSonResponse

JSonResponse được sử dụng bởi ứng dụng khách từ xa trong yêu cầu dữ liệu.

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