import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.cluster import AgglomerativeClustering
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score
from scipy.spatial.distance import pdist
from scipy.cluster.hierarchy import dendrogram, linkage, fcluster
import matplotlib

df = pd.read_csv('dogs.csv')

print(df.head())

features = df.columns[1:]

df.set_index('breed', inplace=True)

scaler = MinMaxScaler().fit(df)
x = pd.DataFrame(scaler.transform(df[features]))
x.columns = features
x.index=df.index

matplotlib.rcParams['font.size']=8

Z = linkage(x, 'average')
print(Z)

fig = plt.figure(figsize=(25, 10))

fig.add_subplot(2,1,1)
dn = dendrogram(Z, labels= x.index, leaf_font_size=8, color_threshold=0, distance_sort=True )
plt.title('Dendogram')

colors = ['red', 'blue', 'green', 'gold', 'm', 'black', 'brown']
fig.add_subplot(2,1,2)
df['label'] = fcluster(Z, t=0.3, criterion='distance')

for i in range(1, max(df['label'])+1):
    cluster = df.loc[df['label']==i]
    plt.scatter(cluster['height'], cluster['weight'], color=colors[i-1], label='Klaster %d' %i)

plt.title('Senka koeficijent %0.3f' % silhouette_score(x, df['label']))
plt.legend()

plt.show()
