使用 pyfpgrowth 查找频繁模式

finding frequent patterns with pyfpgrowth

我正在尝试使用 pyfpgrowth 找到频繁模式 pandas,首先我创建了一个包含一列的数据框,每一行都是一个交易,这里是代码:

import pyfpgrowth
import pandas as pd
import numpy as np
data = pd.read_csv("itemsets1.csv")
data = pd.DataFrame(data)
data.columns = ['itemsets']
data

输出:

patterns = pyfpgrowth.find_frequent_patterns(data['itemsets'],6)
patterns

输出:

{(' ',): 6, (' ', '1'): 8, ('1',): 9, ('1', '8'): 6, ('8',): 6}

实际上我在这里有两个问题,第一个是算法将 space 作为一个错误的项目,第二个是项目的频率,例如第一个“1”只出现一次,但在输出中它显示 9 也是错误的,需要一些帮助

您没有正确准备数据。

由于在 Python 中,字符串是字符列表,因此您会发现频繁的字符集。

例如,“51”包含字符“1”。

正确准备数据。

注意 : 我对你的数据集做了一些改动

第一个问题的答案: 该算法将列表作为输入。在您的情况下,算法已将每个字符拆分为列表的单独值,即 [5,1, ,2,8, ,2,7]

第二题答案:你说的1出现一次是对的,但是从上面的例子可以看出,1出现了很多次是因为拆分错误

现在以正确的方式进行:

首先,需要将itemsets中的每个字符串拆分成一个列表:

data['itemsets'] = data.itemsets.apply(lambda x: x.split(' '))

输出:

接下来,“find_frequent_patterns”中的第二个参数是支撑位。这意味着一个项目(或一组项目)应该在所有交易组合中出现的最少次数。您输入了 6。您的数据集中没有出现 6 次的项目。让我们选择2.

patterns = pyfpgrowth.find_frequent_patterns(data['itemsets'],2)

输出:

{('10',): 4, ('10', '8'): 2, ('51',): 2, ('8', '81'): 2, ('81',): 4}

在上面的输出中,('10','8'):2表示10和8一起出现了两次在整个数据集中。

更进一步,我们可以使用"generate_association_rules"根据截止值生成规则。例如:

rules = pyfpgrowth.generate_association_rules(patterns, .5)

输出:

{('10',): (('8',), 0.5), ('81',): (('8',), 0.5)}

表示10和8一起出现在整个数据集中10的所有交易中的50%(也就是4)