algorithm - 从 python 中的序列列表中提取特定对象

标签 algorithm python-2.7 sequences fpm

我实现了 fpm 算法以从事件数据中找到规则,我有格式的输出数据。

for itemset in find_frequent_itemsets(dataset, 0.1,include_support=True):
    print itemset

下面是上面代码的输出:

([u'Global Connect Village'], 28)
([u'Terminal 2', u'Global Connect Village'], 1)
([u'VivoCity', u'Global Connect Village'], 1)
([u'Universal Studios Singapore', u'VivoCity', u'Global Connect Village'], 1)
([u'Universal Studios Singapore', u'Global Connect Village'], 2)
([u'Orchard Gateway', u'Global Connect Village'], 2)
([u'Chinatown', u'Global Connect Village'], 2)
([u'Singapore Changi Airport (SIN)', u'Chinatown', u'Global Connect Village'], 2)
([u'Fragrance Hotel', u'Global Connect Village'], 2)
([u'Singapore Changi Airport (SIN)', u'Fragrance Hotel', u'Global Connect Village'], 1)
([u'Singapore', u'Global Connect Village'], 3)
([u'Singapore Changi Airport (SIN)', u'Singapore', u'Global Connect Village'], 1)
([u"McDonald's", u'Global Connect Village'], 4)
([u'Singapore Changi Airport (SIN)', u"McDonald's", u'Global Connect Village'], 1)

我只想提取那些支持度较高且包含三个或更多对象的值。

最佳答案

只需使用 filtersorted :

MIN_LOCS = 3
itemset = find_frequent_itemsets(dataset, 0.1,include_support=True
itemset = sorted(filter(lambda it: len(it[0]) >= MIN_LOCS, itemset), key=lambda it: it[1])

然后你可以选择你想要的顶部元素:

itemset_top_5 = itemset[:5]

如果您想包含最小支持值,只需根据需要调整过滤即可:

itemset = sorted(filter(lambda it: len(it[0]) >= MIN_LOCS and it[1] >= MIN_SUPPORT, itemset),
                 key=lambda it: it[1])

关于algorithm - 从 python 中的序列列表中提取特定对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49010609/

相关文章:

algorithm - Cut-Property 是两种方式吗?

在有向图中查找不同路径数的算法

python - 子进程 popen stdout 锁定?

python - 如何解决类型错误: cannot concatenate 'str' and 'int' objects?

python - 如何编写斐波那契数列?

Hibernate 和 Postgresql - hibernate 映射文件中的生成器类

java - 在不使用循环的情况下将java中两个整数之间的所有数字相乘

java - 我如何针对 CyclicShift 优化此 Java 代码(Hackerearth 问题)?

Python 类中的变量列表

Ruby 等同于 C#'s ' yield' 关键字,或者,在不预分配内存的情况下创建序列