K_ *_*uli 0 python data-mining
我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)
输出:

patterns = pyfpgrowth.find_frequent_patterns(data['itemsets'],6)
patterns
Run Code Online (Sandbox Code Playgroud)
输出:
{(' ',): 6, (' ', '1'): 8, ('1',): 9, ('1', '8'): 6, ('8',): 6}
Run Code Online (Sandbox Code Playgroud)
实际上我在这里有两个问题,第一个是算法将空间作为错误的项目,第二个是项目的频率,例如项目一个“1”只出现一次,但在输出中它显示 9 也是错误的,请需要一些帮助
注意:我稍微改变了你的数据集
第一个问题的答案:该算法将列表作为输入。在您的情况下,算法已将每个字符拆分为列表的单独值,即 [5,1, ,2,8, ,2,7]
回答第二个问题:您说 1 出现一次是正确的,但从上面的示例中可以看出,由于错误拆分,1 出现了多次。
现在以正确的方式做:
首先,您需要将项集中的每个字符串拆分为一个列表:
data['itemsets'] = data.itemsets.apply(lambda x: x.split(' '))
Run Code Online (Sandbox Code Playgroud)
输出:
接下来,“ find_frequent_patterns ”中的第二个参数是支持级别。这意味着一个项目(或一组项目)在所有交易组合中应该出现的最小次数。您输入了 6。您的数据集中没有出现 6 次的项目。让我们选择2。
patterns = pyfpgrowth.find_frequent_patterns(data['itemsets'],2)
Run Code Online (Sandbox Code Playgroud)
输出:
{('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)
Run Code Online (Sandbox Code Playgroud)
输出:
{('10',): (('8',), 0.5), ('81',): (('8',), 0.5)}
这意味着 10 和 8 一起发生在整个数据集(即 4)中 10 的所有交易中的 50%