Suppression de données

Feature Engineering avec PySpark

John Hogue

Lead Data Scientist, General Mills

Où les données peuvent-elles se dégrader ?

  • {{1}} saisi à tort
  • Événements uniques
  • Mauvais format
  • Doublons
  • Valeurs manquantes
  • Non pertinent

Dominos

Feature Engineering avec PySpark

Suppression de colonnes

df.select(['NO', 'UNITNUMBER', 'CLASS']).show()
+----+----------+-----+
|  NO|UNITNUMBER|CLASS|
+----+----------+-----+
|   1|      null|   SF|
| 156|        A8|   SF|
| 157|       207|   SF|
| 158|      701G|   SF|
| 159|        36|   SF|

Plusieurs champs sont inutiles pour notre analyse

  • 'NO' numéro d'enregistrement auto-généré
  • 'UNITNUMBER' donnée non pertinente
  • 'CLASS' valeur constante
Feature Engineering avec PySpark

Suppression de colonnes

drop(*cols)

  • *cols : un nom de colonne à supprimer ou une liste de noms.
  • Retourne un nouveau DataFrame avec ces colonnes supprimées
# Liste des colonnes à supprimer
cols_to_drop = ['NO', 'UNITNUMBER', 'CLASS']

# Supprimer les colonnes df = df.drop(*cols_to_drop)
Feature Engineering avec PySpark

Filtrage de texte

  • where(condition)
    • condition : une colonne de type types.BooleanType ou une chaîne d'expression SQL.
    • Filtre le DataFrame quand la condition est vraie
  • like(other)
    • other : un motif SQL LIKE
    • Retourne une colonne booléenne
  • ~
    • La négation (NOT)
df = df.where(~df['POTENTIALSHORTSALE'].like('Not Disclosed'))
Feature Engineering avec PySpark

Filtrage des valeurs aberrantes

Filtrer les données à ± trois écarts types (3σ) autour de la moyenne (μ)

Distribution normale standard

Feature Engineering avec PySpark

Exemple de filtrage par valeur

# Calculer les valeurs utilisées pour le filtrage
std_val = df.agg({'SALESCLOSEPRICE': 'stddev'}).collect()[0][0]
mean_val = df.agg({'SALESCLOSEPRICE': 'mean'}).collect()[0][0]

# Créer les bornes sup. et inf. à trois écarts types (μ ± 3σ) hi_bound = mean_val + (3 * std_val) low_bound = mean_val - (3 * std_val)
# Utiliser where() pour filtrer le DataFrame entre ces valeurs df = df.where((df['LISTPRICE'] < hi_bound) & (df['LISTPRICE'] > low_bound))
Feature Engineering avec PySpark

Suppression des NA ou NULL

DataFrame.dropna()

  • how : « any » ou « all ». Avec « any », supprime l'enregistrement s'il contient au moins une valeur nulle. Avec « all », uniquement si toutes les valeurs sont nulles.
  • thresh : int, par défaut None. Si défini, supprime les enregistrements ayant moins de thresh valeurs non nulles. Écrase le paramètre how.
  • subset : liste optionnelle de colonnes à considérer.
Feature Engineering avec PySpark

Suppression des NA ou NULL

# Supprimer tout enregistrement avec des valeurs NULL
df = df.dropna()

# Supprimer si LISTPRICE et SALESCLOSEPRICE sont NULL df = df.dropna(how='all', subset['LISTPRICE', 'SALESCLOSEPRICE '])
# Supprimer les enregistrements où au moins deux colonnes sont NULL df = df.dropna(thresh=2)
Feature Engineering avec PySpark

Suppression des doublons

Qu'est-ce qu'un doublon ?

  • Deux enregistrements ou plus contiennent exactement les mêmes informations
  • Après suppression de colonnes ou jointures, vérifiez les doublons

dropDuplicates()

  • Peut s'appliquer à tout le DataFrame ou à une liste de colonnes
  • En PySpark, l'ordre de suppression n'est pas défini
# Tout le DataFrame
df.dropDuplicates()

# Ne vérifier qu'une liste de colonnes df.dropDuplicates(['streetaddress'])
Feature Engineering avec PySpark

Passons à la pratique !

Feature Engineering avec PySpark

Preparing Video For Download...