Skip to content
Data Wrangling : Guide Complet pour Nettoyer et Transformer des Données avec Python

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.

TermePortéeFocusOutils Typiques
Data WranglingLargeExploration, remodelage, nettoyagePandas, Polars, Python
Data CleaningÉtroit -- sous-ensemble du wranglingCorriger les erreurs, valeurs manquantesPandas, OpenRefine, SQL
ETLNiveau systèmeDéplacer des données entre systèmesAirflow, 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()
SituationApproche Recommandée
Moins de 5% manquantSupprimer les lignes
Colonne catégorielleRemplir avec "Inconnu" ou mode
Colonne numérique, distribution normaleRemplir avec la moyenne
Colonne numérique, distribution asymétriqueRemplir avec la médiane
Données temporellesForward 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 JoinConserveUtilisation
innerLignes correspondantes uniquementEnregistrements complets requis
leftToutes les lignes de gaucheTable gauche est le dataset principal
outerToutes les lignes des deux tablesUnion 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.

📚