如何用橙色的绳子创建一个篮子?

How to create a basket from a string in orange?

文档中有 example 如何在示例 .basket 文件中查找关联规则:

import Orange
data = Orange.data.Table("market-basket.basket")

rules = Orange.associate.AssociationRulesSparseInducer(data, support=0.3) 

.篮子文件如下所示:

Bread, Milk
Bread, Diapers, Beer, Eggs
Milk, Diapers, Beer, Cola
Bread, Milk, Diapers, Beer
Bread, Milk, Diapers, Cola

我想使用相同的方法,但我不知道如何根据我的数据创建购物篮。有没有办法使用 Orange.data.Table 从包含与文件相同数据的字符串创建篮子?

In Orange 3, there is an add-on Orange3-Associate(附加组件不需要安装 Orange 3),您可以在 numpy.arrayscipy.sparse 或普通列表中使用您的数据列出表格。

http://orange3-associate.readthedocs.org/en/latest/

此外,插件使用的算法 (FP-growth) 比 Orange 2 (Apriori) 中的算法much faster

在 Orange 2 中,这会将您的字符串转换为稀疏数据 table,就像您从篮子文件中获得的那样。

import re
import Orange

word = re.compile("\w+")

s = """Bread, Milk
Bread, Diapers, Beer, Eggs
Milk, Diapers, Beer, Cola
Bread, Milk, Diapers, Beer
Bread, Milk, Diapers, Cola"""

all_items = set(word.findall(s))
domain = Orange.data.Domain([])
domain.add_metas({Orange.orange.newmetaid(): Orange.feature.Continuous(n)
                  for n in all_items}, True)

data = Orange.data.Table(domain)
for e in s.splitlines():
    ex = Orange.data.Instance(domain)
    for m in re.findall("\w+", e):
        ex[m] = 1
    data.append(ex)

假设每一项在一行中只出现一次。 add_metasTrue 中的最后一个参数表明这些属性是 "optional"。没有它,矩阵就不会稀疏。