machine-learningЛекцияPython

Многомерный анализ и Seaborn

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

Цели лекции

  1. Перейти от низкоуровневого рисования (Matplotlib) к статистической визуализации (Seaborn).
  2. Научиться визуализировать более 2-х измерений одновременно (используя цвет, размер и форму).
  3. Освоить инструменты поиска зависимостей: Heatmap (корреляции) и Pairplot (парные отношения).
  4. Понять разницу между распределениями через 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 переменной ii против переменной jj.
  • Применение: Отличный инструмент для быстрого старта EDA. Если при добавлении hue вы видите, что классы четко разделяются прямой линией, значит даже простая линейная модель отлично справится с задачей.

Часть 4: Эстетика и Контекст

Seaborn делает графики привлекательными из коробки, но инженер должен уметь их настраивать под конкретные нужды.

# Включает сетку (очень удобно для точного считывания значений)
sns.set_theme(style="whitegrid")
 
# Управление контекстом (масштабом элементов)
sns.set_context("notebook") # Стандартный масштаб (по умолчанию)
sns.set_context("paper")    # Мелкие шрифты (для интеграции в статьи)
sns.set_context("poster")   # Крупные шрифты (для питчей и презентаций)