# Shopping3.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():
    image("index.png", 0, 470)
    for i in range(nbAttr + 2):
        line(80 * i, 0, 80 * i, 560)
    for i in range(nbAttr + 2):
        line(0, 80 * i, 560, 80 * i)

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(560, 560))
window(0, 560, 0, 560)
title("Number Of Purchases: " + str(len(X))) 
# show images
for i in range(nbAttr):
   image(attributes[i] + ".png", 0, 400 - 80  * i)
for k in range(nbAttr):
   image(attributes[k] + ".png", 80 * k + 80, 480)
showGrid()

for i in range(nbAttr):
    for k in range(nbAttr):
        if i != k:
            text(80 * (k + 1) + 30, 400 - 80  * i + 45, 
                str(support[i][k]))
            text(80 * (k + 1) + 30, 400 - 80  * i + 25, 
                str(confidence[i][k]))
        else:
            text(80 * (i + 1) + 30, 400 - 80  * i + 35, 
                "(" + str(support[i][i]) + ")")
keep()
