# 5ISS - Analyse et Traitement de Données 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 (démarrant par `tpX` avec X la partie du tp) 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 : ```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 : ```shell python3 -m venv ./venv pip install -r ./requirements.txt ``` Chaque scripte suppose que des jeux de données venant du [benchmark de deric](https://github.com/deric/clustering-benchmark) sont disponibles dans le dossier `artificial`. L'environnement est maintenant prêt. ## Fonctionnement général Chaque script va générer les graphes de résultat dans le dossier `./IMG`. Le dossier `./IMG/DATA_VISUALISATION` contient les graphes des jeux de données brutes et mises à l'échelle, sans clustering. Ensuite, nous avons un dossier par algorithme. Chacun contient ensuite un dossier par jeu de donnée. Enfin, ces jeux de données possèdent un dossier `CLUSTERS` contenant les graphes de clusters et un dossier `EVALUATIONS` contenant les métriques d'évaluation. Chaque script peut être configuré à l'aide de plusieurs variables : - `dataset_name`: le nom du dataset à utiliser - `path`: le chemin vers le dossier contenant les dataset Certains scripts possèdent d'autres variables de configurations expliquées dans la suite. ## Parties du TP ### K-Means Cette partie se lance à l'aide de la commande suivante : ```shell python3 tp1-kmeans.py ``` Ce script va appliquer l'algorithme K-Means sur le dataset donné pour k variant de 2 à 49. ### Agglomerative Cette partie se lance à l'aide de la commande suivante : ```shell python3 tp2-agglo.py ``` Ce script possède un fonctionnement analogue au précédent, mais utilisant un algorithme agglomerative. Une variable de configuration supplémentaire est disponible : - `linkage`: le type de linkage à utiliser ### DBSCAN Cette partie se lance à l'aide de la commande suivante : ```shell python3 tp3-dbscan.py ``` Ce script possède un fonctionnement analogue aux précédents, mais utilisant un algorithme DBSCAN. ### Mean Shift Nous devions choisir un autre algorithme en plus des trois précédents. Nous avons donc choisi Mean Shift. Cette partie se lance à l'aide de la commande suivante : ```shell python3 tp4-mean-shift.py ``` Ce script possède un fonctionnement analogue aux précédents, mais utilisant un algorithme de Mean Shift. ### Jeu artificiel Cette partie contient 2 scripts. Le premier sert à trouver un epsilon adapté pour dbscan et se lance avec la commande suivante : ```shell python3 tp5-preprocessing.py ``` Le deuxième script applique les quatre algorithmes précédents sur une liste de jeux de données et se lance avec la commande suivante : ```shell python3 tp5-artificial-dataset.py ``` Deux variables de configuration supplémentaire sont disponibles : - `dataset_name_list`: la liste de datasets à utiliser - `eps_list`: la liste des epsilon que dbscan doit utiliser pour chaque dataset ### Jeu réel Cette dernière partie se comporte comme la précédente, mais sur un jeu de donnée réel. Un script de pre processing pour trouver le bon epsilon est donc disponible et se lance en utilisant la commande suivante : ```shell python3 tp6-preprocessing.py ``` Le dernier script permet de lancer les quatre algorithmes précédents sur le jeu de donnée réel, lu depuis un fichier csv. Le script va tout d'abord extraire des colonnes pour réduire le nombre de dimensions de ce jeu de donnée. Le script peut être lancé en utilisant la commande suivante : ```shell python3 tp6-real-dataset.py ``` Plusieurs variables de configuration supplémentaire sont disponibles : - `eps`: la valeur d'epsilon à utiliser pour dbscan, identifiée avec le script `tp6-preprocessing.py` - `first_column`: la première colonne à considérer pour l'extraction du csv - `last_column`: la dernière colonne à considérer pour l'extraction du csv