Biblioteka Pythona źródła danych

Google udostępnia bibliotekę open source Pythona, która tworzy obiekty DataTable do wykorzystania przez wizualizacje. Tej biblioteki można użyć do utworzenia DataTable w języku Python i wyświetlić ją w dowolnym z trzech formatów:

  • Ciąg znaków JSON – jeśli hostujesz stronę, która hostuje wizualizację korzystającą z Twoich danych, możesz wygenerować ciąg JSON w konstruktorze DataTable, aby go wypełnić.
  • Odpowiedź JSON – jeśli nie hostujesz strony hostującej wizualizację i chcesz działać jako źródło danych na potrzeby wizualizacji zewnętrznych, możesz utworzyć pełny ciąg odpowiedzi JSON, który zostanie zwrócony w odpowiedzi na żądanie danych.
  • Ciąg znaków JavaScript – możesz wyświetlić tabelę danych jako ciąg znaków składający się z kilku wierszy kodu JavaScript, który utworzy obiekt google.visualization.DataTable i uzupełni go danymi z tabeli Pythona. Możesz go uruchomić w wyszukiwarce, aby wygenerować i wypełnić obiekt google.visualization.DataTable. Zwykle jest on używany tylko do debugowania.

W tym dokumencie zakładamy, że znasz podstawowe programowanie w języku Python i że znasz wstępną dokumentację wizualizacji na temat tworzenia wizualizacji i korzystania z wizualizacji.

Spis treści

Jak korzystać z biblioteki

Poniżej znajdziesz szczegółowe czynności, które możesz wykonać:

1. Tworzenie obiektu gviz_api.DataTable

Zaimportuj bibliotekę gviz_api.py z linku powyżej i utwórz wystąpienie klasy gviz_api.DataTable. Klasa przyjmuje 2 parametry: schemat tabeli opisujący format danych w tabeli i opcjonalne dane do wypełnienia tabeli. Jeśli chcesz, możesz dodać dane później, całkowicie je zastąpić, ale nie usuwać pojedynczych wierszy ani wyczyścić schematu tabeli.

2. Opisz schemat tabeli

Schemat tabeli jest określony przez parametr table_description przekazywany do konstruktora. Nie możesz go później zmienić. Schemat opisuje wszystkie kolumny w tabeli: typ danych każdej kolumny, identyfikator i opcjonalną etykietę.

Każda kolumna jest opisana kropką: (ID [,data_type [,label [,custom_property]]]).

  • Identyfikator – identyfikator ciągu znaków używany do identyfikacji kolumny. Może zawierać spacje. Identyfikator każdej kolumny musi być unikalny.
  • typ_danych – [opcjonalny] deskryptor typu danych w Pythonie z danych w tej kolumnie. Listę obsługiwanych typów danych znajdziesz w metodzie SingleValueToJS(). Przykłady obejmują „ciąg znaków” i „wartość logiczną”. Jeśli nie określisz tego ustawienia, zostanie użyte ustawienie domyślne „string”.
  • label – przyjazna dla użytkownika nazwa kolumny, która może być wyświetlana w ramach wizualizacji. Jeśli jej nie określisz, użyjemy wartości identyfikatora.
  • custom_property – słownik {String:String} z właściwościami kolumny niestandardowej.

Schemat tabeli jest zbiorem kropek deskryptora kolumny. Każdy element listy, klucz słownikowy lub jego wartość musi być inną kolekcją lub kropką deskryptora. Możesz używać dowolnej kombinacji słowników i list, ale każdy klucz, wartość lub członek musi ostatecznie ocenić kropkę deskryptora. Oto przykłady.

  • Lista kolumn: [('a', 'number'), ('b', 'string')]
  • Słownik list: {('a', 'number'): [('b', 'number'), ('c', 'string')]}
  • Słownik słowników: {('a', 'number'): {'b': 'number', 'c': 'string'}}
  • I tak dalej, niezależnie od etapu zagnieżdżania.

3. Zapełnianie danych

Aby dodać dane do tabeli, utwórz strukturę elementów danych dokładnie w tej samej strukturze co schemat tabeli. Jeśli na przykład schemat jest listą, dane muszą być listą:

  • schemat: [("kolor", "ciąg"), ("kształt", "ciąg")]
  • dane: [["blue", "square"], ["czerwony", "koło"]]

Jeśli schemat jest słownikiem, dane muszą być słownikiem:

  • schemat: {("rowname", "string"): [("color", "string"), ("shape", "string")] }
  • dane: {"wiersz1": ["niebieski", "kwadratowy]], "wiersz2": ["czerwony", "koło"]}

Jeden wiersz tabeli to sekcja odpowiednich danych i schematu. Oto przykład zastosowania schematu listy 2 kolumn do 2 wierszy danych.

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

Table: 
      Color    Shape
      blue     square
      red      circle

Zwróć uwagę, że klucze słownikowe analizują dane kolumn. Bardziej złożone przykłady znajdziesz w dokumentacji metody AttachData() w kodzie. Pozwalając na tak złożone zagnieżdżenie, możesz użyć struktury danych Pythona odpowiadającej Twoim potrzebom.

4. Przesyłanie danych

Najpopularniejszy format wyjściowy to JSON, więc dane prawdopodobnie zostaną zwrócone za pomocą funkcji ToJsonResponse(). Jeśli jednak analizujesz żądanie i obsługujesz różne formaty wyjściowe, możesz wywołać dowolną z nich, by wyświetlić inne formaty, w tym wartości rozdzielane przecinkami, wartości rozdzielane tabulatorami lub kod JavaScript. JavaScript jest zwykle używany tylko do debugowania. Informacje o przetwarzaniu żądań w celu uzyskania preferowanego formatu odpowiedzi znajdziesz w artykule Implementowanie źródła danych.

Przykładowe zastosowanie

Oto przykłady, które pokazują, jak używać różnych formatów wyjściowych.

Przykład ToJSon i 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()

Przykład ToJSonResponse

JSonResponse jest używany przez klienta zdalnego w żądaniu danych.

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