Audit de données en 5 minutes avec ydata-profiling — l’outil que j’utilise avant chaque offre commerciale
Quand un client potentiel vous envoie ses données pour un projet data, la première question n’est pas « quel algorithme utiliser ? ». C’est « est-ce que ces données sont exploitables et combien de temps cela va me prendre pour les mettre en ordre ? »
C’est une question business avant d’être une question technique. Et pendant longtemps, j’y répondais à l’instinct — en ouvrant le fichier dans Excel, en scrollant, en cherchant les problèmes évidents. Rapide, mais peu rigoureux. Et surtout, pas reproductible.
Dans le cadre d’un objectif professionnel, on m’a demandé de créer un outil d’audit de données rapide — quelque chose qui permette, dès réception des données d’un client, d’évaluer la charge de travail et de décider si le projet est faisable avant de rédiger une offre.
J’ai utilisé ydata-profiling. Voici ce que j’ai appris — ses vraies forces, ses vraies limites, et ce qu’il ne remplace pas.
C’est quoi ydata-profiling ?
ydata-profiling (anciennement pandas-profiling) est une bibliothèque Python qui génère automatiquement un rapport d’audit complet à partir d’un dataset Pandas (qui pourrait provenir de la lecture d’un fichier Excel), en quelques lignes de code.
Le rapport est interactif, au format HTML, avec des visualisations pour chaque variable : distribution, valeurs manquantes, corrélations, doublons, alertes automatiques, …
Ce qui prendrait plusieurs heures à construire manuellement se génère en quelques secondes.
pip install ydata-profiling
import pandas as pd
from ydata_profiling import ProfileReport
# Charger les données du client
df = pd.read_csv('donnees_client.xlsx', sep=';')
# Générer le rapport — une seule ligne
rapport = ProfileReport(df, title="Audit données client")
# Exporter en HTML interactif
rapport.to_file("audit_client.html")
print("Rapport généré : audit_client.html")
C’est tout. Ouvrez audit_client.html dans votre navigateur — vous avez un audit complet.
Ce que le rapport contient
Le rapport ydata-profiling est organisé en plusieurs sections.
Vue d’ensemble — les chiffres clés du dataset en un coup d’œil : nombre de lignes, nombre de colonnes, taux de valeurs manquantes global, nombre de doublons, nombre d’alertes détectées. C’est la première chose que je regarde pour avoir une idée générale de l’état des données.
Alertes automatiques — c’est la section la plus précieuse pour un audit rapide. ydata-profiling détecte automatiquement les problèmes potentiels : colonnes avec beaucoup de valeurs manquantes, variables constantes (qui ne varient jamais — donc inutiles), corrélations très élevées entre colonnes, distributions très asymétriques, valeurs aberrantes. Ces alertes sont le point de départ de mon analyse détaillée.
Analyse par variable — pour chaque colonne, une fiche complète : type détecté, statistiques descriptives, histogramme de distribution, taux de valeurs manquantes, valeurs les plus fréquentes. C’est là qu’on voit si une colonne numérique a été importée en texte, si une date est mal formatée, si une variable a 95% de valeurs identiques.
Corrélations — une matrice de corrélation entre toutes les variables numériques. Utile pour détecter des redondances (deux capteurs qui mesurent la même chose) ou des relations inattendues qui méritent investigation.
Valeurs manquantes — une visualisation de la distribution des valeurs manquantes dans le temps et entre les colonnes. On voit immédiatement si les données manquent aléatoirement ou de façon structurée (toute une période sans données, toute une colonne vide…).
Mon workflow d’audit avant offre commerciale
Voici exactement comment j’utilise ydata-profiling quand je reçois des données d’un client.
Étape 1 — Lancer le rapport sur les données brutes
Je ne nettoie rien avant.
Je lance directement sur le fichier tel que reçu — c’est précisément l’état des données brutes qui m’intéresse pour évaluer la charge de travail.
import pandas as pd
from ydata_profiling import ProfileReport
import os
def audit_client(chemin_fichier, separateur=';'):
"""
Génère un rapport d'audit ydata-profiling sur les données brutes.
À lancer tel quel sur le fichier reçu du client — sans nettoyage préalable.
"""
extension = os.path.splitext(chemin_fichier)[1].lower()
if extension == '.csv':
df = pd.read_csv(chemin_fichier, sep=separateur)
elif extension in ['.xlsx', '.xls']:
df = pd.read_excel(chemin_fichier)
else:
raise ValueError(f"Format non supporté : {extension}")
print(f"Dataset chargé : {df.shape[0]:,} lignes × {df.shape[1]} colonnes")
nom_rapport = chemin_fichier.replace(extension, '_audit.html')
rapport = ProfileReport(
df,
title=f"Audit — {os.path.basename(chemin_fichier)}",
explorative=True,
)
rapport.to_file(nom_rapport)
print(f"Rapport généré : {nom_rapport}")
return df, rapport
df, rapport = audit_client('donnees_client.csv')


