Python-Bibliothek der Datenquelle

Google hat eine Python-Bibliothek als Open Source zur Verfügung gestellt, die DataTable-Objekte zur Visualisierung erstellt. Mit dieser Bibliothek kann ein DataTable in Python erstellt und in einem von drei Formaten ausgegeben werden:

  • JSON-String : Wenn du die Seite hostest, die die Visualisierung mit deinen Daten hostet, kannst du einen JSON-String generieren, der an einen DataTable-Konstruktor übergeben wird.
  • JSON-Antwort : Wenn Sie die Seite, auf der die Visualisierung gehostet wird, nicht selbst hosten und nur als Datenquelle für externe Visualisierungen dienen möchten, können Sie einen vollständigen JSON-Antwortstring erstellen, der als Antwort auf eine Datenanfrage zurückgegeben werden kann.
  • JavaScript-String: Sie können die Datentabelle als String ausgeben, der aus mehreren Zeilen JavaScript-Code besteht. Damit wird ein google.visualization.DataTable-Objekt erstellt und mit den Daten aus Ihrer Python-Tabelle gefüllt. Sie können diesen JavaScript-Code dann in einer Suchmaschine ausführen, um das google.visualization.DataTable-Objekt zu generieren und mit Daten zu füllen. Dies wird normalerweise nur zur Fehlerbehebung verwendet.

In diesem Dokument wird davon ausgegangen, dass Sie die Grundlagen der Python-Programmierung beherrschen und die einführende Dokumentation zur Visualisierung zum Erstellen einer Visualisierung und zum Verwenden einer Visualisierung gelesen haben.

Inhalt

Mediathek verwenden

Hier sind die grundlegenden Schritte im Detail:

1. gviz_api.DataTable-Objekt erstellen

Importieren Sie die Bibliothek gviz_api.py aus dem obigen Link und instanziieren Sie die Klasse gviz_api.DataTable. Die Klasse verwendet zwei Parameter: ein Tabellenschema, das das Format der Daten in der Tabelle beschreibt, und optionale Daten zum Füllen der Tabelle. Sie können bei Bedarf später Daten hinzufügen oder die Daten vollständig überschreiben, aber keine einzelnen Zeilen entfernen oder das Tabellenschema löschen.

2. Tabellenschema beschreiben

Das Tabellenschema wird durch den Parameter table_description angegeben, der an den Konstruktor übergeben wird. Sie können dies später nicht mehr ändern. Das Schema beschreibt alle Spalten in der Tabelle: den Datentyp jeder Spalte, die ID und ein optionales Label.

Jede Spalte wird durch ein Tupel beschrieben: (ID [,Datentyp [,Label [,benutzerdefinierte_Eigenschaften]]]).

  • ID: Eine String-ID zur Identifizierung der Spalte. Kann Leerzeichen enthalten. Die ID muss für jede Spalte eindeutig sein.
  • data_type: [optional] Ein Stringdeskriptor des Python-Datentyps der Daten in dieser Spalte. Eine Liste der unterstützten Datentypen finden Sie in der SingleValueToJS()-Methode. Beispiele sind „string“ und „boolean“. Wenn keine Angabe erfolgt, wird der Standardwert „string“ verwendet.
  • label – Ein nutzerfreundlicher Name für die Spalte, der als Teil der Visualisierung angezeigt werden kann. Wenn keine Angabe erfolgt, wird der ID-Wert verwendet.
  • custom_properties – Ein {String:String}-Wörterbuch mit Attributen benutzerdefinierter Spalten.

Das Tabellenschema ist eine Sammlung von Spaltendeskriptor-Tupeln. Jedes Listenmitglied, jeder Wörterbuchschlüssel oder jeder Wörterbuchwert muss entweder eine andere Sammlung oder ein Deskriptor-Tupel sein. Sie können eine beliebige Kombination aus Wörterbüchern oder Listen verwenden, aber jeder Schlüssel, Wert oder Mitglied muss letztendlich ein Deskriptor-Tupel ergeben. Hier sind einige Beispiele.

  • Liste der Spalten: [('a', 'number'), ('b', 'string')]
  • Dictionary of lists: {('a', 'number'): [('b', 'number'), ('c', 'string')]}
  • Dictionary of dictionaries: {('a', 'number'): {'b': 'number', 'c': 'string'}}
  • Und so weiter, egal auf welcher Verschachtelungsebene.

3. Daten einfügen

Erstellen Sie eine Struktur von Datenelementen, die genau dieselbe Struktur wie das Tabellenschema hat, um der Tabelle Daten hinzuzufügen. Wenn Ihr Schema beispielsweise eine Liste ist, müssen die Daten eine Liste sein:

  • Schema: [("color", "string"), ("shape", "string")]
  • Daten: [["blue", "square"], ["rot", "Kreis"]]

Wenn das Schema ein Wörterbuch ist, müssen die Daten ein Wörterbuch sein:

  • schema: {("rowname", "string"): [("color", "string"), ("shape", "string")] }
  • data: {"row1": ["blue", "square"], "row2": ["rot", "Kreis"]}

Eine Tabellenzeile ist ein Abschnitt mit entsprechenden Daten und Schema. Hier sehen Sie beispielsweise, wie ein Schema aus einer Liste von zwei Spalten auf zwei Datenzeilen angewendet wird.

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

Table: 
      Color    Shape
      blue     square
      red      circle

Die Wörterbuchschlüssel hier werden als Spaltendaten ausgewertet. Komplexere Beispiele finden Sie in der Dokumentation zur Methode AppendData() im Code. Der Zweck einer so komplexen Verschachtelung besteht darin, dass Sie eine Python-Datenstruktur verwenden können, die Ihren Anforderungen entspricht.

4. Daten ausgeben

Das gängigste Ausgabeformat ist JSON. Daher werden Sie wahrscheinlich die ToJsonResponse()-Funktion verwenden, um die zurückzugebenden Daten zu erstellen. Wenn Sie jedoch die Eingabeanfrage parsen und andere Ausgabeformate unterstützen, können Sie eine der anderen Ausgabemethoden aufrufen, um andere Formate zurückzugeben, einschließlich kommagetrennter Werte, tabulatorgetrennte Werte und JavaScript. JavaScript wird normalerweise nur zur Fehlerbehebung verwendet. Unter Datenquelle implementieren erfahren Sie, wie Sie eine Anfrage verarbeiten, um das bevorzugte Antwortformat zu erhalten.

Verwendungsbeispiel

Hier sind einige Beispiele, die die Verwendung der verschiedenen Ausgabeformate veranschaulichen.

Beispiel für ToJSon und 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()

Beispiel für ToJSonResponse

JSonResponse wird von einem Remote-Client in einer Datenanfrage verwendet.

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