# 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

dataset_name_list

### 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
