Update file names

This commit is contained in:
Arnaud Vergnet 2022-01-06 17:04:18 +01:00
parent 262b4cef0c
commit d5fe64d1a2
3 changed files with 192 additions and 183 deletions

View file

@ -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. 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 ## 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 ```shell
git clone https://git.etud.insa-toulouse.fr/vergnet/tp-analyse-donnees.git && cd tp-analyse-donnees 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 ```shell
python3 -m venv ./venv python3 -m venv ./venv
pip install -r ./requirements.txt pip install -r ./requirements.txt
``` ```
L'environnement es tmaintenant prêt. L'environnement est maintenant prêt.
## TP1 ## TP1
Ce tp se lance à l'aide de la commande suivante: Ce tp se lance à l'aide de la commande suivante :
```shell ```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. 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 ## TP2
Ce tp se lance à l'aide de la commande suivante: Ce tp se lance à l'aide de la commande suivante :
```shell ```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`. 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`.

View file

@ -1,79 +1,79 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """
Created on Fri Nov 19 23:08:23 2021 Created on Fri Nov 19 23:08:23 2021
@author: pfaure @author: pfaure
""" """
from myplotlib import print_1d_data, print_2d_data, print_3d_data from myplotlib import print_1d_data, print_2d_data, print_3d_data
from mydatalib import (extract_data_2d, extract_data_3d, scale_data, from mydatalib import (extract_data_2d, extract_data_3d, scale_data,
apply_kmeans, evaluate) apply_kmeans, evaluate)
path = './artificial/' path = './artificial/'
dataset_name = "xclara" dataset_name = "xclara"
save = True save = True
# Extraction et visualisation d'un dataset 2D # Extraction et visualisation d'un dataset 2D
data = extract_data_2d(path + dataset_name) data = extract_data_2d(path + dataset_name)
print_2d_data(data, dataset_name=dataset_name+"_brute", stop=False, save=save) print_2d_data(data, dataset_name=dataset_name+"_brute", stop=False, save=save)
# Extraction et visualisation d'un dataset 3D # Extraction et visualisation d'un dataset 3D
data_golfball = extract_data_3d(path+"golfball") data_golfball = extract_data_3d(path+"golfball")
print_3d_data(data_golfball, dataset_name="golfball", stop=False, save=save) print_3d_data(data_golfball, dataset_name="golfball", stop=False, save=save)
# Scaling des data 2D et visualisation # Scaling des data 2D et visualisation
data_scaled = scale_data(data) data_scaled = scale_data(data)
print_2d_data(data_scaled, dataset_name=dataset_name + print_2d_data(data_scaled, dataset_name=dataset_name +
"_scaled", stop=False, save=save) "_scaled", stop=False, save=save)
# Application de k-means pour plusieurs valeurs de k # Application de k-means pour plusieurs valeurs de k
# et evaluation de la solution # et evaluation de la solution
k = [] k = []
durations = [] durations = []
silouettes = [] silouettes = []
daviess = [] daviess = []
calinskis = [] calinskis = []
inerties = [] inerties = []
iterations = [] iterations = []
for i in range(2, 50): for i in range(2, 50):
# Application de k-means # Application de k-means
(model, duration) = apply_kmeans(data_scaled, k=i, init="k-means++") (model, duration) = apply_kmeans(data_scaled, k=i, init="k-means++")
# Affichage des clusters # Affichage des clusters
print_2d_data(data_scaled, dataset_name=dataset_name, print_2d_data(data_scaled, dataset_name=dataset_name,
method_name="k-means", k=i, c=model.labels_, method_name="k-means", k=i, c=model.labels_,
stop=False, save=save) stop=False, save=save)
# Evaluation de la solution de clustering # Evaluation de la solution de clustering
(silouette, davies, calinski) = evaluate(data_scaled, model) (silouette, davies, calinski) = evaluate(data_scaled, model)
# Enregistrement des valeurs # Enregistrement des valeurs
k += [i] k += [i]
durations += [duration] durations += [duration]
silouettes += [silouette] silouettes += [silouette]
daviess += [davies] daviess += [davies]
calinskis += [calinski] calinskis += [calinski]
inerties += [model.inertia_] inerties += [model.inertia_]
iterations += [model.n_iter_] iterations += [model.n_iter_]
# Affichage des résultats # Affichage des résultats
print_1d_data(k, k, x_name="k", y_name="k", dataset_name=dataset_name, print_1d_data(k, k, x_name="k", y_name="k", dataset_name=dataset_name,
method_name="k-means", stop=False, save=save) method_name="k-means", stop=False, save=save)
print_1d_data(k, durations, x_name="k", y_name="temps_de_calcul", y_unit="ms", print_1d_data(k, durations, x_name="k", y_name="temps_de_calcul", y_unit="ms",
dataset_name=dataset_name, method_name="k-means", dataset_name=dataset_name, method_name="k-means",
stop=False, save=save) stop=False, save=save)
print_1d_data(k, silouettes, x_name="k", y_name="coeficient_de_silhouette", print_1d_data(k, silouettes, x_name="k", y_name="coeficient_de_silhouette",
dataset_name=dataset_name, method_name="k-means", dataset_name=dataset_name, method_name="k-means",
stop=False, save=save) stop=False, save=save)
print_1d_data(k, daviess, x_name="k", y_name="coeficient_de_Davies", print_1d_data(k, daviess, x_name="k", y_name="coeficient_de_Davies",
dataset_name=dataset_name, method_name="k-means", dataset_name=dataset_name, method_name="k-means",
stop=False, save=save) stop=False, save=save)
print_1d_data(k, calinskis, x_name="k", y_name="coeficient_de_Calinski", print_1d_data(k, calinskis, x_name="k", y_name="coeficient_de_Calinski",
dataset_name=dataset_name, method_name="k-means", dataset_name=dataset_name, method_name="k-means",
stop=False, save=save) stop=False, save=save)
print_1d_data(k, inerties, x_name="k", y_name="inertie", print_1d_data(k, inerties, x_name="k", y_name="inertie",
dataset_name=dataset_name, method_name="k-means", dataset_name=dataset_name, method_name="k-means",
stop=False, save=save) stop=False, save=save)
print_1d_data(k, iterations, x_name="k", y_name="nombre_d_iterations", print_1d_data(k, iterations, x_name="k", y_name="nombre_d_iterations",
dataset_name=dataset_name, method_name="k-means", dataset_name=dataset_name, method_name="k-means",
stop=True, save=save) stop=True, save=save)

View file

@ -1,96 +1,96 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """
Created on Sat Nov 20 21:28:40 2021 Created on Sat Nov 20 21:28:40 2021
@author: huguet @author: huguet
""" """
from myplotlib import print_1d_data, print_2d_data, print_dendrogramme from myplotlib import print_1d_data, print_2d_data, print_dendrogramme
from mydatalib import (extract_data_2d, scale_data, from mydatalib import (extract_data_2d, scale_data,
apply_agglomerative_clustering, evaluate) apply_agglomerative_clustering, evaluate)
################################################################## ##################################################################
# READ a data set (arff format) # READ a data set (arff format)
# Parser un fichier de données au format arff # Parser un fichier de données au format arff
# datanp est un tableau (numpy) d'exemples avec pour chacun la liste # datanp est un tableau (numpy) d'exemples avec pour chacun la liste
# des valeurs des features # des valeurs des features
# Note 1 : # Note 1 :
# dans les jeux de données considérés : 2 features (dimension 2 seulement) # 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]]) # t =np.array([[1,2], [3,4], [5,6], [7,8]])
# #
# Note 2 : # Note 2 :
# le jeu de données contient aussi un numéro de cluster pour chaque point # le jeu de données contient aussi un numéro de cluster pour chaque point
# --> IGNORER CETTE INFORMATION .... # --> IGNORER CETTE INFORMATION ....
# 2d-4c-no9.arff xclara.arff # 2d-4c-no9.arff xclara.arff
path = './artificial/' path = './artificial/'
dataset_name = "xclara" dataset_name = "xclara"
save = True save = True
print("-----------------------------------------------------------") print("-----------------------------------------------------------")
print(" Chargement du dataset : " + dataset_name) print(" Chargement du dataset : " + dataset_name)
data = extract_data_2d(path + dataset_name) data = extract_data_2d(path + dataset_name)
print_2d_data(data, dataset_name=dataset_name + print_2d_data(data, dataset_name=dataset_name +
"_brutes", stop=False, save=save) "_brutes", stop=False, save=save)
print("-----------------------------------------------------------") print("-----------------------------------------------------------")
print(" Mise à l'échelle") print(" Mise à l'échelle")
data_scaled = scale_data(data) data_scaled = scale_data(data)
print_2d_data(data_scaled, dataset_name=dataset_name + print_2d_data(data_scaled, dataset_name=dataset_name +
"_scaled", stop=False, save=save) "_scaled", stop=False, save=save)
# Types de linkage : single, average, complete, ward linkage # Types de linkage : single, average, complete, ward linkage
linkage = "complete" linkage = "complete"
print("-----------------------------------------------------------") print("-----------------------------------------------------------")
print(" Création du dendrogramme : linkage " + linkage) print(" Création du dendrogramme : linkage " + linkage)
print_dendrogramme(data_scaled, dataset_name=dataset_name, print_dendrogramme(data_scaled, dataset_name=dataset_name,
linkage=linkage, stop=False) linkage=linkage, stop=False)
k_max = 10 k_max = 10
print("-----------------------------------------------------------") print("-----------------------------------------------------------")
print(" Création clusters : linkage " + print(" Création clusters : linkage " +
linkage + ", k=(0 to " + str(k_max) + ")") linkage + ", k=(0 to " + str(k_max) + ")")
# Application du clustering agglomeratif pour plusieurs valeurs de k # Application du clustering agglomeratif pour plusieurs valeurs de k
# et evaluation de la solution # et evaluation de la solution
k = [] k = []
durations = [] durations = []
silouettes = [] silouettes = []
daviess = [] daviess = []
calinskis = [] calinskis = []
for i in range(2, k_max): for i in range(2, k_max):
# Application du clustering agglomeratif # Application du clustering agglomeratif
(model, duration) = apply_agglomerative_clustering( (model, duration) = apply_agglomerative_clustering(
data_scaled, k=i, linkage=linkage) data_scaled, k=i, linkage=linkage)
# Affichage des clusters # Affichage des clusters
print_2d_data(data_scaled, dataset_name=dataset_name, print_2d_data(data_scaled, dataset_name=dataset_name,
method_name="agglomerative_" + linkage, k=i, method_name="agglomerative_" + linkage, k=i,
stop=False, save=save, c=model.labels_) stop=False, save=save, c=model.labels_)
# Evaluation de la solution de clustering # Evaluation de la solution de clustering
(silouette, davies, calinski) = evaluate(data_scaled, model) (silouette, davies, calinski) = evaluate(data_scaled, model)
# Enregistrement des valeurs # Enregistrement des valeurs
k += [i] k += [i]
durations += [duration] durations += [duration]
silouettes += [silouette] silouettes += [silouette]
daviess += [davies] daviess += [davies]
calinskis += [calinski] calinskis += [calinski]
# Affichage des résultats # Affichage des résultats
print_1d_data(k, k, x_name="k", y_name="k", dataset_name=dataset_name, print_1d_data(k, k, x_name="k", y_name="k", dataset_name=dataset_name,
method_name="agglomerative_" + linkage, stop=False, save=save) method_name="agglomerative_" + linkage, stop=False, save=save)
print_1d_data(k, durations, x_name="k", y_name="temps_de_calcul", y_unit="ms", print_1d_data(k, durations, x_name="k", y_name="temps_de_calcul", y_unit="ms",
dataset_name=dataset_name, dataset_name=dataset_name,
method_name="agglomerative_" + linkage, stop=False, save=save) method_name="agglomerative_" + linkage, stop=False, save=save)
print_1d_data(k, silouettes, x_name="k", y_name="coeficient_de_silhouette", print_1d_data(k, silouettes, x_name="k", y_name="coeficient_de_silhouette",
dataset_name=dataset_name, dataset_name=dataset_name,
method_name="agglomerative_" + linkage, stop=False, save=save) method_name="agglomerative_" + linkage, stop=False, save=save)
print_1d_data(k, daviess, x_name="k", y_name="coeficient_de_Davies", print_1d_data(k, daviess, x_name="k", y_name="coeficient_de_Davies",
dataset_name=dataset_name, dataset_name=dataset_name,
method_name="agglomerative_" + linkage, stop=False, save=save) method_name="agglomerative_" + linkage, stop=False, save=save)
print_1d_data(k, calinskis, x_name="k", y_name="coeficient_de_Calinski", print_1d_data(k, calinskis, x_name="k", y_name="coeficient_de_Calinski",
dataset_name=dataset_name, dataset_name=dataset_name,
method_name="agglomerative_" + linkage, stop=False, save=save) method_name="agglomerative_" + linkage, stop=False, save=save)