From d5fe64d1a2d9ba181d5bc652f5e44ad487294fc9 Mon Sep 17 00:00:00 2001 From: Arnaud Vergnet Date: Thu, 6 Jan 2022 17:04:18 +0100 Subject: [PATCH] Update file names --- README.md | 25 ++- tp1-read-plot-5iss.py => tp1-kmeans.py | 158 +++++++------- ...n-dendrogram-agglo-1val.py => tp2-agglo.py | 192 +++++++++--------- 3 files changed, 192 insertions(+), 183 deletions(-) rename tp1-read-plot-5iss.py => tp1-kmeans.py (97%) rename tp2-read-standardization-dendrogram-agglo-1val.py => tp2-agglo.py (97%) diff --git a/README.md b/README.md index 2a7e0ce..312b60c 100644 --- a/README.md +++ b/README.md @@ -4,30 +4,30 @@ Paul Faure - Arnaud Vergnet Ce dépôt contient les sources utilisées pour le TP de 5ISS en Analyse et Traitement de Données. -Il comprend un fichier par partie de TP (`tp1-read-plot-5iss.py`, `tp2-read-standardization-dendrogram-agglo-1val.py`) et deux fichiers esrvant de librairie commune (`mydatalib.py` pour le traitement de données, `myplotlib.py` pour l'affichage de graphes). +Il comprend un fichier par partie de TP (`tp1-kmeans.py.py`, `tp2-agglo.py.py` et `tp3-dbscan.py`) et deux fichiers servant de librairie commune (`mydatalib.py` pour le traitement de données, `myplotlib.py` pour l'affichage de graphes). ## Installation -Ce TP utilise Python >3.8. Pour démarrer, cloner le dépôt et se déplacer dedans: +Ce TP utilise Python >3.8. Pour démarrer, cloner le dépôt et se déplacer dedans : ```shell git clone https://git.etud.insa-toulouse.fr/vergnet/tp-analyse-donnees.git && cd tp-analyse-donnees ``` -Ensuite créer un environnement virtuel et installer les dépendances: +Ensuite créer un environnement virtuel et installer les dépendances : ```shell python3 -m venv ./venv pip install -r ./requirements.txt ``` -L'environnement es tmaintenant prêt. +L'environnement est maintenant prêt. ## TP1 -Ce tp se lance à l'aide de la commande suivante: +Ce tp se lance à l'aide de la commande suivante : ```shell -python3 tp1-read-plot-5iss.py +python3 tp1-kmeans.py ``` Il suppose que des jeux de données sont disponibles dans le dossier `artificial`. Il va tout d'abord créer dans le dossier `./IMG/DATA_VISUALISATION` les images associées aux graphes des jeux de données golfball, xclara, et xclara après une mise à l'échelle. @@ -36,9 +36,18 @@ Ensuite, il va appliquer l'algorithme K-Means sur le dataset xclara pour k varia ## TP2 -Ce tp se lance à l'aide de la commande suivante: +Ce tp se lance à l'aide de la commande suivante : ```shell -python3 tp2-read-standardization-dendrogram-agglo-1val.py +python3 tp2-agglo.py ``` Ce script possède un fonctionnement analogue au précédent, mais utilisant un algorithme agglomerative. Les graphes résultants sont donc sauvegardés dans `./IMG/agglomerative_complete`. + +## TP3 + +Ce tp se lance à l'aide de la commande suivante : +```shell +python3 tp2-dbscan.py +``` + +Ce script possède un fonctionnement analogue aux précédents, mais utilisant un algorithme DBSCAN. Les graphes résultants sont donc sauvegardés dans `./IMG/dbscan`. diff --git a/tp1-read-plot-5iss.py b/tp1-kmeans.py similarity index 97% rename from tp1-read-plot-5iss.py rename to tp1-kmeans.py index 3486af4..374216e 100644 --- a/tp1-read-plot-5iss.py +++ b/tp1-kmeans.py @@ -1,79 +1,79 @@ -# -*- coding: utf-8 -*- -""" -Created on Fri Nov 19 23:08:23 2021 - -@author: pfaure -""" - - -from myplotlib import print_1d_data, print_2d_data, print_3d_data -from mydatalib import (extract_data_2d, extract_data_3d, scale_data, - apply_kmeans, evaluate) - - -path = './artificial/' -dataset_name = "xclara" - -save = True - -# Extraction et visualisation d'un dataset 2D -data = extract_data_2d(path + dataset_name) -print_2d_data(data, dataset_name=dataset_name+"_brute", stop=False, save=save) - -# Extraction et visualisation d'un dataset 3D -data_golfball = extract_data_3d(path+"golfball") -print_3d_data(data_golfball, dataset_name="golfball", stop=False, save=save) - -# Scaling des data 2D et visualisation -data_scaled = scale_data(data) -print_2d_data(data_scaled, dataset_name=dataset_name + - "_scaled", stop=False, save=save) - -# Application de k-means pour plusieurs valeurs de k -# et evaluation de la solution -k = [] -durations = [] -silouettes = [] -daviess = [] -calinskis = [] -inerties = [] -iterations = [] -for i in range(2, 50): - # Application de k-means - (model, duration) = apply_kmeans(data_scaled, k=i, init="k-means++") - # Affichage des clusters - print_2d_data(data_scaled, dataset_name=dataset_name, - method_name="k-means", k=i, c=model.labels_, - stop=False, save=save) - # Evaluation de la solution de clustering - (silouette, davies, calinski) = evaluate(data_scaled, model) - # Enregistrement des valeurs - k += [i] - durations += [duration] - silouettes += [silouette] - daviess += [davies] - calinskis += [calinski] - inerties += [model.inertia_] - iterations += [model.n_iter_] - -# Affichage des résultats -print_1d_data(k, k, x_name="k", y_name="k", dataset_name=dataset_name, - method_name="k-means", stop=False, save=save) -print_1d_data(k, durations, x_name="k", y_name="temps_de_calcul", y_unit="ms", - dataset_name=dataset_name, method_name="k-means", - stop=False, save=save) -print_1d_data(k, silouettes, x_name="k", y_name="coeficient_de_silhouette", - dataset_name=dataset_name, method_name="k-means", - stop=False, save=save) -print_1d_data(k, daviess, x_name="k", y_name="coeficient_de_Davies", - dataset_name=dataset_name, method_name="k-means", - stop=False, save=save) -print_1d_data(k, calinskis, x_name="k", y_name="coeficient_de_Calinski", - dataset_name=dataset_name, method_name="k-means", - stop=False, save=save) -print_1d_data(k, inerties, x_name="k", y_name="inertie", - dataset_name=dataset_name, method_name="k-means", - stop=False, save=save) -print_1d_data(k, iterations, x_name="k", y_name="nombre_d_iterations", - dataset_name=dataset_name, method_name="k-means", - stop=True, save=save) +# -*- coding: utf-8 -*- +""" +Created on Fri Nov 19 23:08:23 2021 + +@author: pfaure +""" + + +from myplotlib import print_1d_data, print_2d_data, print_3d_data +from mydatalib import (extract_data_2d, extract_data_3d, scale_data, + apply_kmeans, evaluate) + + +path = './artificial/' +dataset_name = "xclara" + +save = True + +# Extraction et visualisation d'un dataset 2D +data = extract_data_2d(path + dataset_name) +print_2d_data(data, dataset_name=dataset_name+"_brute", stop=False, save=save) + +# Extraction et visualisation d'un dataset 3D +data_golfball = extract_data_3d(path+"golfball") +print_3d_data(data_golfball, dataset_name="golfball", stop=False, save=save) + +# Scaling des data 2D et visualisation +data_scaled = scale_data(data) +print_2d_data(data_scaled, dataset_name=dataset_name + + "_scaled", stop=False, save=save) + +# Application de k-means pour plusieurs valeurs de k +# et evaluation de la solution +k = [] +durations = [] +silouettes = [] +daviess = [] +calinskis = [] +inerties = [] +iterations = [] +for i in range(2, 50): + # Application de k-means + (model, duration) = apply_kmeans(data_scaled, k=i, init="k-means++") + # Affichage des clusters + print_2d_data(data_scaled, dataset_name=dataset_name, + method_name="k-means", k=i, c=model.labels_, + stop=False, save=save) + # Evaluation de la solution de clustering + (silouette, davies, calinski) = evaluate(data_scaled, model) + # Enregistrement des valeurs + k += [i] + durations += [duration] + silouettes += [silouette] + daviess += [davies] + calinskis += [calinski] + inerties += [model.inertia_] + iterations += [model.n_iter_] + +# Affichage des résultats +print_1d_data(k, k, x_name="k", y_name="k", dataset_name=dataset_name, + method_name="k-means", stop=False, save=save) +print_1d_data(k, durations, x_name="k", y_name="temps_de_calcul", y_unit="ms", + dataset_name=dataset_name, method_name="k-means", + stop=False, save=save) +print_1d_data(k, silouettes, x_name="k", y_name="coeficient_de_silhouette", + dataset_name=dataset_name, method_name="k-means", + stop=False, save=save) +print_1d_data(k, daviess, x_name="k", y_name="coeficient_de_Davies", + dataset_name=dataset_name, method_name="k-means", + stop=False, save=save) +print_1d_data(k, calinskis, x_name="k", y_name="coeficient_de_Calinski", + dataset_name=dataset_name, method_name="k-means", + stop=False, save=save) +print_1d_data(k, inerties, x_name="k", y_name="inertie", + dataset_name=dataset_name, method_name="k-means", + stop=False, save=save) +print_1d_data(k, iterations, x_name="k", y_name="nombre_d_iterations", + dataset_name=dataset_name, method_name="k-means", + stop=True, save=save) diff --git a/tp2-read-standardization-dendrogram-agglo-1val.py b/tp2-agglo.py similarity index 97% rename from tp2-read-standardization-dendrogram-agglo-1val.py rename to tp2-agglo.py index 3b0591d..be7f398 100644 --- a/tp2-read-standardization-dendrogram-agglo-1val.py +++ b/tp2-agglo.py @@ -1,96 +1,96 @@ -# -*- coding: utf-8 -*- -""" -Created on Sat Nov 20 21:28:40 2021 - -@author: huguet -""" - -from myplotlib import print_1d_data, print_2d_data, print_dendrogramme -from mydatalib import (extract_data_2d, scale_data, - apply_agglomerative_clustering, evaluate) - - -################################################################## -# 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" -save = True - -print("-----------------------------------------------------------") -print(" Chargement du dataset : " + dataset_name) -data = extract_data_2d(path + dataset_name) -print_2d_data(data, dataset_name=dataset_name + - "_brutes", stop=False, save=save) - -print("-----------------------------------------------------------") -print(" Mise à l'échelle") -data_scaled = scale_data(data) -print_2d_data(data_scaled, dataset_name=dataset_name + - "_scaled", stop=False, save=save) - -# 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_max = 10 -print("-----------------------------------------------------------") -print(" Création clusters : linkage " + - linkage + ", k=(0 to " + str(k_max) + ")") -# Application du clustering agglomeratif pour plusieurs valeurs de k -# et evaluation de la solution -k = [] -durations = [] -silouettes = [] -daviess = [] -calinskis = [] -for i in range(2, k_max): - # Application du clustering agglomeratif - (model, duration) = apply_agglomerative_clustering( - data_scaled, k=i, linkage=linkage) - # Affichage des clusters - print_2d_data(data_scaled, dataset_name=dataset_name, - method_name="agglomerative_" + linkage, k=i, - stop=False, save=save, c=model.labels_) - # Evaluation de la solution de clustering - (silouette, davies, calinski) = evaluate(data_scaled, model) - # Enregistrement des valeurs - k += [i] - durations += [duration] - silouettes += [silouette] - daviess += [davies] - calinskis += [calinski] - -# Affichage des résultats -print_1d_data(k, k, x_name="k", y_name="k", dataset_name=dataset_name, - method_name="agglomerative_" + linkage, stop=False, save=save) -print_1d_data(k, durations, x_name="k", y_name="temps_de_calcul", y_unit="ms", - dataset_name=dataset_name, - method_name="agglomerative_" + linkage, stop=False, save=save) -print_1d_data(k, silouettes, x_name="k", y_name="coeficient_de_silhouette", - dataset_name=dataset_name, - method_name="agglomerative_" + linkage, stop=False, save=save) -print_1d_data(k, daviess, x_name="k", y_name="coeficient_de_Davies", - dataset_name=dataset_name, - method_name="agglomerative_" + linkage, stop=False, save=save) -print_1d_data(k, calinskis, x_name="k", y_name="coeficient_de_Calinski", - dataset_name=dataset_name, - method_name="agglomerative_" + linkage, stop=False, save=save) +# -*- coding: utf-8 -*- +""" +Created on Sat Nov 20 21:28:40 2021 + +@author: huguet +""" + +from myplotlib import print_1d_data, print_2d_data, print_dendrogramme +from mydatalib import (extract_data_2d, scale_data, + apply_agglomerative_clustering, evaluate) + + +################################################################## +# 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" +save = True + +print("-----------------------------------------------------------") +print(" Chargement du dataset : " + dataset_name) +data = extract_data_2d(path + dataset_name) +print_2d_data(data, dataset_name=dataset_name + + "_brutes", stop=False, save=save) + +print("-----------------------------------------------------------") +print(" Mise à l'échelle") +data_scaled = scale_data(data) +print_2d_data(data_scaled, dataset_name=dataset_name + + "_scaled", stop=False, save=save) + +# 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_max = 10 +print("-----------------------------------------------------------") +print(" Création clusters : linkage " + + linkage + ", k=(0 to " + str(k_max) + ")") +# Application du clustering agglomeratif pour plusieurs valeurs de k +# et evaluation de la solution +k = [] +durations = [] +silouettes = [] +daviess = [] +calinskis = [] +for i in range(2, k_max): + # Application du clustering agglomeratif + (model, duration) = apply_agglomerative_clustering( + data_scaled, k=i, linkage=linkage) + # Affichage des clusters + print_2d_data(data_scaled, dataset_name=dataset_name, + method_name="agglomerative_" + linkage, k=i, + stop=False, save=save, c=model.labels_) + # Evaluation de la solution de clustering + (silouette, davies, calinski) = evaluate(data_scaled, model) + # Enregistrement des valeurs + k += [i] + durations += [duration] + silouettes += [silouette] + daviess += [davies] + calinskis += [calinski] + +# Affichage des résultats +print_1d_data(k, k, x_name="k", y_name="k", dataset_name=dataset_name, + method_name="agglomerative_" + linkage, stop=False, save=save) +print_1d_data(k, durations, x_name="k", y_name="temps_de_calcul", y_unit="ms", + dataset_name=dataset_name, + method_name="agglomerative_" + linkage, stop=False, save=save) +print_1d_data(k, silouettes, x_name="k", y_name="coeficient_de_silhouette", + dataset_name=dataset_name, + method_name="agglomerative_" + linkage, stop=False, save=save) +print_1d_data(k, daviess, x_name="k", y_name="coeficient_de_Davies", + dataset_name=dataset_name, + method_name="agglomerative_" + linkage, stop=False, save=save) +print_1d_data(k, calinskis, x_name="k", y_name="coeficient_de_Calinski", + dataset_name=dataset_name, + method_name="agglomerative_" + linkage, stop=False, save=save)