# Shopping4.py

from gpanel import *

datafile = "shopping.dat"

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

def showGrid():
    for i in range(nbAttr + 1):
        line(80 * i, 0, 80 * i, 480)
    for i in range(nbAttr + 1):
        line(0, 80 * i, 480, 80 * i)
    lineWidth(4)
    line(80, 0, 80, 480)

X = loadIntData(datafile)
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)]

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

# 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)

# show result
makeGPanel(Size(480, 480))
window(0, 480, 0, 480)
title("Affinity Order")
for i in range(nbAttr):
   image(attributes[i] + ".png", 0, 400 - 80  * i)

for i in range(nbAttr):
    di = {}  # dictionary: index:value
    for k in range(nbAttr):
        if k != i:
            di[k] = confidence[i][k] # insert element
    sortedConclusions = sorted(di, key = di.get) # sort by value
    sortedConclusions.reverse() # largest first
    for k in range(nbAttr - 1):        
        image(attributes[sortedConclusions[k]] + 
            ".png", 80 * k + 80, 400 - 80 * i)
        text(80 * (k + 1) + 5, 402 - 80  * i, \
            str(confidence[i][sortedConclusions[k]]))
showGrid()
keep() # for pygpanel
