【问题标题】:finding frequent patterns with pyfpgrowth使用 pyfpgrowth 查找频繁模式
【发布时间】:2018-03-27 22:05:59
【问题描述】:

我正在尝试使用 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”只出现一次,但在输出中它显示9 也错了,求大神帮忙

【问题讨论】:

    标签: python data-mining


    【解决方案1】:

    注意:我已经稍微改变了你的数据集

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

    第二个问题的答案:你说 1 出现一次是对的,但是从上面的例子中你可以看到,1 由于错误的拆分而出现了很多次。

    现在做对了:

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

    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)

    【讨论】:

    • 您好,能否详细解释一下规则形成输出?
    【解决方案2】:

    您没有正确准备数据。

    由于在 Python 中字符串是一个字符列表,因此您可以找到频繁使用的字符集。

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

    正确准备数据。

    【讨论】:

    • 怎么做,例如拆分行??
    • 是的。您可能想在空白处拆分行。也许也可以将数据转换为整数。
    猜你喜欢
    • 2016-01-26
    • 2017-09-19
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 2017-09-06
    • 2021-04-21
    相关资源
    最近更新 更多