# Shopping2.py

from pprint import pprint

datafile = "shopping.dat"

def printRule():
    premiseName = attributes[premise]
    conclusionName = attributes[conclusion]
    print "Rule: If a person buys", premiseName, \
          "they will also buy", conclusionName
    print " - Purchases with premise:", support[premise][premise]
    print " - Support:", support[premise][conclusion]
    print " - Confidence:", round(confidence[premise][conclusion], 2)
    print ""

def loadIntData(fileName):    
    fData = open(fileName, 'r')
    out = []
    for line in fData:
        li = [int(i) for i in line.split(',')]
        out.append(li)
    fData.close()
    return out

X = loadIntData(datafile)
# Names of attributes
attributes = ["bread", "cheese", "apple", "banana", "pasta", "sugo"]
nbAttr = len(attributes) # Number of attributes
support = [[0 for i in range(nbAttr)] for k in range(nbAttr)]
confidence = [[0 for i in range(nbAttr)] for k in range(nbAttr)]

'''
premises
|   -------------------------------------
v   |  0: |  1: |  2: |  3: |  4: |  5: |    <- conclusions
    -------------------------------------
0:  |     |     |     |     |     |     |
    -------------------------------------
1:  |     |     |     |     |     |     |
    -------------------------------------
2:  |     |     |     |     |     |     |
    ------------------------------------
3:  |     |     |     |     |     |     |
    -------------------------------------
4:  |     |     |     |     |     |     |
    ------------------------------------
5:  |     |     |     |     |     |     |
    -------------------------------------
'''

for sample in X:
    for premise in range(nbAttr):
        if sample[premise] == 0:  # no premise
            continue
        support[premise][premise] += 1   # total of premise item
        for conclusion in range(nbAttr):
            if premise == conclusion:  
                continue
            if sample[conclusion] == 1:
                # This person also bought the conclusion item
                support[premise][conclusion] += 1
print "Support:"
pprint(support)

# Calculate confidence
for premise in range(nbAttr):
    for conclusion in range(nbAttr):
        if premise == conclusion:
            continue
        v = support[premise][conclusion]
        t = support[premise][premise]
        if t != 0:
            confidence[premise][conclusion] = round(v / t, 2)
print "Confidence"
pprint(confidence)

# print result                              
for premise in range(nbAttr):
    for conclusion in range(nbAttr):
        if premise == conclusion:
            continue
        printRule()
