import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score

df = pd.read_csv('dogs.csv')

print(df.head())

features = df.columns[1:]

scaler = MinMaxScaler().fit(df[features])
x = pd.DataFrame(scaler.transform(df[features]))
x.columns = features

colors = ['red', 'green', 'blue', 'gold']

fig = plt.figure(figsize=(5,5))
plt_ind=1
for eps in [0.2, 0.22, 0.26, 0.27,  0.28, 0.3]:
    est = DBSCAN(eps=eps, min_samples=2)
    est.fit(x)
    df['labels'] = est.labels_

    num_clusters = max(est.labels_) + 1

    sp =fig.add_subplot(3,2,plt_ind)

    for j in range(-1,num_clusters):

        if j==-1:
            label = 'noise'
        else:
            label = 'cluster %d' % j

        cluster = df.loc[df['labels'] ==j]
        plt.scatter(cluster['height'], cluster['weight'], color = colors[j], label =label)

    plt.legend()

    plt_ind+=1

plt.tight_layout()
plt.show()


