Gérer les données manquantes

Feature Engineering avec PySpark

John Hogue

Lead Data Scientist, General Mills

Comment les données disparaissent-elles à l'ère numérique ?

Collecte des données

  • Capteurs défectueux

Règles de stockage des données

  • 2017-01-01 vs January 1st, 2017

Jonction de données disparates

  • Mensuel vers hebdomadaire

Absences volontaires

  • Problèmes de confidentialité

Données manquantes

Feature Engineering avec PySpark

Types de manquants

Manquant complètement au hasard

  • Les données manquantes forment un sous-ensemble totalement aléatoire

Manquant au hasard

  • Manquant conditionnellement au hasard selon une autre observation

Manquant non aléatoire

  • Données manquantes en raison du mode de collecte
Feature Engineering avec PySpark

Évaluer les valeurs manquantes

Quand supprimer des lignes avec des données manquantes ?

  • Valeurs manquantes rares
  • Manquant complètement au hasard

isNull()

  • Vrai si l'expression courante est nulle.
df.where(df['ROOF'].isNull()).count()
765
Feature Engineering avec PySpark

Visualiser les valeurs manquantes

# Importer la bibliothèque
import seaborn as sns

# Sous-ensemble du DataFrame sub_df = df.select(['ROOMAREA1'])
# Échantillonner le DataFrame sample_df = sub_df.sample(False, .5, 4)
# Convertir en DataFrame Pandas pandas_df = sample_df.toPandas()
# Tracer sns.heatmap(data=pandas_df.isnull())
Feature Engineering avec PySpark

Carte thermique des valeurs manquantes

Carte thermique des données manquantes

Feature Engineering avec PySpark

Imputation des valeurs manquantes

Remplacement des valeurs manquantes

À base de règles

  • Valeur définie par la logique métier

À base de statistiques

  • Moyenne, médiane, etc.

À base de modèle

  • Utiliser un modèle pour prédire la valeur
Feature Engineering avec PySpark

Imputation des valeurs manquantes

** fillna(value, subset=None)

  • value : valeur de remplacement des manquants
  • subset : liste des colonnes à remplacer
# Remplacer les valeurs manquantes par zéro
df.fillna(0, subset=['DAYSONMARKET'])
# Remplacer par la moyenne de la colonne
col_mean = df.agg({'DAYSONMARKET': 'mean'}).collect()[0][0]
df.fillna(col_mean, subset=['DAYSONMARKET'])
Feature Engineering avec PySpark

Passons à la pratique !

Feature Engineering avec PySpark

Preparing Video For Download...