2011-11-22 22 views
1

给定一个字典列表(来自MongoDB的日志JSON),其中dict的其中一个值是日期时间值,我需要知道它发生的频率。获取排序列表中出现的平均次数

比方说:

[ 
    {"time": "2010-11-11 03:23:59"}, 
    {"time": "2010-11-12 10:16:15"}, 
    {"time": "2010-11-12 14:51:13"}, 
    ... 
] 

频率必须是这样的:
3 times in a week

1 time in an hour
取决于频率(如果不超过每天一次出现,只返回x times in a day,如果不超过一周,只使用x times in a week等)。

回答

6

你可以解析字符串转换为日期时间,找到最大和最小,减找到一个timedelta,并指定基于该timedelta时间:

import datetime as dt 
data=[ 
    {"time": "2010-11-11 03:23:59"}, 
    {"time": "2010-11-12 10:16:15"}, 
    {"time": "2010-11-12 14:51:13"}, 
    ] 

def freq(data): 
    dates=[dt.datetime.strptime(dct['time'],'%Y-%m-%d %H:%M:%S') for dct in data] 
    date_min=min(dates) 
    date_max=max(dates) 
    span=date_max-date_min 
    l=len(dates) 
    if span<dt.timedelta(hours=1): 
     duration='an hour' 
    elif span<dt.timedelta(hours=24): 
     duration='a day' 
    elif span<dt.timedelta(days=7): 
     duration='a week' 
    else: 
     duration='all' 
    return l,duration 

num,duration=freq(data) 
print('{n} times in {d}'.format(n=num,d=duration)) 

产量

3 times in a week 
+0

优秀,谢谢! –