栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

按时间间隔对消息进行分组

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

按时间间隔对消息进行分组

假设您想按秒在1秒间隔内发布的数据分组数据,我们可以利用您的数据是有序的并且

int(out_ts)
将时间戳缩短到秒的事实,我们可以将其用作分组密钥。

进行分组的最简单方法是使用

itertools.groupby

from itertools import groupbydata = get_time_deltas(INFILE)  get_key = lambda x: int(x[0])  # function to get group key from databins = [(k, list(g)) for k, g in groupby(data, get_key)]

bins
将是一个元组列表,其中元组中的第一个值是键(整数,例如
082438
),第二个值是该秒上发布的数据条目的列表(带有timestamp =
082438.*
)。

用法示例:

# print out the number of messages for each secondfor sec, data in bins:    print('{0} --- {1}'.format(sec, len(data)))# write (sec, msg_per_sec) out to CSV fileimport csvwith open("test.csv", "w") as f:    csv.writer(f).writerows((s, len(d)) for s, d in bins)# get average message per secondmessage_counts = [len(d) for s, d in bins]avg_msg_per_second = float(sum(message_count)) / len(message_count)

PS在这个例子中,一个

list
被用于
bins
使得数据的顺序被保持。如果您需要随机访问数据,请考虑使用
OrderedDict
代替。


请注意,将解决方案调整为几秒钟的分组是相对简单的。例如,要按每分钟(60秒)的邮件分组,请将

get_key
功能更改为:

get_key = lambda x: int(x[0] / 60)  # truncate timestamp to the minute


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/645932.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号