Как создать корзину из струны оранжевого цвета?

В документации есть пример того, как найти правила ассоциации в образце файла.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).

Другие вопросы по тегам