Exercice 96 / 100

Projet — Nettoyage de données

Pipeline complet de nettoyage de données

Premier projet : pipeline de nettoyage de données. Objectif : transformer un DataFrame brut (NaN, doublons, types incohérents) en dataset prêt pour l'analyse.

Étapes typiques

1. EXPLORATION df.shape, df.info(), df.head(), df.describe() df.isnull().sum(), df.duplicated().sum()
2. SUPPRESSION DES DOUBLONS df = df.drop_duplicates()
3. TRAITEMENT DES NAN - supprimer : df.dropna(subset=['col_critique']) - remplir : df['col'] = df['col'].fillna(strategie)
4. HARMONISATION DES TYPES df['age'] = df['age'].astype(int) df['date'] = pd.to_datetime(df['date'])
5. STANDARDISATION DES VALEURS df['ville'] = df['ville'].str.strip().str.title()

Stratégies d'imputation par colonne

Numérique continu → médiane (robuste aux outliers) ou moyenne Numérique discret → mode Catégoriel → mode ou catégorie 'Inconnu' Selon un groupe → groupby + transform('median')
Remplir un trou ne se fait pas au hasard : une colonne continue prend sa médiane, une colonne discrète son mode, une colonne de texte une catégorie « Inconnu », et parfois la médiane de son propre groupe

Documenter le choix d'imputation : il peut influencer fortement les résultats d'analyse.

Exemple complet

import pandas as pd import numpy as np
np.random.seed(42) n = 100 df = pd.DataFrame({ 'nom': [f'User_{i}' for i in range(n)], 'age': np.random.choice([np.nan, *range(18, 65)], n), 'salaire': np.random.choice([np.nan, *range(25000, 80000, 1000)], n), 'dept': np.random.choice(['Tech', 'RH', 'Finance', None], n), })
print('Avant:') print(f' Shape: {df.shape}') print(f' NaN: {df.isnull().sum().sum()}')
# imputation df['age'] = df['age'].fillna(df['age'].median()) df['salaire'] = df['salaire'].fillna(df.groupby('dept')['salaire'].transform('median')) df['salaire'] = df['salaire'].fillna(df['salaire'].median()) # restant df['dept'] = df['dept'].fillna('Inconnu')
print('Après:') print(f' NaN: {df.isnull().sum().sum()}') print(f' Stats salaire: mean={df["salaire"].mean():.0f}, median={df["salaire"].median():.0f}')

Validation finale

- aucune NaN inattendue - types corrects (dtypes) - valeurs aberrantes traitées - cohérence métier (âge >= 0, etc.)

En production, encapsuler ce pipeline en une fonction (ou un Pipeline sklearn avec ColumnTransformer) pour la réutiliser sur de nouveaux fichiers sans tout réécrire.

exercise.py

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →