Ящик с усами (box plot)

Ящик с усами (box plot) представляет собой компактную графическую форму отображения распределения числовых данных через ключевые статистические характеристики: медиану, квартильные значения и диапазон разброса. Основная задача такого представления — визуализация формы распределения без детализации каждого отдельного наблюдения.

Центральная конструкция опирается на пять числовых ориентиров:

  • минимальное значение без учёта выбросов
  • первый квартиль (Q1)
  • медиана (Q2)
  • третий квартиль (Q3)
  • максимальное значение без учёта выбросов

Разница между третьим и первым квартилем образует межквартильный размах (IQR), который определяет основной «ящик» распределения.

Межквартильный размах и границы выбросов

Межквартильный размах формализуется выражением:

IQR = Q3 - Q1

Границы «усов» обычно определяются через коэффициент 1.5:

  • нижняя граница: Q1 − 1.5 × IQR
  • верхняя граница: Q3 + 1.5 × IQR

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

Логика визуальной структуры box plot

Графическая структура ящика с усами состоит из нескольких компонентов:

  • прямоугольник, охватывающий интерквартильный диапазон
  • линия внутри прямоугольника, обозначающая медиану
  • «усы», отходящие к минимальному и максимальному допустимому значению
  • отдельные точки выбросов

Важной особенностью является то, что box plot не отображает плотность распределения напрямую, но позволяет оценить асимметрию, смещение медианы и наличие аномальных значений.

Представление box plot в Vega-Lite

В Vega-Lite box plot создаётся с использованием mark типа boxplot. Библиотека автоматически вычисляет квартильные значения и границы выбросов, опираясь на входные данные.

Базовая структура спецификации:

{
  "data": {
    "values": [
      {"category": "A", "value": 12},
      {"category": "A", "value": 18},
      {"category": "A", "value": 25},
      {"category": "B", "value": 7},
      {"category": "B", "value": 14},
      {"category": "B", "value": 22}
    ]
  },
  "mark": "boxplot",
  "encoding": {
    "x": {"field": "category", "type": "nominal"},
    "y": {"field": "value", "type": "quantitative"}
  }
}

В данной конфигурации:

  • x задаёт категориальное разделение данных
  • y определяет числовую шкалу распределения
  • mark: "boxplot" активирует автоматический расчёт статистик

Горизонтальная и вертикальная ориентация

Ориентация box plot определяется расположением каналов x и y. При стандартной конфигурации категории располагаются по оси X, а числовые значения — по оси Y.

Перестановка каналов меняет ориентацию:

{
  "mark": "boxplot",
  "encoding": {
    "x": {"field": "value", "type": "quantitative"},
    "y": {"field": "category", "type": "nominal"}
  }
}

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

Многослойная структура вычислений в Vega-Lite

Box plot в Vega-Lite не является одиночным графическим примитивом. Он строится как композиция нескольких статистических операций:

  • агрегирование данных по группам
  • вычисление квартилей
  • определение медианы
  • расчёт границ усов
  • фильтрация выбросов

Эта логика скрыта внутри высокоуровневого mark, однако при экспорте в Vega она разворачивается в несколько слоёв трансформаций и геометрических примитивов.

Работа с группировкой и разделением данных

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

{
  "mark": "boxplot",
  "encoding": {
    "x": {"field": "group", "type": "nominal"},
    "y": {"field": "value", "type": "quantitative"},
    "color": {"field": "series", "type": "nominal"}
  }
}

В этом случае каждая комбинация group + series формирует отдельное распределение. Цвет используется как визуальный индикатор различий между подмножествами данных.

Настройка выбросов и отображения усов

Vega-Lite предоставляет параметры для управления отображением выбросов и структуры усов:

  • extent — коэффициент определения диапазона усов
  • size — толщина линий и коробки
  • ticks — отображение дополнительных меток

Пример настройки:

{
  "mark": {
    "type": "boxplot",
    "extent": 1.5,
    "size": 30
  },
  "encoding": {
    "x": {"field": "category", "type": "nominal"},
    "y": {"field": "value", "type": "quantitative"}
  }
}

Уменьшение extent делает критерий выбросов более строгим, увеличение — более мягким.

Обработка распределений с асимметрией

Box plot особенно информативен при анализе асимметричных распределений. Смещение медианы относительно центра коробки указывает на перекос данных.

Типичные случаи интерпретации:

  • медиана ближе к Q1 — правосторонняя асимметрия
  • медиана ближе к Q3 — левосторонняя асимметрия
  • длинный верхний ус — наличие редких высоких значений
  • длинный нижний ус — наличие редких низких значений

Такая визуализация позволяет быстро оценивать форму распределения без построения гистограммы или KDE.

Использование трансформаций Vega для box plot

В Vega (низкоуровневом языке) box plot строится через явное описание трансформаций:

  • aggregate для вычисления квартилей
  • joinaggregate для группировки
  • calculate для определения границ
  • filter для отбора выбросов

Пример логики:

{
  "transform": [
    {
      "aggregate": [
        {"op": "q1", "field": "value", "as": "q1"},
        {"op": "median", "field": "value", "as": "median"},
        {"op": "q3", "field": "value", "as": "q3"}
      ],
      "groupby": ["category"]
    }
  ]
}

Дальнейшие шаги включают вычисление IQR и построение геометрии через rect, rule и symbol.

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

Box plot эффективно используется для сравнительного анализа нескольких выборок. В Vega-Lite это достигается через категориальное разделение:

  • ось категорий формирует группы
  • числовая ось задаёт распределение
  • дополнительные поля уточняют подгруппы

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

Взаимодействие со шкалами и масштабированием

Корректная интерпретация box plot зависит от настройки шкал:

  • линейная шкала сохраняет пропорции распределения
  • логарифмическая шкала применяется при сильно скошенных данных
  • дискретные шкалы используются для категориальных разрезов

В Vega-Lite шкала задаётся через encoding:

"y": {
  "field": "value",
  "type": "quantitative",
  "scale": {"type": "log"}
}

Логарифмическое масштабирование изменяет визуальное восприятие усов и медианы, особенно при наличии выбросов большого порядка.

Компоновка с другими визуальными элементами

Box plot часто комбинируется с другими mark-типами для уточнения структуры данных:

  • scatter plot для отображения исходных точек
  • jitter для устранения наложений
  • violin plot для плотностного анализа

В Vega-Lite такая композиция реализуется через layer:

{
  "layer": [
    {
      "mark": "boxplot",
      "encoding": {
        "x": {"field": "category", "type": "nominal"},
        "y": {"field": "value", "type": "quantitative"}
      }
    },
    {
      "mark": "point",
      "encoding": {
        "x": {"field": "category", "type": "nominal"},
        "y": {"field": "value", "type": "quantitative"}
      }
    }
  ]
}

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

Особенности интерпретации при малых выборках

При небольшом количестве наблюдений box plot теряет часть статистической устойчивости:

  • квартильные значения становятся дискретными
  • выбросы могут определяться нестабильно
  • медиана может совпадать с крайними значениями

В Vega-Lite это не приводит к ошибкам, но визуальная интерпретация становится менее репрезентативной, что следует учитывать при анализе малых данных.