# -*- coding: utf-8 -*-
"""
Created on Sat Nov 20 21:28:40 2021

@author: huguet
"""
import numpy as np
import time

from scipy.io import arff
from sklearn import cluster, metrics, preprocessing
from myplotlib import print_1d_data, print_2d_data, print_dendrogramme


##################################################################
# READ a data set (arff format)

# Parser un fichier de données au format arff
# datanp est un tableau (numpy) d'exemples avec pour chacun la liste
# des valeurs des features

# Note 1 :
# dans les jeux de données considérés : 2 features (dimension 2 seulement)
# t =np.array([[1,2], [3,4], [5,6], [7,8]])
#
# Note 2 :
# le jeu de données contient aussi un numéro de cluster pour chaque point
# --> IGNORER CETTE INFORMATION ....
#    2d-4c-no9.arff   xclara.arff

path = './artificial/'
dataset_name = "xclara.arff"

print("-----------------------------------------------------------")
print("     Chargement du dataset : " + dataset_name)
databrut = arff.loadarff(open(path + dataset_name, 'r'))
datanp = np.array([[x[0], x[1]] for x in databrut[0]])
print_2d_data(datanp, dataset_name=dataset_name + " brutes", stop=False)

print("-----------------------------------------------------------")
print("     Mise à l'échelle")
scaler = preprocessing.StandardScaler().fit(datanp)
data_scaled = scaler.transform(datanp)
print_2d_data(data_scaled, dataset_name=dataset_name + " scaled", stop=False)

# Types de linkage : single, average, complete, ward linkage
linkage = "complete"
print("-----------------------------------------------------------")
print("     Création du dendrogramme : linkage " + linkage)
print_dendrogramme(data_scaled, dataset_name=dataset_name,
                   linkage=linkage, stop=False)


k = 10
print("-----------------------------------------------------------")
print("     Création clusters : linkage " + linkage + ", k=" + str(k))
tps3 = time.time()
model_scaled = cluster.AgglomerativeClustering(
    n_clusters=k, affinity='euclidean', linkage=linkage)
model_scaled.fit(data_scaled)
# cluster.fit_predict(X)
tps4 = time.time()
print_2d_data(data_scaled, dataset_name=dataset_name,
              method_name="Agglomératif " + linkage, k=k,
              stop=False, c=model_scaled.labels_)

# Some evaluation metrics
silh = metrics.silhouette_score(
    data_scaled, model_scaled.labels_, metric='euclidean')
print("Coefficient de silhouette : ", silh)

########################################################################
# TRY : parameters for dendrogram and hierarchical clustering
# EVALUATION : with several metrics (for several number of clusters)
########################################################################
