print "Hello guys!"

#legge i dati
cl_data=[line.split(',') for line in file('contact-lenses.csv')]
for c, line in enumerate(cl_data):
    cl_data[c]=[s.strip() for s in line]
cl_data_names=cl_data[0]
cl_data = cl_data[1:]

#calcola la frequenza di un certa coppia (att,val)
def IN(data, a, v):
    return [row for row in data if row[a]==v]

def IN_freq(data,a,v):
    return len(IN(data,a,v))

#calcola il numero di righe con coppie (a1,v1) e (a2,v2)
def AND_find(data, a1, v1, a2, v2):
    return [row for row in data if (row[a1]==v1 and row[a2]==v2)]

def AND_freq(data, a1, v1, a2, v2):
    return len(AND_find(data,a1,v1,a2,v2))

#calcola il numero di righe con coppie (a1,v1) o (a2,v2)
def OR_find(data, a1, v1, a2, v2):
    return [row for row in data if (row[a1]==v1 or row[a2]==v2)]
               
def OR_freq(data, a1, v1, a2, v2):
    return len(OR_find(data,a1,v1,a2,v2))

def PS(data, a1, v1, a2, v2):
    return float(AND_freq(data,a1,v1,a2,v2))

def Dice(data, a1, v1, a2, v2):
    return float(AND_freq(data,a1,v1,a2,v2))/(IN_freq(data,a1,v1)+IN_freq(data,a2,v2))

def Jaccard(data, a1, v1, a2, v2):
    return float(AND_freq(data,a1,v1,a2,v2))/OR_freq(data,a1,v1,a2,v2)

def OverlapCoef(data, a1, v1, a2, v2):
    return float(AND_freq(data,a1,v1,a2,v2))/min(IN_freq(data,a1,v1),IN_freq(data,a2,v2))


print IN_freq(cl_data, 0, "presbyopic")
print IN_freq(cl_data, 2, "yes")
print OR_freq(cl_data, 0, "presbyopic", 2, "yes")
print AND_freq(cl_data, 0, "presbyopic", 2, "yes")
print PS(cl_data, 0, "presbyopic", 2, "yes")
print Dice(cl_data, 0, "presbyopic", 2, "yes")
print Jaccard(cl_data, 0, "presbyopic", 2, "yes")
print OverlapCoef(cl_data, 0, "presbyopic", 2, "yes")

def Values(data):
    v=[]
    for row in range(len(data[0])):
        vv={}
        for col in range(len(data)):
            vv[data[col][row]]=1
        v.append(vv)
    return v

def Values2(data_names,data):
    v={}
    for col in range(len(data[0])):
        for row in range(len(data)):
            v[(data_names[col],data[row][col])]=1
    return v

def CompSims(fun, data_names, data, c):
    res={}
    v=Values2(data_names,data)
    for (a1,v1) in v:
        for (a2,v2) in v:
            if a2==c:
                res[(a1,v1),(a2,v2)]=Jaccard(data,data_names.index(a1),v1,data_names.index(a2),v2)
    res_list=res.items()
    res_list.sort()
    for i in res_list:
        print i


        
        
