在 python 2.7 中运行 Apriori 算法

Posted

技术标签:

【中文标题】在 python 2.7 中运行 Apriori 算法【英文标题】:Run Apriori algorithm in python 2.7 【发布时间】:2017-03-14 20:53:07 【问题描述】:

我在 python 中有一个 DataFrame,它使用具有 3 列和 80.000.000 行的 pandas。

列是:event_id,device_id,category。 here is the first 5 rows of my df

每个设备都有很多事件,每个事件可以有多个类别。

我想运行 Apriori 算法来找出哪些类别看起来在一起。

我的想法是创建一个列表列表[[]]:为每个设备保存相同事件中的类别。比如: [('a'),('a','b')('d'),('s','a','b')] 然后将列表列表作为事务提供给算法。 我需要帮助来创建列表列表。

如果您有更好的想法,请告诉我,因为我是 Python 新手,这是我发现的唯一方法。

【问题讨论】:

尝试一下,然后给我们看一些代码。 你能给我一些建议来从数据框创建列表列表吗? 【参考方案1】:

这里的回复有点晚,但在我看来,先验可能不是您数据的正确选择。传统的 apriori 查看二进制数据(对于经典的购物篮示例,“在购物车中”或“不在购物车中”),以获取所有相同类型的交易列表。您似乎拥有的是一个多级/分层关联问题,它可能更适合更具可扩展性的算法。

也就是说,在回答您的格式问题时,您的第一步是转换您的数据,以便您的交易反映行,而列代表每个交易中可能出现的项目。这可以通过DataFrame.pivot 实现,看起来像这样(文档中的代码,为方便起见,在此处发布):

df = pd.DataFrame('foo': ['one','one','one','two','two','two'],
                   'bar': ['A', 'B', 'C', 'A', 'B', 'C'],
                   'baz': [1, 2, 3, 4, 5, 6])
>>> df
    foo   bar  baz
0   one   A    1
1   one   B    2
2   one   C    3
3   two   A    4
4   two   B    5
5   two   C    6

df.pivot(index='foo', columns='bar', values='baz')
     A   B   C
one  1   2   3
two  4   5   6

您可以使用以下方法从数据框中创建列表列表:

df.values.tolist()

这个问题之前回答过here。

如果您最终使用 apriori,那么已经有一个包实现了它,这可以节省您一些时间,称为 apyori。

【讨论】:

以上是关于在 python 2.7 中运行 Apriori 算法的主要内容,如果未能解决你的问题,请参考以下文章

在Python 2.7中运行cURL命令

Python中的Apriori关联算法-市场购物篮分析

在 Python 2.7 中运行 cURL 命令

在 python 中测试 APriori 和 FP-growth 的实现 [关闭]

Apriori——python3实现

在 Python 2.7 中运行 MySQL 以将 CSV 加载到 MySQL -