Thư viện Python nguồn dữ liệu

Google có một thư viện Python nguồn mở giúp 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 đó ở một trong 3 định dạng sau:

  • Chuỗi JSON – Nếu đang lưu trữ trang lưu trữ hình ảnh sử dụng dữ liệu của mình, thì bạn có thể tạo một chuỗi JSON để truyền vào hàm khởi tạo DataTable để điền hình ảnh đó.
  • 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 cho 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 có thể được trả về nhằm phản hồi một 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 để tạo và điền sẵn dữ liệu từ bảng Python vào đối tượng google.visualization.DataTable. 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. Tính năng này thường chỉ dùng để gỡ lỗi.

Tài liệu này giả định rằng bạn hiểu rõ về lập trình Python cơ bản, đồng thời đã đọc tài liệu về hình ảnh giới thiệu về cách tạo hình ảnh trực quansử dụng hình ảnh trực quan.

Nội dung

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

Dưới đây là các bước cơ bản, chi tiết hơ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 thực thể cho lớp gviz_api.DataTable. Lớp này sẽ nhận hai tham số: một giản đồ bảng sẽ 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 vào lúc khác nếu muốn hoặc ghi đè toàn bộ dữ liệu, nhưng không xoá từng hàng riêng lẻ hoặc xoá giản đồ bảng.

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

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

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

  • Mã nhận dạng – Mã nhận dạng chuỗi được dùng để xác định cột. Có thể bao gồm dấu cách. Mã nhận dạng cho mỗi cột phải là duy nhất.
  • data_type – [không bắt buộc] Phần mô tả chuỗi của loại dữ liệu Python của 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 được chỉ định, giá trị mặc định sẽ là "chuỗi".
  • label – Tên thân thiện với người dùng của cột, có thể xuất hiện dưới dạng một phần của hình ảnh trực quan. Nếu không được chỉ định, giá trị mã nhận dạng sẽ được sử dụng.
  • custom_properties – Từ điển {String:String} của các thuộc tính cột tùy chỉnh.

Giản đồ bảng là một tập hợp các bộ dữ liệu mô tả cột. Mọi thành phần của 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ộ mã 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 cuối cùng mọi khoá, giá trị hoặc thành phần đều phải đánh giá thành một bộ mô tả. Sau đây là một số ví dụ.

  • Danh sách các cột: [('a', 'number'), ('b', 'string')]
  • Dictionary of lists: {('a', 'number'): [('b', 'number'), ('c', 'string')]}
  • Dictionary of dictionaries: {('a', 'number'): {'b': 'number', 'c': 'string'}}
  • Và cứ tiếp tục như vậy, với bất kỳ mức độ lồng nhau 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 theo cấu trúc hoàn toàn giống như giản đồ bảng. Vì vậy, nếu giản đồ của bạn là một danh sách, dữ liệu phải là một danh sách:

  • giản đồ: [("color", "string"), ("hình dạng", "chuỗi")]
  • dữ liệu: [["màu xanh dương", "hình vuông"], ["màu đỏ", "vòng tròn"]]

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

  • schema: {("rowname", "string"): [("color", "string"), ("hình dạng", "string")] }
  • dữ liệu: {"row1": ["xanh dương", "hình vuông"], "row2": ["đỏ", "vòng tròn"]}

Một hàng trong bảng là một mục chứa dữ liệu và giản đồ tương ứng. Ví dụ: dưới đây là cách áp dụng giản đồ của danh sách hai cột cho 2 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á trong từ điển ở đây sẽ đánh giá dữ liệu 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 thức AttachData() trong đoạn mã. Mục đích của việc cho phép lồng ghép phức tạp như vậy là để bạn có thể sử dụng cấu trúc dữ liệu Python phù hợp với nhu cầu của mình.

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 và hỗ trợ nhiều định dạng đầu ra, 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ả giá trị phân tách bằng dấu phẩy, giá trị được phân tách bằng ký tự tab và JavaScript. JavaScript thường chỉ được dùng để gỡ lỗi. Hãy xem bài viết Triển khai nguồn dữ liệu để tìm hiểu cách xử lý yêu cầu nhằm lấy đị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 hoạ 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

Máy khách từ xa sử dụng JSonResponse trong một 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")