Traiter les données manquantes

Analyse de données exploratoires en Python

George Boorman

Curriculum Manager, DataCamp

Pourquoi les données manquantes constituent-elles un problème ?

  • Affecte les distributions
    • Taille manquante pour les élèves les plus grands
  • Moins représentatif de la population
    • Certains groupes sont surreprésentés, par exemple, manque de données sur les élèves les plus âgés.
  • Peut entraîner des conclusions erronées.

Répartition de la taille dans l'échantillon par rapport à celle dans la population, montrant que l'échantillon présente une valeur maximale et une moyenne plus faibles.

Analyse de données exploratoires en Python

Données relatives aux postes des professionnels des données

Colonne Description Type de données
Working_Year Année d'obtention des données Flottant
Designation Intitulé du poste Chaîne
Experience Niveau d'expérience, par exemple : "Mid", "Senior" Chaîne
Employment_Status Type de contrat de travail, par exemple : "Temps complet", "Temps partiel" Chaîne
Employee_Location Pays d'emploi Chaîne
Company_Size Étiquettes pour la taille de l'entreprise, par exemple "TPE", "PME", "Grande entreprise" Chaîne
Remote_Working_Ratio Pourcentage de temps passé en télétravail Entier
Salary_USD Salaire en dollars américains Flottant
Analyse de données exploratoires en Python

Salaire en fonction du niveau d'expérience

Graphique en boîte des salaires par niveau d'expérience à partir de l'ensemble de données nettoyé, avec une limite supérieure proche de 600 000 dollars

Graphique en boîte des salaires par niveau d'expérience à partir d'un ensemble de données comportant des valeurs manquantes, montrant une limite supérieure proche de 450 000 dollars.

Analyse de données exploratoires en Python

Vérification des valeurs manquantes

print(salaries.isna().sum())
Working_Year            12
Designation             27
Experience              33
Employment_Status       31
Employee_Location       28
Company_Size            40
Remote_Working_Ratio    24
Salary_USD              60
dtype: int64
Analyse de données exploratoires en Python

Stratégies pour traiter les données manquantes

  • Supprimer les valeurs manquantes
    • Pas plus de 5 % de la valeur totale
  • Imputer la moyenne, la médiane et le mode
    • Selon la distribution et le contexte
  • Imputation par sous-groupe
    • Le salaire médian varie selon le niveau d'expérience
Analyse de données exploratoires en Python

Suppression des valeurs manquantes

threshold = len(salaries) * 0.05
print(threshold)
30
Analyse de données exploratoires en Python

Suppression des valeurs manquantes

cols_to_drop = salaries.columns[salaries.isna().sum() <= threshold]

print(cols_to_drop)
Index(['Working_Year', 'Designation', 'Employee_Location',
       'Remote_Working_Ratio'],
      dtype='object')
salaries.dropna(subset=cols_to_drop, inplace=True)
Analyse de données exploratoires en Python

Imputation d'une statistique récapitulative

cols_with_missing_values = salaries.columns[salaries.isna().sum() > 0]
print(cols_with_missing_values)
Index(['Experience', 'Employment_Status', 'Company_Size', 'Salary_USD'], 
    dtype='object')
for col in cols_with_missing_values[:-1]:
    salaries[col].fillna(salaries[col].mode()[0])
Analyse de données exploratoires en Python

Vérification des valeurs manquantes restantes

print(salaries.isna().sum())
Working_Year             0
Designation              0
Experience               0
Employment_Status        0
Employee_Location        0
Company_Size             0
Remote_Working_Ratio     0
Salary_USD              41
Analyse de données exploratoires en Python

Imputation par sous-groupe

salaries_dict = salaries.groupby("Experience")["Salary_USD"].median().to_dict()

print(salaries_dict)
{'Entry': 55380.0, 'Executive': 135439.0, 'Mid': 74173.5, 'Senior': 128903.0}
Analyse de données exploratoires en Python

Imputation par sous-groupe

salaries["Salary_USD"] = salaries["Salary_USD"].fillna(salaries["Experience"].map(salaries_dict))
Analyse de données exploratoires en Python

Plus aucune valeur manquante !

print(salaries.isna().sum())
Working_Year            0
Designation             0
Experience              0
Employment_Status       0
Employee_Location       0
Company_Size            0
Remote_Working_Ratio    0
Salary_USD              0
dtype: int64
Analyse de données exploratoires en Python

Passons à la pratique !

Analyse de données exploratoires en Python

Preparing Video For Download...