使用 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)
我正在尝试使用 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)