Eliminare dati

Feature Engineering con PySpark

John Hogue

Lead Data Scientist, General Mills

Dove possono rovinarsi i dati?

  • {{1}} registrato in modo errato
  • Eventi unici
  • Formattazione errata
  • Duplicazioni
  • Valori mancanti
  • Non rilevante

Dominos

Feature Engineering con PySpark

Eliminare colonne

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

Più campi non servono per l'analisi

  • 'NO' numero di record auto-generato
  • 'UNITNUMBER' dato irrilevante
  • 'CLASS' tutto costante
Feature Engineering con PySpark

Eliminare colonne

drop(*cols)

  • *cols – un nome di colonna o un elenco di colonne da eliminare.
  • Restituisce un nuovo DataFrame che elimina le
# Elenco di colonne da eliminare
cols_to_drop = ['NO', 'UNITNUMBER', 'CLASS']

# Elimina le colonne df = df.drop(*cols_to_drop)
Feature Engineering con PySpark

Filtrare testo

  • where(condition)
    • condition – una Column di types.BooleanType o una stringa con espressione SQL.
    • Filtra il DataFrame dove la condizione è vera
  • like(other)
    • other – un pattern SQL LIKE
    • Restituisce una Column booleana
  • ~
    • L'operatore NOT
df = df.where(~df['POTENTIALSHORTSALE'].like('Not Disclosed'))
Feature Engineering con PySpark

Filtrare outlier

Filtra entro tre deviazioni standard (3σ) dalla media (μ)

Distribuzione normale standard

Feature Engineering con PySpark

Esempio di filtro per valori

# Calcola i valori per il filtro
std_val = df.agg({'SALESCLOSEPRICE': 'stddev'}).collect()[0][0]
mean_val = df.agg({'SALESCLOSEPRICE': 'mean'}).collect()[0][0]

# Crea i limiti (μ ± 3σ) superiore e inferiore hi_bound = mean_val + (3 * std_val) low_bound = mean_val - (3 * std_val)
# Usa where() per filtrare il DataFrame tra i valori df = df.where((df['LISTPRICE'] < hi_bound) & (df['LISTPRICE'] > low_bound))
Feature Engineering con PySpark

Eliminare NA o NULL

DataFrame.dropna()

  • how: "any" o "all". Con "any", elimina un record se ha almeno un null. Con "all", elimina solo se tutti i valori sono null.
  • thresh: int, predefinito None. Se impostato, elimina i record con meno di thresh valori non null. Sovrascrive il parametro how.
  • subset: elenco facoltativo di colonne da considerare.
Feature Engineering con PySpark

Eliminare NA o NULL

# Elimina i record con valori NULL
df = df.dropna()

# Elimina i record se sia LISTPRICE sia SALESCLOSEPRICE sono NULL df = df.dropna(how='all', subset['LISTPRICE', 'SALESCLOSEPRICE '])
# Elimina i record in cui almeno due colonne hanno valori NULL df = df.dropna(thresh=2)
Feature Engineering con PySpark

Eliminare duplicati

Cos'è un duplicato?

  • Due o più record contengono esattamente le stesse informazioni
  • Dopo avere eliminato colonne o unito insiemi di dati, verifica i duplicati

dropDuplicates()

  • Puoi eseguirlo su tutto il DataFrame o su un elenco di colonne
  • In PySpark non c'è ordine su quale record viene rimosso
# Intero DataFrame
df.dropDuplicates()

# Controlla solo un elenco di colonne df.dropDuplicates(['streetaddress'])
Feature Engineering con PySpark

Esercitiamoci!

Feature Engineering con PySpark

Preparing Video For Download...