用pyfpgrowth找到频繁的模式

时间:2018-03-27 22:05:59

标签: 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

输出: enter image description here

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

输出:

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

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

2 个答案:

答案 0 :(得分:2)

注意:我稍微更改了数据集

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

回答第二个问题:你说1出现一次是对的,但正如你从上面的例子中看到的那样,1由于错误的分裂而多次出现。

现在以正确的方式做到:

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

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

输出:

enter image description here

接下来,第二个参数在" 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”。

正确准备数据。