我有一个如下所示的大型数据集:
时间戳 事件
2020-03-04 01:20:39 A
2020-03-04 01:21:22 B
2020-03-04 01:21:55 C
2020-03-04 01:22:31 A
2020-03-04 01:23:19 B
2020-03-04 01:24:39 D
….
….
2020-03-10 11:34:54 C
2020-03-10 11:35:22 A
2020-03-04 11:35:55 B
2020-03-04 11:36:01 D
我想查找事件发生中是否存在某些模式。例如,在第1行的A事件之后,第2行发生了B事件。{A, B}是一个在第4行和第5行重复的模式。我想知道是否还有更多这样的模式及其频率。我对最大长度为4的序列感兴趣(例如:C, A, B, D)。
如果你能建议任何算法/在Python中的实现来完成这个任务,将会非常有帮助。
谢谢你!
回答:
一种解决方案是将event
列连接成一个字符串,然后统计所有模式。
from collections import Counterline = ''.join(df['event'].values)all_patterns = Counter()for n in range(2, 6): # 模式大小 [2, 3, 4, 5] all_patterns += Counter([line[i:i+n] for i in range(0, len(line)-n+1)])print (all_patterns.most_common(10)) # 最常见的10个模式# [('AB', 3), ('CA', 2), ('BD', 2), ('CAB', 2), ('ABD', 2), ('CABD', 2), ('BC', 1), ('DC', 1), ('ABC', 1), ('BCA', 1)]