我正在尝试使用 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}
实际上我在这里有两个问题,第一个是算法将空格作为错误的项目,第二个是项目的频率,例如项目1' 1'只出现一次,但在输出中显示9也错了,需要一些帮助
答案 0 :(得分:2)
注意:我稍微更改了数据集
回答第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在整个数据集中的50%的10次交易中共同出现(即4)
答案 1 :(得分:0)
您没有正确准备数据。
因为在Python中,字符串是一个字符列表,所以你会发现频繁的字符集。
例如,“51”包含字符“1”。
正确准备数据。