Как создать корзину из струны оранжевого цвета?
В документации есть пример того, как найти правила ассоциации в образце файла.basket:
import Orange
data = Orange.data.Table("market-basket.basket")
rules = Orange.associate.AssociationRulesSparseInducer(data, support=0.3)
Файл.basket выглядит так:
Bread, Milk
Bread, Diapers, Beer, Eggs
Milk, Diapers, Beer, Cola
Bread, Milk, Diapers, Beer
Bread, Milk, Diapers, Cola
Я хотел бы использовать тот же подход, но я не знаю, как создать корзину из моих данных. Есть ли способ создать корзину, используя Orange.data.Table из строки, которая содержит те же данные, что и файл?
2 ответа
В Orange 2 это преобразует вашу строку в разреженную таблицу данных, аналогичную той, которую вы получите из файла корзины.
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_metas
, True
, говорит, что эти атрибуты являются "необязательными". Без этого матрица не была бы разреженной.
В Orange 3 есть надстройка Orange3-Associate (надстройка не требует установки Orange 3), которую вы можете использовать со своими данными либо в numpy.array
, scipy.sparse
или простой список списков формы.
http://orange3-associate.readthedocs.org/en/latest/
Кроме того, алгоритм, используемый аддоном (FP-growth), намного быстрее, чем в Orange 2 (Apriori).