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ượnggoogle.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 ảnh và dù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")