#python #associations #rules
#python #ассоциации #Правила
Вопрос:
У меня есть два столбца в текстовом файле. Я читаю их в Python в два отдельных списка. Что я хочу сделать, так это подсчитать вхождения каждой пары и построить правила ассоциации на основе этого.
Пример:
colA = [a,b,c,d,...]
colB = [c,y,d,e,...]
Я зашел так далеко только для того, чтобы прочитать данные в двух списках, но каков наилучший способ подсчитать вхождения и создать правила?
Код:
pred = []
succ = []
for line in open('arsample.txt'):
lst = line.split('t')
pred.append(int(lst[0]))
succ.append(int(lst[1]))
Правила будут выглядеть следующим образом и отсортированы по убыванию:
P S Probability
---------------------
a > c count(a>c)/n
... ...
Комментарии:
1. Не совсем понятно, что вы пытаетесь сделать. Каков ваш ожидаемый результат с приведенными вами примерами данных?
Ответ №1:
Взгляните на наборы:
http://docs.python.org/library/sets.html
Они позволяют это :
>>> a = [1,2,2,5,4,5,4,2,1,3]
>>> set(a)
set([1, 2, 3, 4, 5])
>>>
Таким образом, вам придется создавать пары в списке строк, я полагаю…
Надеюсь, это может помочь.
Комментарии:
1. Выглядит хорошо, но мне все еще нужно количество пар, иначе я не смогу вычислить вероятность.
2. Тогда вам, вероятно, лучше использовать itertools: из itertools import groupby: предоставит вам наборы и подсчеты.
Ответ №2:
Вы можете использовать dictionary
для создания сопоставления:
mapping = {}
for key in colA:
mapping[key] = colB.index(key)
Чтобы подсчитать вхождения, просто используйте .count()
:
colA.count('a')
Обратите внимание, что сопоставление нарушится, если colB
будет содержать два элемента с одинаковыми именами. Это потому, что вы пытаетесь построить биекцию между двумя неуникальными наборами, которая не будет работать. Думайте об этом как о восстановлении входного номера из x^2
. Вы просто не знаете.
Комментарии:
1. В ColB есть элементы с одинаковыми именами, так что это проблема.
2. Вы не можете создать сопоставление.