gpt4 book ai didi

python - 推荐快照数据的数据结构

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:08:36 24 4
gpt4 key购买 nike

我有带分隔符的日志文件,每 5 分钟捕获一些进程的快照。我想对它们进行一些统计分析,对数据的子集进行分组和绘制图表等。其中一部分涉及计算进程打开的时间(即总分钟数 = 快照在 x 5 中的显示方式)。我可以使用 Python、R 或我选择的任何语言。

挑战在于没有字段是唯一的(存在一对多和多对多关系),所以唯一的匹配是每个 整行元素相同

也许一个例子会有所帮助。假设第一个快照日志如下所示:

R123,M,5,... <-- line A
R190,Z,4,...
R663,M,8,...

然后 5 分钟后,下一张快照显示:

R123,M,5,... <-- line A
R123,P,3,... <-- line B
R955,Z,3,...

很明显,A 行中的流程现在已经进行了至少 5 分钟。但即使 B 行具有相同的第一个字段,其他字段不匹配,所以它不是同一个过程。

我只是想找出一个好的数据模型,使这些数据易于使用。

一个选项是简单的频率计数:将每一整行读入 Python dict 或 Perl 散列,并将该行作为键,这样当重复行出现在下一个快照中时,它只会添加到计数中。例如在 Perl 中:$count{$_}++ foreach @lines;

但是,整行数据甚至可以用作字典键吗?以及非连续实例呢,比如如果 A 行连续出现 3 个快照,然后另一天又出现?——这些应该是单独的实例,以便基于时间的查询仍然有效。

对我如何处理和存储这些数据有什么建议吗?

最佳答案

第一个问题——当然,至少在 Perl 中您可以使用任何字符串作为散列键。没有限制。

下一步:按顺序评估快照。在快照 1 中,只需将所有内容读入内存并为每个项目分配一个计数器 0。继续快照 2。在快照 N,按如下方式进行:任何新内容都存储在内存中并分配一个计数 0。任何已经在内存中的内容都会保留在内存中,并增加计数器。内存中但不再存在于当前快照中的任何内容都会被归档到输出文件中。

如果您担心日志文件的大小,可以使用 SQL 数据库代替 Perl 的哈希,例如通过 DBI 的 SQLite。

关于python - 推荐快照数据的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17354377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com