machine-learningЛекцияPython

Pandas Advanced: Агрегация, Сводные таблицы и Джойны

👀 Загрузка...

Цели лекции

  1. Освоить парадигму Split-Apply-Combine (Groupby) для получения инсайтов из данных.
  2. Научиться перестраивать структуру таблиц с помощью Pivot Tables (аналог сводных таблиц Excel).
  3. Понять логику объединения данных: Merge и Join (аналоги SQL JOIN).
  4. Разработать стратегию работы с пропущенными данными (Missing Values).

Часть 1: Группировка (Groupby) — Сердце аналитики

В 90% случаев бизнес-вопрос звучит не "Сколько мы заработали?", а "Сколько мы заработали в разрезе регионов/месяцев/категорий?". Для этого используется метод .groupby().

1.1. Парадигма Split-Apply-Combine

Этот термин ввел создатель pandas Уэс МакКинни. Процесс состоит из трех скрытых шагов:

  1. Split: Данные разбиваются на "ведра" (группы) по какому-то ключу (например, по Category).
  2. Apply: К каждому "ведру" применяется функция агрегации (сумма, среднее, макс).
  3. Combine: Результаты склеиваются обратно в единый DataFrame.

1.2. Синтаксис инженера

# Группируем по 'City', берем колонку 'Sales', считаем сумму
df.groupby('City')['Sales'].sum()

1.3. Множественная агрегация (.agg)

Часто нужно посчитать сразу несколько метрик. Используйте метод .agg():

df.groupby('Category')['Price'].agg(['mean', 'max', 'count'])

Это вернет таблицу, где для каждой категории есть средняя цена, максимальная и количество товаров.


Часть 2: Сводные таблицы (Pivot Tables)

Если groupby создает "длинную" таблицу (много строк), то pivot_table создает "широкую" таблицу (матрицу), удобную для отчетов и тепловых карт (Heatmaps).

2.1. Анатомия Pivot Table

Представьте, что вы хотите увидеть матрицу, где:

  • Индекс (строки): Дата.
  • Колонки: Города.
  • Значения (в ячейках): Выручка.

В groupby это потребовало бы сложной обработки. В Pivot это одна строка:

pivot = df.pivot_table(
    index='Date', 
    columns='City', 
    values='Sales', 
    aggfunc='sum'
)

Аналогия с Excel

Это полная копия функционала "Insert -> Pivot Table" в Excel, но программно и воспроизводимо.


Часть 3: Объединение таблиц (Merge & Join)

В реальности данные никогда не лежат в одном файле. У вас есть Customers.csv, Orders.csv и Products.csv. Их нужно собрать воедино.

3.1. Функция pd.merge()

Это прямой аналог SQL JOIN. Синтаксис:

pd.merge(left_df, right_df, on='key_column', how='inner')

3.2. Типы объединения (how=)

Критический параметр

Выбор типа объединения (how) — это критически важный параметр. Неверный выбор how приведет к потере данных или дубликатам.

  • inner (Внутреннее): Оставляет только те ключи, которые есть в обеих таблицах. (Пересечение множеств).
    • Риск: Если у клиента нет заказов, он исчезнет из отчета.
  • left (Левое): Оставляет все строки из левой таблицы, а из правой подтягивает совпадения. Если совпадения нет — ставит NaN.
    • Применение: "Покажи всех клиентов и их заказы (даже если заказов нет)". Самый частый тип в аналитике.
  • outer (Полное): Все ключи из обеих таблиц. (Объединение множеств).
  • right (Правое): Зеркально левому. Используется редко.

Часть 4: Работа с пропусками (Missing Values)

Данные из реального мира "грязные". Пропуски в Pandas обозначаются как NaN (Not a Number) или None. NaN — это заразный вирус: 5 + NaN = NaN.

4.1. Обнаружение

  • df.isna(): Возвращает маску True/False.
  • df.isna().sum(): Показывает количество пропусков по колонкам. Обязательный шаг EDA.

4.2. Стратегии борьбы

У инженера есть три пути:

  • df.dropna(): Удаляет строку, если в ней есть хоть один NaN.
  • Когда применять: Пропусков мало (< 5%), и они случайны.

🧠 Проверка знаний

Какой тип объединения (Join) в Pandas лучше всего использовать, если мы хотим сохранить всех пользователей из базы клиентов, даже если у них пока нет ни одного заказа?

Почему при импутации (заполнении) пропущенных числовых данных предпочтительнее использовать медиану, а не среднее арифметическое?