Формат даты с использованием gviz_api.py

Я использую gviz_api (google-visualization-python) для построения линейных диаграмм. http://code.google.com/p/google-visualization-python/

Я отредактировал пример линейной диаграммы, взятый из документации Google.
Однако я не уверен, как передать дату в DataTable.

Вот отредактированный пример, с которым я работал. https://gist.github.com/3941946

Вот код, о котором у меня был вопрос

 # Creating the data
 description = {"year": ("string", "Year"),
             "sales": ("number", "Sales"),
             "expenses": ("number", "Expenses")}

 data = [{"year": '2004', "sales": 1000, "expenses": 300}, 
      {"year": '2005', "sales": 1200, "expenses": 400}, 
      {"year": '2006', "sales": 1300, "expenses": 500}, 
      {"year": '2007', "sales": 1400, "expenses": 600}, 
      {"year": '2008', "sales": 1500, "expenses": 800}]
  # Loading it into gviz_api.DataTable
  data_table = gviz_api.DataTable(description)
  data_table.LoadData(data)

Как мне загрузить дату в DataTable с помощью gviz_api?

Документация Google описывает, как создать новую дату() с помощью javascript, однако я хотел бы продолжать использовать gviz_api.py.

Примечания из документации Google с сайта https://developers.google.com/chart/interactive/docs/dev/implementing_data_source#jsondatatable

* Модификации JSON Вспомогательные библиотеки Google и все запросы, отправленные в Google, возвращают несколько нестандартную версию JSON/JSONP. Если вы не анализируете возвращаемый код самостоятельно, это не должно иметь для вас значения. Клиент Visualization API поддерживает как стандартную, так и модифицированную версии JSON. Вот краткое изложение различий:

JSON не поддерживает значения даты JavaScript (например, «новая дата (2008,1,28,0,31,26)»; реализация API поддерживает. Однако API теперь поддерживает пользовательское допустимое представление дат в формате JSON в виде строка в следующем формате: Дата(год, месяц, день[,час, минута, секунда[, миллисекунда]]), где все после дня необязательно, а месяцы отсчитываются от нуля.

JSON использует двойные кавычки для ключей словаря; реализация API использует ключи без кавычек.

JSON требует двойных кавычек вокруг строковых значений; реализация API использует одинарные кавычки.*


person RSolis    schedule 23.10.2012    source источник


Ответы (1)


На самом деле вы можете управлять созданием дат так же, как в стандартном Python — API обрабатывает преобразование в JS для вас. Все, что вам нужно сделать, это import datetime в начале вашего скрипта, изменить тип столбца для year с string на date, а затем создать даты, как в стандартном Python:

# This is the first modification - importing the library
import datetime
import gviz_api

# page_template stays the same
# ...

def main():
  # Creating the data
  # Here we change the type of column "year" to "date"
  description = {"year": ("date", "Year"),
                 "sales": ("number", "Sales"),
                 "expenses": ("number", "Expenses")}

  # Here we switch out the string dates with an actual Python datetime.date
  # The conversion happens in the the subsequent functions, giving you a 
  # date that is usable in the JS
  data = [{"year": datetime.date(2007,3,7), "sales": 1000, "expenses": 300},
          {"year": datetime.date(2009,6,11), "sales": 1200, "expenses": 400},
          {"year": datetime.date(2009,3,1), "sales": 1300, "expenses": 500},
          {"year": datetime.date(2010,8,6), "sales": 1401, "expenses": 600},
          {"year": datetime.date(2011,7,13), "sales": 1500, "expenses": 800}]
  # Loading it into gviz_api.DataTable
  data_table = gviz_api.DataTable(description)
  data_table.LoadData(data)

  # Creating a JavaScript code string
  jscode = data_table.ToJSCode("jscode_data",
                               columns_order=("year", "sales", "expenses"),
                               order_by="year")
  # Creating a JSon string
  json = data_table.ToJSon(columns_order=("year", "sales", "expenses"),
                           order_by="year")

  # Putting the JS code and JSon string into the template
  print "Content-type: text/html"
  print
  print page_template % vars()


if __name__ == '__main__':
  main()
person RocketDonkey    schedule 23.10.2012
comment
Спасибо! Я ценю вашу помощь. - person RSolis; 24.10.2012