Библиотека источника данных 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 — удобное для пользователя имя столбца, которое может отображаться как часть визуализации. Если не указано, используется значение ID.
  • custom_properties — словарь {String:String} пользовательских свойств столбца.

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

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

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

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

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

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

  • схема: {("имя строки", "строка"): [("цвет", "строка"), ("форма", "строка")] }
  • данные: {"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")