Werken met missende data

Feature Engineering met PySpark

John Hogue

Lead Data Scientist, General Mills

Hoe raakt data kwijt in het digitale tijdperk?

Dataverzameling

  • Kapotte sensoren

Regels voor dataopslag

  • 2017-01-01 vs January 1st, 2017

Verschillende data samenvoegen

  • Maandelijks naar wekelijks

Opzettelijk missend

  • Privacyzorgen

Vermist

Feature Engineering met PySpark

Typen missend

Completely at random (MCAR)

  • Missende data is gewoon een volledig willekeurige subset

Missing at random (MAR)

  • Voorwaardelijk willekeurig missend op basis van een andere observatie

Not at random (MNAR)

  • Data ontbreekt door de manier van verzamelen
Feature Engineering met PySpark

Missende waarden beoordelen

Wanneer rijen met missende data droppen?

  • Missende waarden zijn zeldzaam
  • Missing Completely at Random

isNull()

  • True als de huidige expressie null is.
df.where(df['ROOF'].isNull()).count()
765
Feature Engineering met PySpark

Missende waarden plotten

# Bibliotheek importeren
import seaborn as sns

# subset van de dataframe sub_df = df.select(['ROOMAREA1'])
# steekproef uit de dataframe sample_df = sub_df.sample(False, .5, 4)
# Converteren naar Pandas DataFrame pandas_df = sample_df.toPandas()
# Plotten sns.heatmap(data=pandas_df.isnull())
Feature Engineering met PySpark

Heatmap van missende waarden

Heatmap van missende data

Feature Engineering met PySpark

Imputatie van missende waarden

Proces om missende waarden te vervangen

Regelgebaseerd

  • Waarde op basis van businesslogica

Statistiekgebaseerd

  • Met gemiddelde, mediaan, enz.

Modelgebaseerd

  • Gebruik een model om de waarde te voorspellen
Feature Engineering met PySpark

Imputatie van missende waarden

** fillna(value, subset=None)

  • value de waarde om missers mee te vervangen
  • subset de lijst met kolomnamen om missers te vervangen
# Missende waarden vervangen door nul
df.fillna(0, subset=['DAYSONMARKET'])
# Vervangen door het gemiddelde van die kolom
col_mean = df.agg({'DAYSONMARKET': 'mean'}).collect()[0][0]
df.fillna(col_mean, subset=['DAYSONMARKET'])
Feature Engineering met PySpark

Laten we oefenen!

Feature Engineering met PySpark

Preparing Video For Download...