Biblioteka Pythona źródła danych

Google udostępnia bibliotekę Pythona na licencji open source, która tworzy obiekty DataTable do wykorzystania przez wizualizacje. Tej biblioteki można użyć do utworzenia obiektu DataTable w Pythonie i wyświetlić go w dowolnym z 3 formatów:

  • Ciąg znaków JSON – jeśli hostujesz stronę hostującą wizualizację wykorzystującą Twoje dane, możesz wygenerować ciąg JSON, aby przekazać go do konstruktora DataTable w celu jego wypełnienia.
  • Odpowiedź JSON – jeśli nie hostujesz strony hostującej wizualizację i chcesz tylko działać jako źródło danych na potrzeby zewnętrznych wizualizacji, możesz utworzyć pełny ciąg znaków odpowiedzi JSON, który może być zwracany w odpowiedzi na żądanie danych.
  • Ciąg 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 wypełnia go danymi z tabeli w Pythonie. Następnie możesz uruchomić ten kod JavaScript 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 podstawy programowania w Pythonie i znasz wstępną dokumentację wizualizacji na temat tworzenia wizualizacji i korzystania z niej.

Spis treści

Jak korzystać z Biblioteki

Oto podstawowe kroki:

1. Utwórz obiekt gviz_api.DataTable

Zaimportuj bibliotekę gviz_api.py z linku powyżej i utwórz instancję klasy gviz_api.DataTable. Klasa przyjmuje 2 parametry: schemat tabeli, który opisuje format danych w tabeli, i opcjonalne dane, którymi zostanie wypełniona tabela. Jeśli chcesz, możesz później dodać dane lub całkowicie je zastąpić, ale nie usunąć poszczególnych wierszy lub wyczyścić schemat tabeli.

2. Opisz schemat tabeli

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

Każda kolumna jest opisana krotką: (identyfikator [,data_type [,label [,custom_properties]]]).

  • Identyfikator – identyfikator ciągu znaków używany do identyfikowania kolumny. Może zawierać spacje. Każda kolumna musi mieć unikalny identyfikator.
  • data_type – [opcjonalny] deskryptor ciągu znaków reprezentujący typ danych w Pythonie zawierający dane w tej kolumnie. Listę obsługiwanych typów danych znajdziesz w metodzie SingleValueToJS(). Przykłady to „string” i „boolean” (wartość logiczna). Jeśli nie podasz żadnej wartości, domyślną wartością będzie „ciąg znaków”.
  • label – przyjazna dla użytkownika nazwa kolumny, która może być wyświetlana w ramach wizualizacji. Jeśli nie podasz żadnej wartości, zostanie użyta wartość ID.
  • custom_properties – słownik {String:String} właściwości kolumn niestandardowych.

Schemat tabeli to zbiór krotek deskryptora kolumn. Każdy element listy, klucz słownika lub wartość słownika musi być inną kolekcją albo krotką deskryptora. Możesz używać dowolnej kombinacji słowników lub list, ale każdy klucz, wartość i element muszą ostatecznie zostać przekształcone w krotkę deskryptora. Oto kilka przykładów.

  • Lista kolumn: [('a', 'liczba'), ('b', 'ciąg znaków')]
  • Dictionary of lists: {('a', 'number'): [('b', 'number'), ('c', 'string')]}
  • Dictionary of dictionaries: {('a', 'number'): {'b': 'number', 'c': 'string'}}
  • I tak dalej, niezależnie od poziomu zagnieżdżenia.

3. Wypełnij dane

Aby dodać dane do tabeli, utwórz strukturę elementów danych dokładnie w takiej samej strukturze jak schemat tabeli. Jeśli więc schemat jest listą, dane muszą mieć postać:

  • schemat: [("kolor", "ciąg znaków"), ("kształt", "ciąg znaków")]
  • dane: [["niebieski", "kwadratowy"], ["czerwony", "okrąg"]]

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

  • schemat: {("nazwa_wiersza", "ciąg znaków"): [("kolor", "ciąg znaków"), ("kształt", "ciąg znaków")] }
  • dane: {"wiersz1": ["blue", "square"], "wiersz2": ["czerwony", "okrąg"]}

1 wiersz tabeli to sekcja odpowiednich danych i schematu. Poniżej pokazujemy na przykład, jak schemat listy złożonej z 2 kolumn jest stosowany do 2 wierszy danych.

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

Table: 
      Color    Shape
      blue     square
      red      circle

Pamiętaj, że klucze słownika oceniają dane w kolumnach. Bardziej złożone przykłady znajdziesz w dokumentacji metody AppendData() w kodzie. Dzięki temu możliwe jest użycie struktury danych w Pythonie odpowiadającej Twoim potrzebom.

4. Prześlij dane

Najpopularniejszym formatem wyjściowym jest JSON, więc do utworzenia danych do zwrócenia prawdopodobnie użyjesz funkcji ToJsonResponse(). Jeśli jednak analizujesz żądanie wejściowe i obsługujesz różne formaty danych wyjściowych, możesz wywołać dowolną z tych metod, aby zwrócić inne formaty, takie jak wartości rozdzielane przecinkami, wartości rozdzielane tabulatorami czy kod JavaScript. JavaScript jest zwykle używany tylko do debugowania. Informacje o tym, jak przetworzyć żądanie, aby uzyskać preferowany format odpowiedzi, znajdziesz w sekcji Implementowanie źródła danych.

Przykład użycia

Oto kilka przykładów korzystania z 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")