python читает правила ассоциации построения данных

#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. Вы не можете создать сопоставление.