Робота з пропущеними даними

Опрацювання ознак у PySpark

John Hogue

Lead Data Scientist, General Mills

Як дані зникають у цифрову добу?

Збір даних

  • Несправні датчики

Правила зберігання даних

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

Обʼєднання різнорідних даних

  • Щомісячні до щотижневих

Навмисні пропуски

  • Питання приватності

Пропущено

Опрацювання ознак у PySpark

Типи пропусків

Пропущені повністю навмання

  • Пропуски — це цілком випадкова підмножина даних

Пропущені навмання

  • Умовно випадкові пропуски, зумовлені іншою ознакою

Пропущені не навмання

  • Дані відсутні через спосіб їх збирання
Опрацювання ознак у PySpark

Оцінка пропущених значень

Коли видаляти рядки з пропусками?

  • Пропуски трапляються рідко
  • Пропуски повністю навмання

isNull()

  • True, якщо поточний вираз — null.
df.where(df['ROOF'].isNull()).count()
765
Опрацювання ознак у PySpark

Візуалізація пропусків

# Import library
import seaborn as sns

# subset the dataframe sub_df = df.select(['ROOMAREA1'])
# sample the dataframe sample_df = sub_df.sample(False, .5, 4)
# Convert to Pandas DataFrame pandas_df = sample_df.toPandas()
# Plot it sns.heatmap(data=pandas_df.isnull())
Опрацювання ознак у PySpark

Теплова карта пропущених значень

Теплова карта пропусків

Опрацювання ознак у PySpark

Імпутація пропущених значень

Процес заміни пропусків

На основі правил

  • Значення за бізнес-логікою

На основі статистики

  • Середнє, медіана тощо

Модельний підхід

  • Модель прогнозує значення
Опрацювання ознак у PySpark

Імпутація пропущених значень

** fillna(value, subset=None)

  • value — чим замінити пропуски
  • subset — список стовпців для заміни пропусків
# Заміна пропусків нулем
df.fillna(0, subset=['DAYSONMARKET'])
# Заміна середнім значенням стовпця
col_mean = df.agg({'DAYSONMARKET': 'mean'}).collect()[0][0]
df.fillna(col_mean, subset=['DAYSONMARKET'])
Опрацювання ознак у PySpark

Давайте потренуємось!

Опрацювання ознак у PySpark

Preparing Video For Download...