CSV sales et valeurs manquantes
Diagnostiquer manquants et incohérences avant d'imputer.
Énoncé
Sur data/colis_bruts.csv : comptez les manquants par colonne, repérez les zéros impossibles (poids 0), les unités mélangées et les doublons exacts. Décidez pour chaque anomalie : supprimer un doublon, conserver un manquant jusqu'au pipeline ou corriger une unité connue.
Contraintes
Aucune imputation avant le diagnostic écrit dans le carnet : pour chaque manquant, notez une hypothèse sur son mécanisme (MCAR/MAR/MNAR), son pourcentage et la règle envisagée. Le mécanisme réel n'est pas connu du simple CSV ; votre hypothèse reste à vérifier. Ne comparez pas les poids en grammes et kilogrammes avant conversion.
Indices
df.isna().sum().sort_values(), df.duplicated().sum(), df["unite_poids"].value_counts() et pd.to_numeric(df["poids_valeur"]).dropna(). Un manquant qui dépend de la cible n'est pas neutre.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
import pandas as pd
df = pd.read_csv("data/colis_bruts.csv")
print(df.isna().sum().sort_values(ascending=False))
print("doublons exacts :", df.duplicated().sum())
print("identifiants distincts :", df["commande_id"].nunique())
print("unités :", df["unite_poids"].value_counts())
poids = pd.to_numeric(df["poids_valeur"]).dropna()
print("poids saisis <= 0 :", (poids <= 0).sum())
Ici, les poids absents sont conservés jusqu'au split. La médiane sera ajustée sur train uniquement, dans le pipeline (chapitres 13 et 15). Le nombre de manquants ne suffit pas à garantir une imputation sans biais ; vérifiez si leur fréquence change selon une caractéristique connue. L'atelier suivant formalise la conversion et le rapport de nettoyage.