Библиотека Python источника данных

Google открыла библиотеку Python с открытым исходным кодом, которая создает объекты DataTable для использования в визуализациях. Эту библиотеку можно использовать для создания DataTable в Python и вывода ее в любом из трех форматов:

  • Строка JSON . Если вы размещаете страницу, на которой размещена визуализация, использующая ваши данные, вы можете создать строку JSON для передачи в конструктор DataTable для ее заполнения.
  • Ответ JSON . Если вы не размещаете страницу, на которой размещена визуализация, и просто хотите выступать в качестве источника данных для внешних визуализаций, вы можете создать полную строку ответа JSON, которая может быть возвращена в ответ на запрос данных.
  • Строка JavaScript . Вы можете вывести таблицу данных в виде строки, состоящей из нескольких строк кода JavaScript, который создаст и заполнит объект google.visualization.DataTable данными из вашей таблицы Python. Затем вы можете запустить этот JavaScript в движке, чтобы сгенерировать и заполнить объект google.visualization.DataTable . Обычно это используется только для отладки.

В этом документе предполагается, что вы понимаете основы программирования на Python и прочитали вводную документацию по созданию и использованию визуализации .

Содержание

Как пользоваться библиотекой

Вот основные шаги, более подробно:

1. Создайте объект gviz_api.DataTable .

Импортируйте библиотеку gviz_api.py по ссылке выше и создайте экземпляр класса gviz_api.DataTable . Класс принимает два параметра: схему таблицы, которая будет описывать формат данных в таблице, и дополнительные данные для заполнения таблицы. При желании вы можете добавить данные позже или полностью перезаписать данные, но не удалять отдельные строки, или очистить схему таблицы.

2. Опишите схему вашей таблицы.

Схема таблицы задается параметром table_description , передаваемым в конструктор. Вы не сможете изменить его позже. Схема описывает все столбцы в таблице: тип данных каждого столбца, идентификатор и необязательную метку.

Каждый столбец описывается кортежем: ( ID [ ,data_type [ ,label [ ,custom_properties ]]]).

  • ID — строковый идентификатор, используемый для идентификации столбца. Может включать пробелы. Идентификатор каждого столбца должен быть уникальным.
  • data_type — [ необязательный ] Строковый дескриптор типа данных Python для данных в этом столбце. Список поддерживаемых типов данных вы можете найти в методе SingleValueToJS(). Примеры включают «строку» и «логическое значение». Если не указано, по умолчанию используется «строка».
  • label — понятное имя столбца, которое может отображаться как часть визуализации. Если не указано, используется значение идентификатора.
  • custom_properties — словарь {String:String} свойств настраиваемого столбца.

Схема таблицы представляет собой набор кортежей дескрипторов столбцов. Каждый элемент списка, ключ словаря или значение словаря должны быть либо другой коллекцией, либо кортежем дескриптора. Вы можете использовать любую комбинацию словарей или списков, но каждый ключ, значение или член в конечном итоге должны быть оценены как кортеж дескриптора. Вот некоторые примеры.

  • Список столбцов: [('a', 'number'), ('b', 'string')]
  • Словарь списков: {('a', 'number'): [('b', 'number'), ('c', 'string')]}
  • Словарь словарей: {('a', 'number'): {'b': 'number', 'c': 'string'}}
  • И так далее, при любом уровне вложенности.

3. Заполните свои данные

Чтобы добавить данные в таблицу, постройте структуру элементов данных точно по той же структуре, что и схема таблицы. Так, например, если ваша схема представляет собой список, данные должны быть списком:

  • схема: [("цвет", "строка"), ("форма", "строка")]
  • данные: [["синий", "квадрат"], ["красный", "круг"]]

Если схема является словарем, данные должны быть словарем:

  • схема: {("имя_строки", "строка"): [("цвет", "строка"), ("форма", "строка")] }
  • data: {"row1": ["синий", "квадрат"], "row2": ["красный", "круг"]}

Одна строка таблицы представляет собой раздел соответствующих данных и схемы. Например, вот как схема списка из двух столбцов применяется к двум строкам данных.

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

Table: 
      Color    Shape
      blue     square
      red      circle

Обратите внимание, что ключи словаря здесь оценивают данные столбца. Более сложные примеры вы можете найти в документации метода AppendData() в коде. Цель разрешения такой сложной вложенности — позволить вам использовать структуру данных Python, соответствующую вашим потребностям.

4. Выведите ваши данные

Наиболее распространенным форматом вывода является JSON, поэтому вы, вероятно, будете использовать функцию ToJsonResponse() для создания возвращаемых данных. Однако если вы анализируете входной запрос и поддерживаете разные форматы вывода, вы можете вызвать любой другой метод вывода для возврата других форматов, включая значения, разделенные запятыми, значения, разделенные табуляцией, и JavaScript. JavaScript обычно используется только для отладки. См. раздел «Реализация источника данных» , чтобы узнать, как обработать запрос для получения предпочтительного формата ответа.

Пример использования

Вот несколько примеров, демонстрирующих, как использовать различные форматы вывода.

Пример ToJSon и 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

JSonResponse используется удаленным клиентом в запросе данных.

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