如何在Python中按日期分组统计事件?
这无疑是个新手问题,但我还是想问一下:
我有一组事件数据,里面有准确的时间(使用的是协调世界时UTC)。我想制作一个折线图,显示在指定日期范围内每天的事件总数。目前我可以获取到这个日期范围内的所有数据,但接下来我需要逐个日期去统计事件数量。
这个应用程序运行在谷歌的应用引擎上,使用的是Python语言。
有没有什么好的方法可以创建一个新的数据集,显示每个日期及其对应的事件数量(包括那些没有事件的日期),这样我就可以把这些信息传递给Django模板?
这个例子的数据显示大概是这样的:
class Event(db.Model):
event_name = db.StringProperty()
doe = db.DateTimeProperty()
dlu = db.DateTimeProperty()
user = db.UserProperty()
理想情况下,我想要的是每个日期及其对应的事件数量。
谢谢,如果需要其他信息来回答这个问题,请告诉我!
3 个回答
0
为了减少你的工作量,你可能想写一个任务,每天只计算一次总数,这样就可以重复使用这些数据。我建议你使用bulkupdate库,每天运行一次任务,统计前一天的事件数量,并创建一个新的模型实例,给它起个名字,名字是基于日期的,里面包含这个数量。然后,你可以通过查询(或者更好的是,批量获取)你需要的汇总数据来获取所有需要的数据点。
1
你需要在内存中进行分组,也就是说,在从数据存储获取数据之后再进行分组。
一个 datetime
实例的 .date()
方法可以帮助你进行分组;它会去掉时间部分,只保留日期。然后你可以用一个字典来存放这些分组:
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