Data Wrangling : Guide Complet pour Nettoyer et Transformer des Données avec Python
Updated on
Chaque projet de données commence par la même vérité inconfortable : les données brutes sont désordonnées. Les colonnes ont des formats incohérents. Les dates arrivent sous forme de chaînes. Les enregistrements clients contiennent des doublons. Vous ne pouvez pas construire des modèles, des tableaux de bord ou des rapports fiables sur des données auxquelles vous ne faites pas confiance.
Le data wrangling est le processus de transformation de ces données brutes et peu fiables en quelque chose de propre, structuré et prêt pour l'analyse. Il consomme jusqu'à 80% du temps d'un professionnel des données. Ce guide parcourt l'ensemble du pipeline de data wrangling en utilisant Python et Pandas.
Qu'est-ce que le Data Wrangling ?
Le data wrangling (aussi appelé data munging) est le processus de découverte, structuration, nettoyage, enrichissement et validation des données brutes.
| Terme | Portée | Focus | Outils Typiques |
|---|---|---|---|
| Data Wrangling | Large | Exploration, remodelage, nettoyage | Pandas, Polars, Python |
| Data Cleaning | Étroit -- sous-ensemble du wrangling | Corriger les erreurs, valeurs manquantes | Pandas, OpenRefine, SQL |
| ETL | Niveau système | Déplacer des données entre systèmes | Airflow, dbt, Spark |
Le Pipeline de Data Wrangling
1. Découvrir -- Charger et comprendre les données. 2. Structurer -- Remodeler colonnes et lignes. 3. Nettoyer -- Gérer les valeurs manquantes, corriger les types. 4. Enrichir -- Ajouter des colonnes dérivées, joindre des datasets. 5. Valider -- Confirmer la qualité de sortie.
Étape 1 : Découvrir vos Données
import pandas as pd
df = pd.read_csv("sales_data.csv")
print(f"Lignes : {df.shape[0]}, Colonnes : {df.shape[1]}")
df.info()
df.describe(include="all")
df.isnull().sum().sort_values(ascending=False)
print(f"Lignes dupliquées : {df.duplicated().sum()}")Pour une approche visuelle, PyGWalker (opens in a new tab) transforme tout DataFrame Pandas en interface interactive type Tableau :
import pygwalker as pyg walker = pyg.walk(df)
Étape 2 : Structurer et Remodeler
df.columns = df.columns.str.strip().str.lower().str.replace(" ", "_").str.replace(r"[^\w]", "", regex=True)
sales_wide = df.pivot_table(index="product", columns="month", values="revenue", aggfunc="sum")
sales_long = sales_wide.reset_index().melt(id_vars="product", var_name="month", value_name="revenue")Étape 3 : Nettoyer les Données
df_dropped = df.dropna(subset=["revenue", "customer_id"])
df["category"] = df["category"].fillna("Inconnu")
df["revenue"] = df["revenue"].fillna(df["revenue"].median())
df["price"] = df["price"].ffill()| Situation | Approche Recommandée |
|---|---|
| Moins de 5% manquant | Supprimer les lignes |
| Colonne catégorielle | Remplir avec "Inconnu" ou mode |
| Colonne numérique, distribution normale | Remplir avec la moyenne |
| Colonne numérique, distribution asymétrique | Remplir avec la médiane |
| Données temporelles | Forward fill ou interpolation |
Conversions de Types
df["order_date"] = pd.to_datetime(df["order_date"], format="%Y-%m-%d")
df["revenue"] = pd.to_numeric(df["revenue"], errors="coerce")
df["status"] = df["status"].astype("category")Nettoyage de Chaînes
df["name"] = df["name"].str.strip()
df["city"] = df["city"].str.lower()
df["phone"] = df["phone"].str.replace(r"[^\d]", "", regex=True)Gestion des Doublons
df = df.drop_duplicates(subset=["customer_id", "order_date"], keep="first")Étape 4 : Enrichir
merged = pd.merge(orders, customers, on="customer_id", how="left")
df["profit"] = df["revenue"] - df["cost"]
df["profit_margin"] = (df["profit"] / df["revenue"] * 100).round(2)| Type de Join | Conserve | Utilisation |
|---|---|---|
inner | Lignes correspondantes uniquement | Enregistrements complets requis |
left | Toutes les lignes de gauche | Table gauche est le dataset principal |
outer | Toutes les lignes des deux tables | Union complète nécessaire |
Étape 5 : Valider
def validate_dataframe(df):
checks = {}
for col in ["customer_id", "order_date", "revenue"]:
checks[f"no_nulls_{col}"] = df[col].isnull().sum() == 0
checks["positive_revenue"] = (df["revenue"] < 0).sum() == 0
passed = sum(checks.values())
print(f"\nValidation : {passed}/{len(checks)} vérifications réussies")
return checks
validate_dataframe(df)Détection des Valeurs Aberrantes
import numpy as np
Q1 = df["revenue"].quantile(0.25)
Q3 = df["revenue"].quantile(0.75)
IQR = Q3 - Q1
df_clean = df[(df["revenue"] >= Q1 - 1.5 * IQR) & (df["revenue"] <= Q3 + 1.5 * IQR)]Data Wrangling Assisté par IA
RunCell (opens in a new tab) intègre un agent IA directement dans votre notebook Jupyter. Décrivez ce que vous voulez en langage naturel et RunCell génère le code Pandas.
FAQ
Qu'est-ce que le data wrangling en termes simples ?
Le data wrangling est le processus de transformation de données brutes et désordonnées en un format propre et structuré adapté à l'analyse.
Quelle est la différence entre data wrangling et data cleaning ?
Le data cleaning est une étape du data wrangling. Le cleaning se concentre sur la correction des erreurs. Le wrangling est plus large et inclut l'exploration, la restructuration et la validation.
Quels outils sont utilisés pour le data wrangling ?
Python avec Pandas est le plus courant. PyGWalker fournit une exploration visuelle interactive.
Combien de temps les data scientists consacrent-ils au data wrangling ?
Les enquêtes rapportent 60-80% du temps en préparation des données.
Quelles sont les étapes du data wrangling ?
Découvrir, Structurer, Nettoyer, Enrichir et Valider.
Conclusion
Le data wrangling est la fondation qui rend toute analyse possible. Explorez toujours avant de nettoyer, utilisez le pipeline en cinq étapes, validez votre sortie et documentez vos décisions.