Reputation: 116820
I am new to this area as well as the terminology so please feel free to suggest if I go wrong somewhere. I have two datasets like this:
A B C 0 E
A 0 C 0 0
A 0 C D E
A 0 C 0 E
The way I interpret this is at some point in time, (A,B,C,E) occurred together and so did (A,C), (A,C,D,E) etc.
5A 1B 5C 0 2E
4A 0 5C 0 0
2A 0 1C 4D 4E
3A 0 4C 0 3E
The way I interpret this is at some point in time, 5 occurrences of A, 1 occurrence of B, 5 occurrences of C and 2 occurrences of E happened and so on.
I am trying to find what items occur together and if possible, also find out the cause and effect for this. For this, I am not understanding how to go about using both the datasets (or if one is enough). It would be good to have a good tutorial on this but my primary question is which dataset to utilize and how to proceed in (i) building a frequent itemset and (ii) building association rules between them.
Can someone point me to a practical tutorials/examples (preferably in Python) or at least explain in brief words on how to approach this problem?
Upvotes: 24
Views: 27358
Reputation: 1064
Some theoretical facts about association rules:
To find association rules, you can use apriori algorithm. There already exists many python implementation, although most of them are not efficient for practical usage:
or use Orange data mining library, which has a good library for association rules.
Usage example:
'''
save first example as item.basket with format
A, B, C, E
A, C
A, C, D, E
A, C, E
open ipython same directory as saved file or use os module
>>> import os
>>> os.chdir("c:/orange")
'''
import orange
items = orange.ExampleTable("item")
#play with support argument to filter out rules
rules = orange.AssociationRulesSparseInducer(items, support = 0.1)
for r in rules:
print "%5.3f %5.3f %s" % (r.support, r.confidence, r)
To learn more about association rules/frequent item mining, then my selection of books are:
There is no short way.
Upvotes: 27
Reputation: 3520
If you have quantities for each items, then you could consider "high utility itemset mining". It is the problem of itemset mining but adapted for the case where items can have quantities in each transaction and also each item can have a weight.
If you just use the basic Apriori, then you would loose the information about quantities.
Upvotes: 0
Reputation: 12142
It seems like a neat way to handle this type of problems is using a Bayesian network. In particular as a Bayesian network structure learning problem. Once you have that you will be able to efficiently answer questions like p(A=1|B=0 and C=1) and so on.
Upvotes: 0