Étape 2 — Regarder les alertes en priorité
Les alertes sont le premier filtre. Si ydata-profiling remonte 15 alertes, je les parcours toutes avant d’aller dans le détail de chaque variable. Elles me donnent immédiatement les zones de risque.

Étape 3 — Analyser en détail là où il y a des problèmes
Pour chaque alerte ou anomalie détectée, je vais regarder la variable en détail dans le rapport et souvent compléter avec du code Python pour approfondir ce que le rapport ne me dit pas.
Ce que ydata-profiling ne voit pas — le vrai travail d’analyse
J’explique en détail les 5 questions à se poser sur n’importe quel dataset dans mon article sur la data quality.
ydata-profiling répond automatiquement à certaines d’entre elles, pas à toutes ; il dégrossit le travail, il ne l’automatise pas en totalité.
Voici ce que je dois compléter manuellement.
Les valeurs manquantes — pourquoi et est-ce bloquant ?
ydata-profiling vous dit combien de valeurs manquent. Il ne vous dit pas pourquoi elles manquent et c’est pourtant la question décisive.
# Analyse approfondie des valeurs manquantes
manquants = df.isnull().sum()
taux_manquants = (manquants / len(df) * 100).round(1)
rapport_manquants = pd.DataFrame({
'nb_manquants' : manquants,
'taux_pct' : taux_manquants,
'action_suggeree' : taux_manquants.apply(
lambda x: '✅ OK' if x == 0
else '⚠️ À investiguer' if x < 20
else '🔴 Bloquant ?' if x < 80
else '❌ Inutilisable'
)
}).sort_values('taux_pct', ascending=False)
print(rapport_manquants[rapport_manquants['nb_manquants'] > 0])

