import pandas as pd
import sklearn.metrics as met
from sklearn import preprocessing
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

df = pd.read_csv("dogs.csv")

#prikaz imena kolona + 5 prvih instanci
print('Prvih 5 instanci', df.head(), sep='\n')
print('\n\n')


featurs = df.columns[1:3].tolist()

#print(featurs)
x_original=df[featurs]

#standardizacija atributa
x=pd.DataFrame(preprocessing.scale(x_original))


#normalizacija
#x=pd.DataFrame(preprocessing.MinMaxScaler().fit_transform(x_original))

#dodeljivanje imena kolonama
x.columns = featurs

"""
K-means

parametri:

n_clusters : broj klastera
             default: 8
max_iter :   maksimalan broj iteracija
             default: 300
n_init :     broj izvrsavanja algoritma sa razlicitim inicijalnim vrednostima
            default: 10
init :      metodi za inicijalizaciju {‘k-means++’, ‘random’ or an ndarray}
            default:‘k-means++’:
tol :       tolerancija za konvergenciju
            default: 1e-4

atributi:

cluster_centers_ : centri klastera
labels_ : klasteri svake instance
inertia_ : suma rastojanja izmedju instance i najblizeg centorida
"""


colors = ['red', 'green', 'gold', 'blue', 'black']
fig = plt.figure()
plt_ind=1

for i in range(2,5):
    for init in ['k-means++', 'random']:
        est=KMeans(n_clusters=i, init=init)
        est.fit(x)
        df['labels']= est.labels_
        #print('Prvih 5 instanci', df.head(), sep='\n')

        fig.add_subplot(3, 2, plt_ind)
        for j in range(0,i):
            cluster= df.loc[lambda x: x['labels'] == j, :]
            plt.scatter(cluster['height'], cluster['weight'], color=colors[j], s=30, marker='o', label="cluster %d"%j)

        plt.legend(loc='lower right')
        plt.title('K-means, num clasters: %d, init: %s, inertia: %.2f' % (i, init,  est.inertia_), fontsize=10)
        plt_ind+=1

plt.tight_layout()
plt.show()
