在python中按日期分组的事件计数?

时间:2010-03-28 20:29:54

标签: python django google-app-engine

这无疑是另一个愚蠢的问题,但无论如何我都会问:

我有一个事件数据集,其中包含精确的UTC日期时间。我想创建一个折线图,显示指定日期范围内按天(日期)的事件总数。现在我可以检索所需日期范围的总数据集,但之后我需要仔细检查并计算每个日期。

该应用正在谷歌应用引擎上运行,正在使用python。

创建新数据集的最佳方法是什么,显示日期和相应的计数(包括那个日期没有事件),然后我可以使用它将这些信息传递给django模板?

此示例的数据集如下所示:

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

理想情况下,我想要一些日期和数量的日期。

谢谢,如果需要其他东西来回答这个问题,请告诉我!

3 个答案:

答案 0 :(得分:1)

您必须在内存中进行分箱(即在数据存储区提取后)。

.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

答案 1 :(得分:0)

由于GQL一般不支持GROUP BY或aggregation,我无法看到单一查询的可行性。

答案 2 :(得分:0)

为了尽量减少您的工作量,您可能希望编写一个总计每天总计一次的任务,以便您可以重复使用它们。我建议使用bulkupdate library运行一天一次的任务来计算前一天的事件,并创建一个新的模型实例,其中包含基于日期的键名,包含计数。然后,您可以通过对所需的摘要实体集进行查询(或更好,批量获取)来获取所有需要的数据点。