Un taux de 80% de valeurs manquantes sur une colonne clé peut être rédhibitoire ou tout à fait normal si cette colonne n’est renseignée que dans certaines conditions. Seule la connaissance métier permet de trancher. C’est une question à poser au client, pas un calcul à faire.
Les variables rejetées par ydata-profiling
Quand ydata-profiling ne reconnaît pas le format d’une variable, il la rejette ou la traite comme du texte libre. C’est souvent le signe d’un problème de format — mais lequel exactement ?
# Identifier les colonnes mal typées
cols_object = df.select_dtypes(include='object').columns
print("Colonnes texte — investigation manuelle requise :")
for col in cols_object:
# Tentative de conversion numérique
num = pd.to_numeric(df[col], errors='coerce')
taux_num = num.notna().mean()
# Tentative de conversion date
try:
date = pd.to_datetime(df[col], errors='coerce', dayfirst=True)
taux_date = date.notna().mean()
except Exception:
taux_date = 0
if taux_num > 0.5:
print(f" '{col}' → probablement numérique "
f"({taux_num:.0%} convertibles) — vérifier le séparateur décimal")
elif taux_date > 0.5:
print(f" '{col}' → probablement une date "
f"({taux_date:.0%} convertibles) — vérifier le format")
else:
print(f" '{col}' → texte libre ou format inconnu — analyse manuelle")
Colonnes texte — investigation manuelle requise :
'Input Date' → probablement une date (100% convertibles) — vérifier le format
'Account' → texte libre ou format inconnu — analyse manuelle
'Topic' → texte libre ou format inconnu — analyse manuelle
'Status' → texte libre ou format inconnu — analyse manuelle
'Highlight' → texte libre ou format inconnu — analyse manuelle
'Achievements' → texte libre ou format inconnu — analyse manuelle
'Next Steps' → texte libre ou format inconnu — analyse manuelle
'Issues & Risks' → texte libre ou format inconnu — analyse manuelle
'Comments' → texte libre ou format inconnu — analyse manuelle
La faisabilité du projet — ce que les données ne disent pas
C’est la limite fondamentale de tout outil d’audit automatique. ydata-profiling peut vous dire que vous avez 10 000 lignes avec 15% de valeurs manquantes et 3 doublons.
Il ne peut pas vous dire si ces 10 000 lignes sont suffisantes pour votre cas d’usage spécifique.
Il ne peut pas vous dire si les données manquantes sont récupérables auprès d’un autre système. Il ne peut pas vous dire si le client a accès à des données complémentaires qui changeraient complètement la faisabilité du projet.
Ces questions demandent une analyse plus poussée et souvent un échange avec le client pour comprendre le contexte.
Les limites de ydata-profiling à connaître
La lenteur sur les grands datasets.
Au-delà de 100 000 lignes, le temps de génération du rapport devient problématique.
Le rapport ne se lit pas tout seul.
ydata-profiling génère de l’information — il ne génère pas d’interprétation. Une corrélation de 0.95 entre deux variables peut signifier une redondance inutile, une relation physique attendue ou un problème de saisie.
C’est vous qui décidez.
Il ne gère pas la sémantique.
ydata-profiling ne sait pas que votre colonne « statut » avec les valeurs 0, 1 et 9 encode « normal », « alarme » et « données invalides ». Il la traitera comme une variable numérique et calculera une moyenne qui n’a aucun sens.
La connaissance métier reste indispensable.
Conclusion
ydata-profiling est l’outil que j’aurais voulu avoir depuis le début. En 5 lignes de code et quelques secondes, il génère un rapport d’audit qui aurait pris plusieurs heures à construire manuellement.
Mais il ne remplace pas le jugement de l’ingénieur. Il dégrossit le travail, il identifie les zones de risque, quantifie les problèmes évidents et donne une vue d’ensemble rapide.
La suite, comprendre pourquoi les données sont dans cet état, évaluer si le projet est faisable, estimer la charge de travail réelle, reste un travail humain.
C’est d’ailleurs sa vraie valeur dans un contexte commercial : pas de remplacer l’analyse mais de vous donner en quelques minutes les informations qui vous permettent de poser les bonnes questions au client avant de rédiger votre offre.
🚀 Vous souhaitez aller plus loin ?
Téléchargez le Pack Complet « De Facto »
J’ai condensé une méthode dans le ‘De Facto Data Automation Kit’:
• 📊 des données capteurs brutes utilisées dans le challenge 7 jours ;
• 🐍 le script Python de nettoyage ;
• ✅ la checklist de contrôle des données ;
• 📈 l’exemple avant/après ;
• 🔧 les scripts des 7 étapes du challenge ;
• 📄 le guide complet.
En attendant, j’aimerais connaître votre réalité de terrain
💬 Vous utilisez déjà ydata-profiling ou un autre outil d’audit de données ? Ou vous faites encore ça à la main ? Dites-moi en commentaire.

Laisser un commentaire