Многомерный анализ и Seaborn
Цели лекции
- Перейти от низкоуровневого рисования (Matplotlib) к статистической визуализации (Seaborn).
- Научиться визуализировать более 2-х измерений одновременно (используя цвет, размер и форму).
- Освоить инструменты поиска зависимостей: Heatmap (корреляции) и Pairplot (парные отношения).
- Понять разницу между распределениями через Violinplot.
Часть 1: Философия Seaborn vs Matplotlib
Если Matplotlib — это "холст и кисти" (вы говорите: "нарисуй линию от (0,0) до (1,1)"), то Seaborn — это ваш аналитик (вы говорите: "покажи, как цена зависит от этажа и района").
1.1. DataFrame-Oriented подход
Seaborn изначально спроектирован для работы с библиотекой Pandas и "знает", что такое DataFrame. Давайте сравним подходы:
Вам нужно вручную извлекать колонки как отдельные массивы x и y.
import matplotlib.pyplot as plt
plt.scatter(x=df['Age'], y=df['Income'])1.2. Параметр Hue (Третье измерение)
Как показать 3 измерения на плоском 2D экране? С помощью цвета!
Мощь параметра hue
Параметр hue (оттенок) автоматически разбивает данные по указанной категориальной переменной и окрашивает их в разные цвета. Например, sns.scatterplot(data=df, x='Рост', y='Вес', hue='Пол') мгновенно покажет два разных облака точек на одном графике.
Часть 2: Анализ категориальных данных
Когда одна из переменных — это текст (категория), обычный точечный график (Scatter plot) становится бесполезным. Здесь нужны специальные инструменты.
2.1. Countplot (Счетчик)
Это аналог гистограммы, но специально для категорий.
- Вопрос: "Сколько у нас клиентов из каждого города?"
- Код:
sns.countplot(data=df, x='City') - Обратите внимание: Ось Y вычисляется автоматически — это просто количество записей в каждой категории.
2.2. Barplot (Среднее с доверительным интервалом)
Осторожно с Barplot
Это самый коварный график. Столбец показывает среднее значение, а черная линия сверху ("ус") — это доверительный интервал (обычно 95%).
Инженерный смысл: Если "усы" двух столбцов сильно пересекаются, разница между их средними статистически не значима.
2.3. Boxplot vs Violinplot
Мы уже знакомы с Boxplot, но у него есть минус — он скрывает реальную форму распределения данных.
- Violinplot (Скрипичный график): Это объединение Boxplot и KDE (оценки плотности распределения) по бокам.
- Зачем использовать: Boxplot может показать, что медианы двух групп одинаковы. Но Violinplot вскроет правду: у одной группы распределение нормальное, а у другой — бимодальное (два горба). Это критически важное открытие для кластеризации данных.
Часть 3: Поиск зависимостей (Multivariate Analysis)
Это ядро разведочного анализа данных (EDA). Наша главная цель — найти скрытые связи между переменными.
3.1. Heatmap (Тепловая карта корреляций)
Матрица корреляций — это таблица чисел от -1 до 1. Искать в ней закономерности глазами практически невозможно. Heatmap решает эту проблему, превращая цифры в цветовую сетку.
- Пайплайн:
df.corr()->sns.heatmap() - Интерпретация:
- Близко к +1 (яркий/красный): Прямая зависимость (площадь больше -> цена выше).
- Близко к -1 (темный/синий): Обратная зависимость (возраст авто больше -> цена ниже).
- Около 0: Зависимости нет, только статистический шум.
Проблема мультиколлинеарности
Если два признака на Heatmap имеют корреляцию около 0.99 (например, "температура в C" и "температура в F"), один из них нужно обязательно удалить перед обучением Machine Learning модели.
3.2. Pairplot (Матрица диаграмм рассеяния)
Это "взгляд бога" на датасет. Функция строит графики по принципу "каждый с каждым".
- По диагонали: Распределение одной переменной (гистограмма).
- Вне диагонали: Scatter plot переменной против переменной .
- Применение: Отличный инструмент для быстрого старта EDA. Если при добавлении
hueвы видите, что классы четко разделяются прямой линией, значит даже простая линейная модель отлично справится с задачей.
Часть 4: Эстетика и Контекст
Seaborn делает графики привлекательными из коробки, но инженер должен уметь их настраивать под конкретные нужды.
# Включает сетку (очень удобно для точного считывания значений)
sns.set_theme(style="whitegrid")
# Управление контекстом (масштабом элементов)
sns.set_context("notebook") # Стандартный масштаб (по умолчанию)
sns.set_context("paper") # Мелкие шрифты (для интеграции в статьи)
sns.set_context("poster") # Крупные шрифты (для питчей и презентаций)