Количество событий, сгруппированных по дате в Python? - PullRequest
3 голосов
/ 29 марта 2010

Это, без сомнения, еще один нубистский вопрос, но я все равно задам его:

У меня есть набор данных событий с точной датой и временем в UTC. Я хотел бы создать линейный график, показывающий общее количество событий по дням (дате) в указанном диапазоне дат. Прямо сейчас я могу получить общий набор данных для необходимого диапазона дат, но затем мне нужно просмотреть его и подсчитать для каждой даты.

Приложение работает на движке приложения Google и использует Python.

Каков наилучший способ создания нового набора данных с указанием даты и соответствующих показателей (в том числе, если на эту дату не было событий), который я затем могу использовать для передачи этой информации в шаблон django?

Набор данных для этого примера выглядит следующим образом:

class Event(db.Model):
    event_name = db.StringProperty()
    doe = db.DateTimeProperty()
    dlu = db.DateTimeProperty()
    user = db.UserProperty()

В идеале я хочу что-то с датой и рассчитывать на эту дату.

Спасибо и, пожалуйста, дайте мне знать, если что-то еще нужно, чтобы ответить на этот вопрос!

Ответы [ 3 ]

1 голос
/ 29 марта 2010

Вам нужно будет выполнить объединение в памяти (т. Е. После извлечения хранилища данных).

Метод .date() экземпляра datetime облегчит ваше биннинг; это отрубает элемент времени. Тогда вы можете использовать словарь для хранения бункеров:

bins = {}
for event in Event.all().fetch(1000):
    bins.setdefault(event.doe.date(), []).append( event )

Тогда делайте, что хотите, с (например, считайте) корзинами. Для прямого подсчета:

counts = collections.defaultdict(int)
for event in Event.all().fetch(1000):
    counts[event.doe.date()] += 1
0 голосов
/ 29 марта 2010

Чтобы свести к минимуму объем работы, которую вы выполняете, вы, вероятно, захотите написать задачу, которая подводит итоги за день, чтобы вы могли использовать их повторно. Я бы предложил использовать библиотеку bulkupdate для запуска разовой ежедневной задачи, которая подсчитывает события за предыдущий день и создает новый экземпляр модели с именем ключа на основе даты, содержащим счетчик. , Затем вы можете получить все необходимые точки данных, выполнив запрос (или, лучше сказать, пакетное получение) для набора необходимых вам сводных сущностей.

0 голосов
/ 29 марта 2010

Я не вижу, как это было бы возможно с одним запросом, так как GQL не поддерживает GROUP BY или агрегация в целом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...