
"""
1.calculate Similarity
"""
"""
def strs2ints(strs):
    ints=[]
    for a in strs:
        ints.append(int(a))
    return ints

class DigitReconiger:
    def __init__(self):
        self.alldigit=[]
        self.meandigits=[]
    def readData(self,filename):
        digit0=[];digit1=[];digit2=[];digit3=[];digit4=[]
        digit5=[];digit6=[];digit7=[];digit8=[];digit9=[]
        for line in open(filename):
            rawdata=line.split(',')
            if not str.isdigit(rawdata[0]):
                continue
            rawdata = strs2ints(rawdata)
            label=rawdata.pop(0)
            if label==0:
                digit0.append(rawdata)
            if label==1:
                digit1.append(rawdata)
            if label==2:
                digit2.append(rawdata)
            if label==3:
                digit3.append(rawdata)
            if label==4:
                digit4.append(rawdata)
            if label==5:
                digit5.append(rawdata)
            if label==6:
                digit6.append(rawdata)
            if label==7:
                digit7.append(rawdata)
            if label==8:
                digit8.append(rawdata)
            if label==9:
                digit9.append(rawdata)
        self.alldigit=[digit0,digit1,digit2,digit3,digit4,digit5,digit6,digit7,digit8,digit9]
        del([rawdata,digit0,digit1,digit2,digit3,digit4,digit5,digit6,digit7,digit8,digit9])
#-----------Calculate Similarity-------------
    def train(self):
        n=0
        while n<10:
            mean=[]
            i=0
            while i<784:
                j=0
                pixsum=0
                while j<len(self.alldigit[n]):
                    pixsum=pixsum+self.alldigit[n][j][i]
                    j=j+1
                mean.append(pixsum/len(self.alldigit[n]))
                i=i+1
            self.meandigits.append(mean)
            n=n+1
    def predict(self,testDigits):
        n=0
        scores=[]
        while n<10:
            targeDigits=self.meandigits[n]
            score=0
            i=0
            while i<784:
                if testDigits[i]>0 and targeDigits[i]>0:
                    score=score+testDigits[i]*targeDigits[i]
                if testDigits[i]>0 and targeDigits[i]==0:
                    score=score-testDigits[i]*testDigits[i]
                if targeDigits[i]>0 and testDigits[i]==0:
                    score=score-targeDigits[i]*targeDigits[i]
                i=i+1
            scores.append(score)
            n=n+1
        return scores.index(max(scores))
print("----DR-------")
DR=DigitReconiger()
DR.readData("../input/train.csv")
print("----training-------")
DR.train()
print("----training done!-------")
fw=open("sample_submission.csv",'w')
print("----testing!-------")
fw.write("ImageId,Label\n")
i=1
for line in open("../input/test.csv"):
    rawdata=line.split(',')
    if not str.isdigit(rawdata[0]):
        continue
    rawdata = strs2ints(rawdata)
    p=DR.predict(rawdata)
    fw.write(str(i)+','+str(p)+'\n')
    i=i+1
fw.flush()
print("-----done!----------")
"""
"""
2.svm
"""
from sklearn import svm

def binaryzation(values):
    a=[]
    for v in values:
        if v >140:
            a.append(1)
        else:
            a.append(0)
    return a

values=[]
labels=[]
i=1
for item in open("../input/train.csv",'r'):
    if i>5000:
        break
    item=item.split(',')
    if not str.isdigit(item[0]):#skip first line
        continue
    item=[int(j)for j in item]
    labels.append(item.pop(0))
    values.append(item)
    i=i+1

print("----training-------")
clf=svm.SVC()
clf.fit(values,labels)

print("----training done!-------")
#read testdata
testdata=[]
for line in open("../input/test.csv"):
    rawdata=line.split(',')
    if not str.isdigit(rawdata[0]):
        continue
    rawdata=[int(j)for j in rawdata]
    testdata.append(rawdata)
print("----testing!-------")
#prediction
result=clf.predict(testdata)

#write to resule file
fw=open("sample_submission.csv",'w')
fw.write("ImageId,Label\n")
i=0
while i<len(testdata):
    fw.write(str(i+1)+','+str(result[i])+'\n')
    i=i+1
fw.flush()
fw.close()
print("-----done!----------")


