Видалення даних

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

John Hogue

Lead Data Scientist, General Mills

Де дані можуть «зіпсуватися»?

  • Неправильно записані
  • Унікальні події
  • Невірне форматування
  • Дублікати
  • Пропуски
  • Не релевантні

Доміно

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

Видалення стовпців

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

Кілька полів не потрібні для нашого аналізу

  • 'NO' — автоматично згенерований номер запису
  • 'UNITNUMBER' — нерелевантні дані
  • 'CLASS' — значення сталe для всіх
Опрацювання ознак у PySpark

Видалення стовпців

drop(*cols)

  • *cols — назва стовпця або список назв для видалення.
  • Повертає новий DataFrame із видаленими вказаними
# Список стовпців для видалення
cols_to_drop = ['NO', 'UNITNUMBER', 'CLASS']

# Видаліть стовпці df = df.drop(*cols_to_drop)
Опрацювання ознак у PySpark

Текстова фільтрація

  • where(condition)
    • condition — стовпець типу types.BooleanType або SQL-вираз рядком.
    • Фільтрує датафрейм, де умова істинна
  • like(other)
    • other — шаблон SQL LIKE
    • Повертає булевий стовпець
  • ~
    • Заперечення (NOT)
df = df.where(~df['POTENTIALSHORTSALE'].like('Not Disclosed'))
Опрацювання ознак у PySpark

Фільтрація викидів

Відфільтруйте дані в межах трьох стандартних відхилень (3σ) від середнього (μ)

Стандартний нормальний розподіл

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

Приклад фільтрації значень

# Обчисліть значення для фільтрації
std_val = df.agg({'SALESCLOSEPRICE': 'stddev'}).collect()[0][0]
mean_val = df.agg({'SALESCLOSEPRICE': 'mean'}).collect()[0][0]

# Створіть верхню та нижню межі (μ ± 3σ) hi_bound = mean_val + (3 * std_val) low_bound = mean_val - (3 * std_val)
# Використайте where() для фільтрації між межами df = df.where((df['LISTPRICE'] < hi_bound) & (df['LISTPRICE'] > low_bound))
Опрацювання ознак у PySpark

Видалення NA або NULL

DataFrame.dropna()

  • how: 'any' або 'all'. Якщо 'any', видаліть запис, якщо є будь-які null. Якщо 'all', видаліть запис лише коли всі значення null.
  • thresh: int, типово None. Якщо вказано, видаліть записи з менш ніж thresh ненульовими значеннями. Перекриває параметр how.
  • subset: необов'язковий список назв стовпців для перевірки.
Опрацювання ознак у PySpark

Видалення NA або NULL

# Видаліть записи з NULL-значеннями
df = df.dropna()

# Видаліть записи, якщо і LISTPRICE, і SALESCLOSEPRICE — NULL df = df.dropna(how='all', subset['LISTPRICE', 'SALESCLOSEPRICE '])
# Видаліть записи, де щонайменше два стовпці мають NULL df = df.dropna(thresh=2)
Опрацювання ознак у PySpark

Видалення дублікатів

Що таке дублікат?

  • Два чи більше записів містять однакову інформацію
  • Після видалення стовпців або об'єднання наборів даних перевірте дублікати

dropDuplicates()

  • Можна запускати для всього DataFrame або для списку стовпців
  • У PySpark немає порядку, який запис буде видалено
# Увесь DataFrame
df.dropDuplicates()

# Перевірити лише список стовпців df.dropDuplicates(['streetaddress'])
Опрацювання ознак у PySpark

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

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

Preparing Video For Download...