Gegevens verwijderen

Feature Engineering met PySpark

John Hogue

Lead Data Scientist, General Mills

Waar kan data misgaan?

  • Verkeerd opgenomen
  • Unieke events
  • Fout geformatteerd
  • Duplicaten
  • Ontbrekend
  • Niet relevant

Domino's

Feature Engineering met PySpark

Kolommen verwijderen

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

Meerdere velden zijn niet nodig voor onze analyse

  • 'NO' automatisch gegenereerd recordnummer
  • 'UNITNUMBER' irrelevante data
  • 'CLASS' overal constant
Feature Engineering met PySpark

Kolommen verwijderen

drop(*cols)

  • *cols – een kolomnaam of een lijst met kolomnamen om te verwijderen.
  • Geeft een nieuwe DataFrame terug met de opgegeven kolommen verwijderd
# List of columns to drop
cols_to_drop = ['NO', 'UNITNUMBER', 'CLASS']

# Drop the columns df = df.drop(*cols_to_drop)
Feature Engineering met PySpark

Tekst filteren

  • where(condition)
    • condition – een Column van types.BooleanType of een string met SQL-expressie.
    • Filtert de DataFrame waar de conditie waar is
  • like(other)
    • other – een SQL LIKE-patroon
    • Geeft een boolean Column terug
  • ~
    • De NOT-operator
df = df.where(~df['POTENTIALSHORTSALE'].like('Not Disclosed'))
Feature Engineering met PySpark

Outliers filteren

Filter data tot binnen drie standaardafwijkingen (3σ) van het gemiddelde (μ)

Standaardnormale verdeling

Feature Engineering met PySpark

Voorbeeld: waarden filteren

# Calculate values used for filtering
std_val = df.agg({'SALESCLOSEPRICE': 'stddev'}).collect()[0][0]
mean_val = df.agg({'SALESCLOSEPRICE': 'mean'}).collect()[0][0]

# Create three standard deviation (μ ± 3σ) upper and lower bounds for data hi_bound = mean_val + (3 * std_val) low_bound = mean_val - (3 * std_val)
# Use where() to filter the DataFrame between values df = df.where((df['LISTPRICE'] < hi_bound) & (df['LISTPRICE'] > low_bound))
Feature Engineering met PySpark

NA's of NULLs verwijderen

DataFrame.dropna()

  • how: 'any' of 'all'. Bij 'any' verwijder je een record als het null bevat. Bij 'all' alleen als alle waarden null zijn.
  • thresh: int, standaard None. Als opgegeven, verwijder records met minder dan thresh niet-null waarden. Dit overschrijft de parameter how.
  • subset: optionele lijst met kolomnamen om te overwegen.
Feature Engineering met PySpark

NA's of NULLs verwijderen

# Drop any records with NULL values
df = df.dropna()

# drop records if both LISTPRICE and SALESCLOSEPRICE are NULL df = df.dropna(how='all', subset['LISTPRICE', 'SALESCLOSEPRICE '])
# Drop records where at least two columns have NULL values df = df.dropna(thresh=2)
Feature Engineering met PySpark

Duplicaten verwijderen

Wat is een duplicaat?

  • Twee of meer records bevatten precies dezelfde info
  • Na kolommen droppen of gegevenssets joinen, controleer op duplicaten

dropDuplicates()

  • Kan op de hele DataFrame of op een kolomlijst worden toegepast
  • In PySpark is er geen volgorde welk record wordt verwijderd
# Entire DataFrame
df.dropDuplicates()

# Check only a column list df.dropDuplicates(['streetaddress'])
Feature Engineering met PySpark

Laten we oefenen!

Feature Engineering met PySpark

Preparing Video For Download...