Update file names
This commit is contained in:
parent
262b4cef0c
commit
d5fe64d1a2
3 changed files with 192 additions and 183 deletions
25
README.md
25
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.
|
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`.
|
||||||
|
|
|
@ -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)
|
|
@ -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)
|
Loading…
Reference in a new issue