如何使用python在列中查找公共序列模式?

如何使用python在列中查找公共序列模式?,python,pandas,machine-learning,sequence,data-analysis,Python,Pandas,Machine Learning,Sequence,Data Analysis,我有一个大数据集,如下所示: 时间戳        事件 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

我有一个大数据集,如下所示:

时间戳        事件
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-1011: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的任何算法/实现来实现它,那将非常有帮助


谢谢大家!

您尝试过PM4Py python库吗?您需要按照指令将数据转换为事件日志,它将自动提取序列。

您可以将其视为字符串,您的问题将转化为查找字符串中所有可能的子字符串

你可以试试下面的脚本。查找所有长度为4的子字符串的出现

from collection import defautdict

lstring = ''.join(df['event'].values) #convert to string
sublength = 4
substring_dict= defaultdict(int)
for i in range(len(lstring)-sublength + 1):
    substring = lstring[i:i+sublength ]
    substring_dict[substring] += 1


一种解决方案是将
事件
列连接成一个字符串,然后对所有模式进行计数

from collections import Counter

line = ''.join(df['event'].values)

all_patterns = Counter()
for n in range(2, 6): # pattern sizes [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)) # Top 10 most common patterns
# [('AB', 3), ('CA', 2), ('BD', 2), ('CAB', 2), ('ABD', 2), ('CABD', 2), ('BC', 1), ('DC', 1), ('ABC', 1), ('BCA', 1)]

在那个大数据集中有多少行?10万?100米?