Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Repérer et corriger les valeurs fausses

Après cette leçon: Je peux trouver et corriger les valeurs manquantes ou fausses d’un jeu de données.

Leçon de 55 min2 commandesLab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Un export plein de trous

Le logiciel de réservation du loueur exporte l’année pour une étude. Certaines températures sont vides. Un jour affiche 99,9 degrés. Un nombre de locations vaut « unknown ».

Un modèle nourri avec ce fichier apprendrait les erreurs autant que les faits. Le nettoyage passe d’abord, et c’est souvent l’essentiel du travail.

À la fin de cette leçon

Remarque

Je peux trouver et corriger les valeurs manquantes ou fausses d’un jeu de données.

Mots clés

MotCe que ça veut direExemple
Valeur manquanteune case videNaN
Type de donnéesla sorte de valeur que tient une colonnefloat64
Doublonune ligne qui en répète une autre à l’identique
Valeur aberranteune valeur très éloignée des autres
Imputerremplir une case vide par une estimation raisonnable

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Quatre défauts à chercher

La plupart des données sales ont l’un de ces défauts. Une valeur manque. Une colonne a le mauvais type de données : des nombres rangés comme du texte. Une ligne est un doublon. Ou une valeur ne peut pas être vraie.

Chaque défaut a son test rapide dans pandas. Regardez avant de changer quoi que ce soit.

Exemple travaillé : chaque défaut et son test

DéfautCe qu’on voitLe test
Valeur manquanteNaN dans une casemessy.isna().sum()
Mauvais typeobject là où l’on attend des nombresmessy.dtypes
Doublonplus de lignes que de joursmessy.duplicated().sum()
Valeur impossibleun maximum qui ne peut pas arrivermessy["temp_c"].max()
Mots écrits autrementSunny et sunny comptés à partmessy["weather"].value_counts()

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Fabriquer la copie sale et l’examiner

Commande
docker exec jupyter python3 steps/messy.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

À taper dans votre carnet : les cases vides

Code: python
import pandas as pd

messy = pd.read_csv("messy.csv")
# Seulement les jours dont la température manque.
messy[messy["temp_c"].isna()][["date", "temp_c"]]

Une colonne de texte cache des nombres

Un seul mot dans une colonne de nombres suffit : pandas range toute la colonne comme du texte. Son type devient object, et une moyenne ne marche plus.

pd.to_numeric(colonne, errors="coerce") convertit tout ce qui peut l’être. Le reste devient NaN, et vous pouvez alors le trouver.

Les mots ont le même piège. Pour un ordinateur, « Sunny » suivi d’une espace et « SUNNY » sont deux valeurs différentes.

À taper dans votre carnet : les comptes faux

Code: python
# Les comptes en nombres ; ce qui ne se lit pas devient NaN.
comptes = pd.to_numeric(messy["hires"], errors="coerce")
messy[comptes.isna() | (comptes < 0)][["date", "hires"]]

Ranger des mots, vérifier des comptes

Code: python
# Trois façons d'écrire la même météo dans un export.
mots = ["cloudy", " Cloudy", "CLOUDY "]
for mot in mots:
    print(repr(mot), "devient", repr(mot.strip().lower()))

# Un nombre de locations est-il bien un entier positif ?
for texte in ["318", "-12", "n/a"]:
    print(texte, texte.isdigit())
# Ajoutez "4.5" à la seconde liste. Que répond isdigit ?

Une erreur fréquente

Attention

Beaucoup pensent qu’il faut supprimer toute valeur aberrante. Une valeur rare peut être vraie : le jour record, 487 locations, a bien eu lieu. Ne retirez ou ne remplacez une valeur que si elle est impossible, comme 99,9 degrés ou un compte négatif.

Supprimer, corriger ou imputer, et le noter

Pour chaque défaut, choisissez une des trois actions. Supprimez la ligne quand rien ne la sauve, comme un compte « unknown ». Corrigez quand la bonne valeur est évidente, comme « Sunny » en « sunny ». Imputez quand une estimation suffit, comme la température médiane.

Gardez le fichier brut intact et nettoyez une copie. Chaque étape peut alors être vérifiée et rejouée.

Exemple travaillé : les étapes dans l’ordre

ÉtapeLignes restantesPourquoi
Lire messy.csv367L’export tel qu’il est arrivé
drop_duplicates365Deux lignes étaient des répétitions
Garder les comptes de 0 ou plus363« unknown » et -5 ne sont pas des comptes
Passer en manquant les températures au-dessus de 45363Le 99,9 rejoint les cases vides
Remplir les températures par la médiane363Une estimation vaut mieux qu’un trou ici

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Lancer les étapes du nettoyage

Commande
docker exec jupyter python3 steps/clean.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

À taper dans votre carnet : les doublons

Code: python
# keep=False montre les deux exemplaires de chaque ligne répétée.
messy[messy.duplicated(keep=False)][["date", "hires"]]

Pour aller plus loin

Dans votre carnet, nettoyez messy.csv autrement. Au lieu de la médiane de toute l’année, remplissez chaque température manquante par la médiane de son mois.

Indice : groupby("month")["temp_c"].transform("median") donne à chaque ligne la médiane de son mois. Comparez la valeur remplie du 22 janvier avec la médiane de l’année. Laquelle est la plus crédible, et pourquoi ?

À propos de ce labo et de sa source: Lab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.