Gérer les données manquantes

Ingénierie des caractéristiques avec PySpark

John Hogue

Lead Data Scientist, General Mills

Comment les données se perdent‑elles à l'ère numérique ?

Collecte de données

  • Capteurs défectueux

Règles d'entreposage des données

  • 2017-01-01 vs 1er janvier 2017

Jointure de sources disparates

  • Mensuel vers hebdomadaire

Absences intentionnelles

  • Enjeux de confidentialité

Données manquantes

Ingénierie des caractéristiques avec PySpark

Types de données manquantes

Manquantes complètement au hasard

  • Les données manquantes forment un sous‑ensemble entièrement aléatoire

Manquantes au hasard

  • Manquantes conditionnellement au hasard selon une autre observation

Manquantes non au hasard

  • Manquantes en raison de la façon de les collecter
Ingénierie des caractéristiques avec PySpark

Évaluer les valeurs manquantes

Quand supprimer des lignes avec des données manquantes ?

  • Les valeurs manquantes sont rares
  • Manquantes complètement au hasard

isNull()

  • Vrai si l'expression courante est nulle.
df.where(df['ROOF'].isNull()).count()
765
Ingénierie des caractéristiques avec PySpark

Visualiser les valeurs manquantes

# Importer la bibliothèque
import seaborn as sns

# Sous-ensemble de la trame de données sub_df = df.select(['ROOMAREA1'])
# Échantillonner la trame de données sample_df = sub_df.sample(False, .5, 4)
# Convertir en DataFrame Pandas pandas_df = sample_df.toPandas()
# Tracer sns.heatmap(data=pandas_df.isnull())
Ingénierie des caractéristiques avec PySpark

Carte thermique des valeurs manquantes

Carte thermique des données manquantes

Ingénierie des caractéristiques avec PySpark

Imputation des valeurs manquantes

Processus de remplacement des valeurs manquantes

Basé sur des règles

  • Valeur selon la logique d'affaires

Basé sur des statistiques

  • Moyenne, médiane, etc.

Basé sur un modèle

  • Utiliser un modèle pour prédire la valeur
Ingénierie des caractéristiques avec PySpark

Imputation des valeurs manquantes

** fillna(value, subset=None)

  • value valeur de remplacement des manquants
  • subset liste des colonnes où remplacer les manquants
# 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'])
Ingénierie des caractéristiques avec PySpark

Passons à la pratique !

Ingénierie des caractéristiques avec PySpark

Preparing Video For Download...