在 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 算法的主要内容,如果未能解决你的问题,请参考以下文章