Ящик с усами в Matplotlib: функция создания и настройка

Введение в ящики с усами (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().
  • Поэкспериментируйте с различными параметрами настройки внешнего вида ящиков с усами.
  • Попробуйте комбинировать ящики с усами с другими типами графиков.
  • Изучите методы обработки выбросов и их влияние на анализ данных.

Добавить комментарий