Python-Datenquellenbibliothek

Google hat eine Python-Bibliothek als Open-Source-Bibliothek zur Verfügung gestellt, die DataTable-Objekte für die Verwendung durch Visualisierungen erstellt. Diese Bibliothek kann verwendet werden, um eine DataTable in Python zu erstellen und sie in einem der drei Formate auszugeben:

  • JSON-String: Wenn du die Seite hosten möchtest, auf der die Visualisierung deiner Daten gehostet wird, kannst du einen JSON-String generieren, um ihn an einen DataTable-Konstruktor zu übergeben.
  • JSON-Antwort: Wenn Sie die Seite, die die Visualisierung hostet, nicht hosten und einfach als Datenquelle für externe Visualisierungen fungieren 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 von JavaScript-Code besteht, wodurch ein google.visualization.DataTable-Objekt erstellt und mit den Daten aus Ihrer Python-Tabelle ausgefüllt wird. Sie können diesen JavaScript-Code dann in einer Suchmaschine ausführen, um das Objekt google.visualization.DataTable zu generieren und auszufüllen. Dies wird in der Regel nur zur Fehlerbehebung verwendet.

In diesem Dokument wird davon ausgegangen, dass Sie mit den grundlegenden Python-Programmierung vertraut sind und die einführende Visualisierungsdokumentation zum Erstellen einer Visualisierung und zum Verwenden einer Visualisierung gelesen haben.

Inhalt

Bibliothek verwenden

Hier 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, mit denen die Tabelle gefüllt wird. Wenn Sie möchten, können Sie 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 sie 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 [,data_type [,label [,custom_properties]]).

  • ID: Eine String-ID, die zum Identifizieren der Spalte verwendet wird. Kann Leerzeichen enthalten. Die ID für jede Spalte muss 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 Methode SingleValueToJS(). Beispiele hierfür sind „string“ und „boolean“. Wenn keine Angabe erfolgt, lautet der Standardwert „string“.
  • label – Ein benutzerfreundlicher Name für die Spalte, der im Rahmen der Visualisierung angezeigt werden kann. Wenn nicht angegeben, wird der ID-Wert verwendet.
  • custom_properties – Ein {String:String}-Wörterbuch der benutzerdefinierten Spaltenattribute.

Das Tabellenschema ist eine Sammlung von Tupeln mit Spaltendeskriptoren. 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. Allerdings muss jeder Schlüssel, jeder Wert oder jedes Mitglied letztendlich ein Deskriptor-Tupel auswerten. Hier einige Beispiele:

  • Liste der Spalten: [('a', 'number'), ('b', 'string')]
  • Wörterbuch der Listen: {('a', 'number'): [('b', 'number'), ('c', 'string')]}
  • Wörterbuch von Wörterbüchern: {('a', 'number'): {'b': 'number', 'c': 'string'}}
  • Und so weiter – mit beliebigen Verschachtelungsebenen.

3. Daten ausfüllen

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

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

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

  • Schema: {("rowname", "string"): [("color", "string"), ("shape", "string")] }
  • Daten: {"row1": ["blue", "square"], "row2": ["red", "Kreis"]}

Eine Tabellenzeile enthält die entsprechenden Daten und Schemas. Hier sehen Sie beispielsweise, wie ein Schema aus zwei Spalten auf zwei Datenzeilen angewendet wird.

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

Table: 
      Color    Shape
      blue     square
      red      circle

Beachten Sie, dass die Wörterbuchschlüssel hier Spaltendaten auswerten. Komplexere Beispiele finden Sie in der Dokumentation zur Methode „AppendData()“ im Code. Wenn Sie solche komplexen Verschachtelungen zulassen möchten, können Sie eine Python-Datenstruktur verwenden, die Ihren Anforderungen entspricht.

4. Daten ausgeben

Das gängigste Ausgabeformat ist JSON. Daher erstellen Sie mit der Funktion ToJsonResponse() wahrscheinlich die zurückzugebenden Daten. Wenn Sie jedoch die Eingabeanfrage parsen und verschiedene Ausgabeformate unterstützen, können Sie eine der anderen Ausgabemethoden aufrufen, um andere Formate zurückzugeben, einschließlich durch Kommas getrennter Werte, tabulatorgetrennter Werte und JavaScript. JavaScript wird normalerweise nur zur Fehlerbehebung verwendet. Unter Datenquellen implementieren erfahren Sie, wie Sie eine Anfrage zum Abrufen des bevorzugten Antwortformats verarbeiten.

Beispielverwendung

Im Folgenden finden Sie einige Beispiele zur Verwendung der verschiedenen Ausgabeformate.

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()

ToJSonResponse-Beispiel

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")