TP long#
try:
import pandas,seaborn
except ModuleNotFoundError:
!pip3 install --quiet pandas seaborn
import numpy, matplotlib.pyplot as plt,pandas as pd,seaborn
import warnings
warnings.filterwarnings('ignore')
Le notebook et les données sont téléchargeables ici
Jeu de données#
L’objectif de ce jeu de données est de prédire une maladie rénale à partir de mesures effectuées sur des individus. Les données ont été recueillies sur une période de deux mois en Inde et comportent 25 caractéristiques
Age(en années)
Pression sanguine (mm/Hg)
Densité (qualitative ordinale, parmi sg - (1.005,1.010,1.015,1.020,1)
Albumine (qualitative ordinale, parmi (0,1,2,3,4,5))
Sucre (qualitative ordinale, parmi (0,1,2,3,4,5))
Globules rouge (qualitative nominale parmi (normal,abnormal))
Cellules Pus (qualitative nominale parmi (normal,abnormal))
Amas de cellules Pus (qualitative nominale parmi (présent,absent))
Bactérie (qualitative nominale parmi (présent,absent))
Glucose (mgs/dl)
Urée dans le sang (mgs/dl)
Créatinine (mgs/dl)
Sodium (mEq/L)
Potassium (mEq/L)
Hémoglobine (gms)
Volume cellulaire
Comptage globules blancs
Comptage globules rouge
Hypertension (qualitative nominale parmi (oui,non))
Diabète (qualitative nominale parmi (oui,non))
Maladie coronarienne (qualitative nominale parmi (oui,non))
Appetit (qualitative nominale parmi (normal,pauvre))
Oedeme (qualitative nominale parmi (oui,non))
Anémie (qualitative nominale parmi (oui,non))
Classe (malade : ckd, pas malade : notckd)d)
data = pd.read_csv('./dataTP.csv')
data.head()
id | age | bp | sg | al | su | rbc | pc | pcc | ba | ... | pcv | wc | rc | htn | dm | cad | appet | pe | ane | classification | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 48.0 | 80.0 | 1.020 | 1.0 | 0.0 | NaN | normal | notpresent | notpresent | ... | 44 | 7800 | 5.2 | yes | yes | no | good | no | no | ckd |
1 | 1 | 7.0 | 50.0 | 1.020 | 4.0 | 0.0 | NaN | normal | notpresent | notpresent | ... | 38 | 6000 | NaN | no | no | no | good | no | no | ckd |
2 | 2 | 62.0 | 80.0 | 1.010 | 2.0 | 3.0 | normal | normal | notpresent | notpresent | ... | 31 | 7500 | NaN | no | yes | no | poor | no | yes | ckd |
3 | 3 | 48.0 | 70.0 | 1.005 | 4.0 | 0.0 | normal | abnormal | present | notpresent | ... | 32 | 6700 | 3.9 | yes | no | no | poor | yes | yes | ckd |
4 | 4 | 51.0 | 80.0 | 1.010 | 2.0 | 0.0 | normal | normal | notpresent | notpresent | ... | 35 | 7300 | 4.6 | no | no | no | good | no | no | ckd |
5 rows × 26 columns
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 400 entries, 0 to 399
Data columns (total 26 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 id 400 non-null int64
1 age 391 non-null float64
2 bp 388 non-null float64
3 sg 353 non-null float64
4 al 354 non-null float64
5 su 351 non-null float64
6 rbc 248 non-null object
7 pc 335 non-null object
8 pcc 396 non-null object
9 ba 396 non-null object
10 bgr 356 non-null float64
11 bu 381 non-null float64
12 sc 383 non-null float64
13 sod 313 non-null float64
14 pot 312 non-null float64
15 hemo 348 non-null float64
16 pcv 330 non-null object
17 wc 295 non-null object
18 rc 270 non-null object
19 htn 398 non-null object
20 dm 398 non-null object
21 cad 398 non-null object
22 appet 399 non-null object
23 pe 399 non-null object
24 ane 399 non-null object
25 classification 400 non-null object
dtypes: float64(11), int64(1), object(14)
memory usage: 81.4+ KB
1. Analyse exploratoire#
Nettoyage des données#
Les données, comme tout jeu de données réel, comporte de nombreuses imperfections :
données manquantes (Nan) dans les données
erreurs de lecture du fichier initial dans plusieurs colonnes (un “\t” est encore présent, comme par exemple dans la colonne
Classe
(“ckd\t” à la place de “ckd”))possiblement données aberrantes.
Il est de plus nécessaire de faire les pré-traitements habituels pour assurer une analyse de données pertinente :
gestion des variables qualitatives
normalisation
gestion des variables entières / flottantes
Votre premier travail consiste donc à régler tous ces points pour obtenir un fichier de données propre. Vous devez donc mettre en jeu des techniques d”imputation, de normalisation ou encore de gestion de données aberrantes.
1.1. Analyse univariée / bivariée#
Vous explorerez ici les caractéristiques des variables (statistique univariée) et des relations entre couples de variables (statistiques bivariée) :
Vous en déduirez des actions à prendre sur ces variables (suppression d’une colonne, application d’une fonction mathématique à une colonne,…)
1.2. Sélection / extraction de variables#
1.2.1. Sélection de variables#
Vous appliquerez ici les méthodes classiques de sélection de variables sur les variables (éventuellement pré traitées par le point 1.1.) pour en extraire un jeu de données à \(d<<25\) variables initiales à analyser.
1.2.2. Extraction de variable#
Vous analyserez le jeu de données (éventuellement pré traitées par le point 1.1.) à l’aide d’une ACP et en déduirez \(d<<25\) nouvelles variables à analyser
2. Problème de classification#
Le premier problème qui nous intéresse est de pouvoir construire un modèle de classification non supervisée et de comparer ses résultats à la « vraie » classification proposée dans le dernière colonne. Vous construirez donc des modèles de classification à partir des éléments vus en cours , optimiserez les paramètres de ces algorithmes (nombre de classes dans les k-means par exemple) et évaluerez leur performance. Vous travaillerez d’une part sur les variables retenues par sélection de variables, et d’autre part sur les variables calculées par extraction de variables. Vous comparerez les résultats de classification obtenus.
3. Problème de régression#
Le second problème concerne la régression linéaire d’une ou plusieurs des colonnes en fonction des autres régression. Vous vous intéresserez donc à :
la régression simple de la colonne 12 en fonction des autres colonnes
la régression multiple des colonnes 16, 17 et 18 en fonction des autres colonnes