$ sudo teach IT

Файл для практики.

customer_id,region,order_amount
1,Yerevan,120
2,Yerevan,135
3,Yerevan,140
4,Yerevan,150
5,Yerevan,160
6,Yerevan,170
7,Yerevan,180
8,Yerevan,190
9,Yerevan,210
10,Yerevan,220
11,Tbilisi,250
12,Tbilisi,270
13,Tbilisi,280
14,Tbilisi,300
15,Tbilisi,320
16,Tbilisi,340
17,Tbilisi,360
18,Tbilisi,380
19,Tbilisi,420
20,Tbilisi,450
21,Prague,180
22,Prague,190
23,Prague,210
24,Prague,220
25,Prague,230
26,Prague,240
27,Prague,260
28,Prague,280
29,Prague,300
30,Prague,2000

В предыдущем уроке мы научились сравнивать категории между собой. Однако далеко не все данные являются категориальными. Очень часто аналитики работают с числовыми признаками: возрастом клиентов, стоимостью заказов, зарплатами сотрудников, количеством просмотров или временем доставки.

Когда мы получаем такой столбец данных, обычно возникает множество вопросов. Какие значения встречаются чаще всего? Есть ли перекос в сторону больших или маленьких значений? Насколько сильно данные различаются между собой? Есть ли выбросы?

Для ответа на подобные вопросы недостаточно просто посмотреть на таблицу. Гораздо удобнее визуализировать распределение данных.

В этом уроке мы познакомимся с графиками histplot(), kdeplot() и displot(), научимся анализировать распределения, искать выбросы и сравнивать несколько наборов данных между собой.

Что вы узнаете в рамках статьи

  • Для чего анализировать распределения данных.
  • Как использовать histplot().
  • Как работает kdeplot().
  • Когда применять displot().
  • Как находить выбросы на графиках.
  • Как сравнивать несколько распределений.
  • Как интерпретировать форму распределения.

Ключевые термины

  • Распределение данных — способ, которым значения распределены внутри набора данных.
  • Гистограмма — график частоты появления значений.
  • Плотность распределения — оценка того, где данные встречаются чаще всего.
  • Выброс — значение, существенно отличающееся от остальных наблюдений.
  • Ядровая оценка плотности (KDE) — сглаженное представление распределения данных.
  • Частота — количество наблюдений в определенном диапазоне значений.

Почему важно изучать распределения

Представим, что у нас есть информация о возрасте клиентов интернет-магазина.

ages = [
    21, 24, 25, 27, 29,
    31, 32, 33, 35, 36,
    37, 40, 42
]

Сам список значений мало что говорит. Нам хочется понять, где сосредоточено большинство клиентов, насколько сильно отличаются значения друг от друга и есть ли необычные наблюдения. Именно для этого используются графики распределения.

Гистограмма и histplot()

Самым популярным инструментом анализа распределений является гистограмма. В Seaborn для ее построения используется функция histplot().

import seaborn as sns
import matplotlib.pyplot as plt

sns.histplot(
    ages
)

plt.show()

График автоматически разделит данные на интервалы и покажет, сколько значений попало в каждый из них. Таким образом становится понятно, где наблюдений много, а где мало.

Как читать гистограмму

Каждый столбец гистограммы представляет некоторый диапазон значений. Высота столбца показывает количество наблюдений внутри этого диапазона. Чем выше столбец, тем чаще встречаются соответствующие значения. Благодаря этому можно быстро увидеть общую структуру данных.

Управление количеством интервалов

Количество интервалов влияет на внешний вид гистограммы.

Например:

sns.histplot(ages, bins=5)

или

sns.histplot(ages, bins=20)

Слишком маленькое количество интервалов скрывает детали распределения. Слишком большое может сделать график шумным и сложным для восприятия. Поэтому значение bins обычно подбирают экспериментально.

Анализ распределения

Гистограмма позволяет быстро понять характер данных. Представим, что большинство наблюдений сосредоточено в центре графика, а по краям значений становится меньше. Такое распределение часто называют нормальным или колоколообразным. Подобная форма встречается во многих реальных задачах: при анализе роста людей, результатов экзаменов и некоторых финансовых показателей.

KDE-графики

Иногда гистограмма выглядит слишком "рваной". Особенно если наблюдений немного. В таких ситуациях удобно использовать сглаженное представление распределения.

Для этого существует функция kdeplot().

import seaborn as sns
import matplotlib.pyplot as plt

sns.kdeplot(
    ages
)

plt.show()

