TP long#

try:
    import pandas,seaborn
except ModuleNotFoundError: 
    !pip3 install --quiet pandas
import numpy, matplotlib.pyplot as plt,pandas as pd,seaborn
import warnings
warnings.filterwarnings('ignore')

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

  1. Age(en années)

  2. Pression sanguine (mm/Hg)

  3. Densité (qualitative ordinale, parmi sg - (1.005,1.010,1.015,1.020,1)

  4. Albumine (qualitative ordinale, parmi (0,1,2,3,4,5))

  5. Sucre (qualitative ordinale, parmi (0,1,2,3,4,5))

  6. Globules rouge (qualitative nominale parmi (normal,abnormal))

  7. Cellules Pus (qualitative nominale parmi (normal,abnormal))

  8. Amas de cellules Pus (qualitative nominale parmi (présent,absent))

  9. Bactérie (qualitative nominale parmi (présent,absent))

  10. Glucose (mgs/dl)

  11. Urée dans le sang (mgs/dl)

  12. Créatinine (mgs/dl)

  13. Sodium (mEq/L)

  14. Potassium (mEq/L)

  15. Hémoglobine (gms)

  16. Volume cellulaire

  17. Comptage globules blancs

  18. Comptage globules rouge

  19. Hypertension (qualitative nominale parmi (oui,non))

  20. Diabète (qualitative nominale parmi (oui,non))

  21. Maladie coronarienne (qualitative nominale parmi (oui,non))

  22. Appetit (qualitative nominale parmi (normal,pauvre))

  23. Oedeme (qualitative nominale parmi (oui,non))

  24. Anémie (qualitative nominale parmi (oui,non))

  25. Classe (malade : ckd, pas malade : notckd)d)

data = pd.read_csv('../data/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