Daten verwerfen

Feature Engineering mit PySpark

John Hogue

Lead Data Scientist, General Mills

Wo können Daten fehlerhaft werden?

  • Falsch erfasst
  • Einzigartige Ereignisse
  • Falsch formatiert
  • Duplikate
  • Fehlend
  • Nicht relevant

Dominos

Feature Engineering mit PySpark

Spalten verwerfen

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

Mehrere Felder brauchen wir für die Analyse nicht

  • 'NO' automatisch erzeugte Datensatznummer
  • 'UNITNUMBER' irrelevant
  • 'CLASS' überall gleich
Feature Engineering mit PySpark

Spalten verwerfen

drop(*cols)

  • *cols – ein zu löschender Spaltenname oder eine Liste davon.
  • Gibt ein neues DataFrame zurück, das die angegebenen {{3}} entfernt
# Liste zu löschender Spalten
cols_to_drop = ['NO', 'UNITNUMBER', 'CLASS']

# Spalten löschen df = df.drop(*cols_to_drop)
Feature Engineering mit PySpark

Text filtern

  • where(condition)
    • condition – eine Spalte vom Typ types.BooleanType oder ein SQL-Ausdruck als String.
    • Filtert das DataFrame, wo die Bedingung wahr ist
  • like(other)
    • other – ein SQL-LIKE-Muster
    • Gibt eine boolesche Spalte zurück
  • ~
    • Negation (NOT)
df = df.where(~df['POTENTIALSHORTSALE'].like('Not Disclosed'))
Feature Engineering mit PySpark

Ausreißer filtern

Daten auf drei Standardabweichungen (3σ) um den Mittelwert (μ) begrenzen

Standard Normal Distribution

Feature Engineering mit PySpark

Beispiel: Werte filtern

# Werte zur Filterung berechnen
std_val = df.agg({'SALESCLOSEPRICE': 'stddev'}).collect()[0][0]
mean_val = df.agg({'SALESCLOSEPRICE': 'mean'}).collect()[0][0]

# Obere und untere Grenze mit drei Standardabweichungen (μ ± 3σ) hi_bound = mean_val + (3 * std_val) low_bound = mean_val - (3 * std_val)
# Mit where() das DataFrame zwischen den Grenzwerten filtern df = df.where((df['LISTPRICE'] < hi_bound) & (df['LISTPRICE'] > low_bound))
Feature Engineering mit PySpark

NAs oder NULLs verwerfen

DataFrame.dropna()

  • how: „any" oder „all". Bei „any" wird ein Datensatz gelöscht, wenn er irgendeinen Nullwert hat. Bei „all" nur, wenn alle Werte null sind.
  • thresh: int, Standard None. Wenn gesetzt, lösche Datensätze mit weniger als thresh Nicht-Null-Werten. Überschreibt den Parameter how.
  • subset: optionale Liste von Spaltennamen, die berücksichtigt werden.
Feature Engineering mit PySpark

NAs oder NULLs verwerfen

# Alle Datensätze mit NULL-Werten löschen
df = df.dropna()

# Datensätze löschen, wenn LISTPRICE und SALESCLOSEPRICE beide NULL sind df = df.dropna(how='all', subset['LISTPRICE', 'SALESCLOSEPRICE '])
# Datensätze löschen, wenn mindestens zwei Spalten NULL sind df = df.dropna(thresh=2)
Feature Engineering mit PySpark

Duplikate verwerfen

Was ist ein Duplikat?

  • Zwei oder mehr Datensätze enthalten exakt dieselben Informationen
  • Nach dem Löschen von Spalten oder dem Joinen von Datensätzen auf Duplikate prüfen

dropDuplicates()

  • Kann auf das ganze DataFrame oder eine Spaltenliste angewendet werden
  • In PySpark gibt es keine Reihenfolge, welches Duplikat entfernt wird
# Gesamtes DataFrame
df.dropDuplicates()

# Nur eine Spaltenliste prüfen df.dropDuplicates(['streetaddress'])
Feature Engineering mit PySpark

Lass uns üben!

Feature Engineering mit PySpark

Preparing Video For Download...