AccueilBlogTest technique pandas profiling et diagnostic qualité des données
Guide recrutement data

Test technique pandas profiling et diagnostic qualité des données

Le diagnostic de qualité des données est systématiquement la première étape d un projet data. En entretien, on évalue la rigueur de cette phase souvent négligée.

Data Builder·Juin 2025·6 min de lecture·Data Analyst · Data Scientist
Sommaire
  1. Méthode de diagnostic
  2. YData Profiling
  3. Analyser les valeurs manquantes
  4. Détecter les outliers
  5. Corrélations et redondances
  6. Produire un rapport de qualité
  7. Grille

1Méthode de diagnostic qualité

Question discriminante

Quelle est votre démarche systématique quand vous découvrez un nouveau dataset ?

import pandas as pd import numpy as np # Étape 1 : vue d ensemble print(df.shape) # dimensions print(df.dtypes) # types de colonnes print(df.head()) print(df.describe()) # statistiques descriptives # Étape 2 : valeurs manquantes missing = df.isnull().sum() missing_pct = (missing / len(df) * 100).sort_values(ascending=False) print(missing_pct[missing_pct > 0]) # Étape 3 : doublons print(f'Doublons complets: {df.duplicated().sum()}') print(f'Doublons sur clé: {df.duplicated(subset=["order_id"]).sum()}') # Étape 4 : distributions for col in df.select_dtypes(include='number').columns: print(f'{col}: min={df[col].min():.2f}, max={df[col].max():.2f}, ' f'mean={df[col].mean():.2f}, median={df[col].median():.2f}')

2YData Profiling : rapport automatique

Question discriminante

Comment utilisez-vous YData Profiling pour accélérer le diagnostic ?

from ydata_profiling import ProfileReport # Rapport complet (attention : lent sur >100k lignes) profile = ProfileReport( df, title='Diagnostic qualité - Commandes 2024', explorative=True ) profile.to_file('diagnostic_qualite.html') # Rapport minimal pour les gros volumes profile_minimal = ProfileReport( df, minimal=True, # désactive les corrélations coûteuses title='Diagnostic rapide' ) # Ce que le rapport contient automatiquement : # - Distribution de chaque variable # - Valeurs manquantes et patterns # - Corrélations (Pearson, Spearman, Cramér V) # - Alertes automatiques (skewness, constantes, haute cardinalité) # - Interactions entre variables

3Analyser les valeurs manquantes

Question discriminante

Comment distinguez-vous MCAR, MAR et MNAR ? Pourquoi est-ce important ?

import missingno as msno import matplotlib.pyplot as plt # Visualiser les patterns de valeurs manquantes msno.matrix(df) # pattern visuel msno.heatmap(df) # corrélation entre colonnes manquantes msno.dendrogram(df) # clustering des patterns # Test de Little (MCAR vs non-MCAR) # Si p-value < 0.05 : les données ne sont PAS MCAR from scipy import stats # Vérifier si les manquants dépendent d autres colonnes df['income_missing'] = df['income'].isnull().astype(int) print(df.groupby('income_missing')['age'].describe()) # Si l âge diffère selon income_missing -> MAR (pas MCAR)

4Détecter les outliers

Question discriminante

Quelles méthodes utilisez-vous pour détecter les valeurs aberrantes ?

import numpy as np from scipy import stats # Méthode 1 : IQR (robuste) def detect_outliers_iqr(series): Q1 = series.quantile(0.25) Q3 = series.quantile(0.75) IQR = Q3 - Q1 lower = Q1 - 1.5 * IQR upper = Q3 + 1.5 * IQR return series[(series < lower) | (series > upper)] # Méthode 2 : Z-score (si distribution normale) z_scores = np.abs(stats.zscore(df['amount'])) outliers_z = df[z_scores > 3] # Méthode 3 : Isolation Forest (multivariée) from sklearn.ensemble import IsolationForest iso = IsolationForest(contamination=0.01, random_state=42) df['is_outlier'] = iso.fit_predict(df[numeric_cols]) # -1 = outlier, 1 = normal

5Corrélations et redondances

Question discriminante

Comment identifiez-vous les features redondantes dans un dataset ?

import seaborn as sns # Corrélations linéaires (Pearson) corr_matrix = df.select_dtypes('number').corr() # Visualiser avec heatmap sns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='coolwarm') # Identifier les paires très corrélées upper = corr_matrix.where( np.triu(np.ones(corr_matrix.shape), k=1).astype(bool) ) high_corr = [(c, r, upper.loc[r, c]) for c in upper.columns for r in upper.index if abs(upper.loc[r, c]) > 0.95] print('Features très corrélées (>0.95):', high_corr) # Variance Inflation Factor (VIF) pour la multicolinéarité from statsmodels.stats.outliers_influence import variance_inflation_factor vif = pd.DataFrame() vif['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])] vif['feature'] = X.columns # VIF > 10 : multicolinéarité problématique

6Produire un rapport de qualité actionnable

Question discriminante

Qu est-ce qu un rapport de qualité de données actionnable ?

7Grille par niveau

NiveauMaitriseSignal GONO-GO
Juniordf.describe(), valeurs manquantes, doublonsFait une exploration systématique avant de modéliserCommence à modéliser sans explorer les données
ConfirméYData Profiling, IQR outliers, corrélationsUtilise YData Profiling, distingue MCAR/MAR/MNAR, détecte les outliersNe sait pas ce que sont MCAR et MAR
SeniorIsolation Forest, VIF, rapport de qualité structuréUtilise des méthodes multivariées, produit un rapport avec recommandationsN a jamais produit de rapport de qualité de données

Vous recrutez un Data Analyst ou Data Scientist ?

Premier entretien gratuit. Rapport GO/NO-GO sous 48h.