Вместо столбцов мы получаем плавную кривую. Она показывает области, где данные встречаются чаще всего.

Как интерпретировать KDE

Высокие участки кривой соответствуют областям высокой концентрации наблюдений. Низкие участки говорят о том, что такие значения встречаются редко. Главное преимущество KDE заключается в том, что общая форма распределения становится заметнее.

Совмещение KDE и гистограммы

На практике часто используют оба графика одновременно.

sns.histplot(
    ages,
    kde=True
)

В результате отображаются и столбцы, и сглаженная кривая. Такой вариант считается одним из самых информативных.

Что такое displot()

Функция displot() является более универсальным инструментом для анализа распределений. Она позволяет строить различные варианты графиков распределения через единый интерфейс.

Например:

sns.displot(
    ages
)

По умолчанию будет построена гистограмма. При необходимости можно изменять тип отображения через дополнительные параметры.

Когда использовать displot()

Если вы только начинаете исследование данных и хотите быстро построить график распределения, displot() часто оказывается удобным вариантом. Он предоставляет больше возможностей настройки по сравнению с обычным histplot(). Поэтому этот инструмент активно используется в исследовательском анализе данных.

Поиск выбросов

Одной из важных задач анализа распределений является поиск выбросов. Предположим, что среди возрастов клиентов появилось значение 120. Для большинства магазинов такой возраст выглядит подозрительно. На графике подобное наблюдение обычно оказывается далеко от основной массы данных. Поэтому визуализация помогает быстро находить возможные ошибки или необычные случаи.

Как выглядят выбросы

На гистограмме выбросы часто отображаются как небольшие отдельные столбцы вдали от основной группы данных. На KDE-графике они могут создавать дополнительные небольшие пики или длинные хвосты распределения. Именно поэтому анализ распределений обычно выполняется до начала более сложной аналитики.

Сравнение нескольких распределений

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

Рассмотрим пример.

import pandas as pd

df = pd.DataFrame({
    "salary": [
        2500, 2800, 3000,
        4500, 4700, 5000
    ],
    "department": [
        "HR", "HR", "HR",
        "IT", "IT", "IT"
    ]
})

Теперь построим распределения.

sns.histplot(
    data=df,
    x="salary",
    hue="department"
)

Параметр hue разделяет данные по группам. В результате становится понятно, как отличаются распределения между отделами.

Использование KDE для сравнения

Для сравнения групп KDE часто оказывается еще удобнее.

sns.kdeplot(
    data=df,
    x="salary",
    hue="department"
)

Теперь каждая группа отображается собственной кривой. Если кривые сильно отличаются, это может указывать на существенные различия между группами.

На что обращать внимание при сравнении

При сравнении распределений аналитики обычно обращают внимание на то, где находится основная масса данных, насколько сильно значения отличаются друг от друга, присутствуют ли выбросы и есть ли перекос в сторону больших или меньших значений. Кроме того, полезно смотреть на количество выраженных пиков распределения, поскольку они могут указывать на наличие нескольких различных групп внутри данных. Даже без сложных статистических методов такие графики позволяют сделать множество полезных выводов.

Наиболее частые ошибки

  • Использовать слишком большое количество bins
    График становится шумным.
  • Использовать слишком маленькое количество bins
    Важные особенности распределения скрываются.
  • Делать выводы по одному выбросу без дополнительной проверки
    Выброс не всегда означает ошибку.
  • Сравнивать группы без использования hue
    Различия становятся менее заметными.
  • Полностью полагаться только на средние значения
    Форма распределения может содержать важную информацию.

Наиболее частые вопросы

  • Что лучше использовать: histplot или kdeplot?
    Часто их используют вместе.
  • Для чего нужен параметр kde=True?
    Он добавляет сглаженную кривую поверх гистограммы.
  • Когда использовать displot()?
    Когда нужен более гибкий инструмент для анализа распределений.
  • Можно ли сравнивать несколько групп одновременно?
    Да, через параметр hue.
  • Всегда ли выброс является ошибкой?
    Нет, иногда это реальные наблюдения, требующие отдельного анализа.

Итоги

В этом уроке вы познакомились с основными инструментами Seaborn для анализа числовых признаков. Мы научились строить гистограммы через histplot(), изучили сглаженные распределения с помощью kdeplot(), познакомились с функцией displot() и научились искать выбросы.

Кроме того, вы узнали, как сравнивать распределения различных групп и интерпретировать форму данных. Эти навыки являются важной частью исследовательского анализа и помогают лучше понимать структуру данных еще до применения статистических методов и моделей машинного обучения.

На следующий урок