Введение в ящики с усами (Box Plots) в Matplotlib
Что такое ящик с усами и для чего он используется?
Ящик с усами (Box Plot), также известный как диаграмма размаха, – это стандартизированный способ графического представления распределения данных на основе пятичисловой сводки: минимального значения, первого квартиля (Q1), медианы (Q2), третьего квартиля (Q3) и максимального значения. Он широко используется для выявления выбросов, сравнения распределений разных наборов данных и визуальной оценки симметрии данных.
В контексте, например, интернет-маркетинга, ящик с усами может быть полезен для сравнения эффективности различных рекламных кампаний (CTR, CPC, ROI) или анализа пользовательского поведения (время, проведенное на сайте, количество просмотренных страниц).
Краткое описание основных элементов ящика с усами (медиана, квартили, выбросы)
- Медиана (Q2): Середина набора данных.
- Первый квартиль (Q1): 25-й процентиль, середина между минимумом и медианой.
- Третий квартиль (Q3): 75-й процентиль, середина между медианой и максимумом.
- Межквартильный размах (IQR): Расстояние между Q1 и Q3 (Q3 — Q1).
- Усы: Линии, идущие от коробки к минимальному и максимальному значениям в пределах 1.5 * IQR от Q1 и Q3 соответственно. Значения, выходящие за пределы усов, считаются выбросами.
- Выбросы: Точки данных, которые значительно отличаются от остальных данных в наборе. Отображаются как отдельные точки за пределами усов.
Преимущества использования ящиков с усами для визуализации данных
- Наглядность: Легко воспринимаемая визуализация распределения.
- Сравнение: Простое сравнение распределений нескольких групп данных.
- Выявление выбросов: Четкая индикация наличия и расположения выбросов.
- Оценка симметрии: Позволяет оценить, насколько симметрично распределены данные.
- Устойчивость к выбросам: Менее чувствителен к экстремальным значениям, чем, например, гистограмма.
Функция boxplot() в Matplotlib: создание базового ящика с усами
Синтаксис функции boxplot()
Основная функция для создания ящиков с усами в Matplotlib – matplotlib.pyplot.boxplot()
. Синтаксис выглядит следующим образом:
import matplotlib.pyplot as plt
plt.boxplot(x, # Данные для построения ящика с усами
notch=None, # Создание выреза вокруг медианы
sym=None, # Символ для отображения выбросов
vert=None, # Вертикальное или горизонтальное отображение
whis=None, # Длина усов (по умолчанию 1.5 IQR)
positions=None, # Позиции ящиков с усами на графике
widths=None, # Ширина ящиков с усами
patch_artist=None, # Закрашивание ящиков с усами
bootstrap=None, # Использовать бутстрап для построения доверительных интервалов медианы
usermedians=None, # Задать медианы вручную
conf_intervals=None, # Задать доверительные интервалы вручную
meanline=None, # Показывать линию среднего
showmeans=None, # Показывать среднее значение
showcaps=None, # Показывать линии на концах усов
showbox=None, # Показывать коробку
showfliers=None, # Показывать выбросы
boxprops=None, # Свойства коробки
whiskerprops=None, # Свойства усов
flierprops=None, # Свойства выбросов
medianprops=None, # Свойства медианы
capprops=None, # Свойства линий на концах усов
meanprops=None) # Свойства среднего значения
plt.show()
Основные параметры функции boxplot() (x, data, notch, vert, patch_artist, showmeans, showfliers, labels)
x
: Входные данные. Это может быть один массив или список массивов.data
: DataFrame, из которого берутся данные, еслиx
– строка, представляющая столбец.notch
: ЕслиTrue
, создает вырез вокруг медианы, показывающий доверительный интервал.vert
: ЕслиTrue
(по умолчанию), ящик с усами отображается вертикально. ЕслиFalse
– горизонтально.patch_artist
: ЕслиTrue
, позволяет закрашивать ящики с усами цветом.showmeans
: ЕслиTrue
, отображает среднее значение.showfliers
: ЕслиTrue
(по умолчанию), отображает выбросы.labels
: Список меток для каждого ящика с усами.
Пример создания простого ящика с усами для одного набора данных
import matplotlib.pyplot as plt
import numpy as np
from typing import List
def create_simple_boxplot(data: List[float], title: str = "Простой ящик с усами") -> None:
"""Создает простой ящик с усами для одного набора данных."""
plt.figure(figsize=(8, 6))
plt.boxplot(data)
plt.title(title)
plt.ylabel("Значения")
plt.show()
# Пример использования
data = np.random.normal(loc=50, scale=15, size=100) # Генерация случайных данных
create_simple_boxplot(data)
Пример создания ящика с усами для нескольких наборов данных
import matplotlib.pyplot as plt
import numpy as np
from typing import List
def create_multiple_boxplots(data: List[List[float]], labels: List[str], title: str = "Сравнение нескольких наборов данных") -> None:
"""Создает ящик с усами для нескольких наборов данных."""
plt.figure(figsize=(10, 6))
plt.boxplot(data, labels=labels)
plt.title(title)
plt.ylabel("Значения")
plt.xlabel("Группы")
plt.show()
# Пример использования
data1 = np.random.normal(loc=50, scale=15, size=100)
data2 = np.random.normal(loc=70, scale=10, size=100)
data3 = np.random.normal(loc=30, scale=20, size=100)
data = [data1, data2, data3]
labels = ["Группа A", "Группа B", "Группа C"]
create_multiple_boxplots(data, labels)
Настройка внешнего вида ящика с усами
Изменение цвета и стиля линий (boxprops, whiskerprops, capprops, medianprops, flierprops)
Функция boxplot()
позволяет настраивать внешний вид практически каждого элемента ящика с усами через параметры boxprops
, whiskerprops
, capprops
, medianprops
и flierprops
. Эти параметры принимают словари, определяющие свойства линий и маркеров.
Заполнение ящика цветом (patch_artist = True)
Чтобы закрасить ящик с усами цветом, необходимо установить параметр patch_artist=True
. После этого можно задать цвет заливки через параметр facecolor
в boxprops
.
Отображение среднего значения (showmeans = True, meanline = True)
Параметр showmeans=True
отображает среднее значение в виде точки. Если meanline=True
, среднее значение отображается в виде линии, пересекающей ящик с усами.
Настройка отображения выбросов (marker, markersize, markeredgecolor, markerfacecolor)
Свойства выбросов (форма, размер, цвет) настраиваются через словарь flierprops
. Можно изменить форму маркера (marker
), его размер (markersize
), цвет обводки (markeredgecolor
) и цвет заливки (markerfacecolor
).
Изменение ориентации ящика с усами (vert = False)
По умолчанию ящик с усами отображается вертикально. Чтобы изменить ориентацию на горизонтальную, установите параметр vert=False
.
Добавление засечек (notch = True)
Установите параметр notch=True
, чтобы создать вырез вокруг медианы, показывающий доверительный интервал. Это позволяет визуально оценить, насколько различаются медианы разных групп.
Работа с выбросами (Outliers)
Управление отображением выбросов (showfliers = False)
Чтобы скрыть выбросы, установите параметр showfliers=False
.
Настройка стиля выбросов (flierprops)
Параметр flierprops
позволяет детально настроить внешний вид выбросов, как описано выше (форма, размер, цвет и т.д.).
Идентификация и удаление выбросов из данных (кратко)
Выбросы можно идентифицировать, рассчитав IQR и определив значения, выходящие за пределы 1.5 * IQR от Q1 и Q3. Удаление выбросов – отдельная задача, требующая осторожности. В контексте, например, контекстной рекламы, удаление выбросов может быть оправдано, если это явно ошибочные данные (например, клик по цене, превышающей разумные пределы). Однако следует учитывать, что выбросы могут содержать ценную информацию и их удаление может привести к искажению результатов анализа.
Дополнительные возможности и продвинутые настройки
Добавление подписей и заголовков к графику
Используйте функции plt.title()
, plt.xlabel()
, plt.ylabel()
для добавления заголовка и подписей к осям.
Изменение масштаба осей
Функции plt.xlim()
и plt.ylim()
позволяют установить пределы осей.
Создание нескольких ящиков с усами на одном графике (subplots)
Используйте plt.subplots()
для создания нескольких графиков (в том числе ящиков с усами) на одном рисунке.
Использование ящиков с усами с другими типами графиков
Ящики с усами можно комбинировать с другими типами графиков (например, точечными диаграммами) для более полного анализа данных. Например, можно добавить точечные диаграммы, показывающие отдельные наблюдения, поверх ящиков с усами, чтобы увидеть распределение данных более детально.
Примеры использования ящиков с усами для анализа данных
Сравнение распределений нескольких групп данных
Ящики с усами отлично подходят для визуального сравнения распределений разных групп. Можно легко увидеть различия в медианах, квартилях, размахе и наличии выбросов.
Определение выбросов в данных
Ящики с усами позволяют быстро выявить выбросы, которые могут потребовать дальнейшего изучения.
Оценка симметричности распределения
Положение медианы относительно квартилей и длины усов позволяют оценить симметричность распределения. Если медиана находится посередине между квартилями, а усы имеют примерно одинаковую длину, то распределение симметрично. Если медиана смещена в одну сторону, а усы имеют разную длину, то распределение асимметрично.
Заключение
Краткое резюме основных моментов
Ящики с усами – мощный инструмент визуализации данных, позволяющий быстро оценить распределение, сравнить группы и выявить выбросы. Функция matplotlib.pyplot.boxplot()
предоставляет широкие возможности для настройки внешнего вида ящиков с усами и их интеграции с другими типами графиков.
Рекомендации по дальнейшему изучению темы
- Изучите документацию Matplotlib по функции
boxplot()
. - Поэкспериментируйте с различными параметрами настройки внешнего вида ящиков с усами.
- Попробуйте комбинировать ящики с усами с другими типами графиков.
- Изучите методы обработки выбросов и их влияние на анализ данных.