【问题标题】:How to find common sequence pattern in a column using python?如何使用python在列中找到常见的序列模式?
【发布时间】:2021-02-14 16:10:03
【问题描述】:

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

时间戳       事件
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 之后,B 在第 2 行发生。{A,B} 是在第 4 行和第 5 行重复的模式。我想知道是否还有更多这样的模式及其频率。我对最大长度为 4 的序列感兴趣(例如:C、A、B、D)。

如果您能建议我使用 python 中的任何算法/实现来做这件事,那将非常有帮助。

谢谢!

【问题讨论】:

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

标签: python pandas machine-learning sequence data-analysis


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以将其视为一个字符串,您的问题将变成查找字符串中所有可能的子字符串的出现。

    您可以尝试以下脚本。就是找出所有长度为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
    
    

    【讨论】:

      【解决方案3】:

      一种解决方案是将event 列连接成一个字符串,然后计算所有模式。

      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)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        • 2021-09-22
        • 1970-01-01
        • 2012-11-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多