Поле bin в кодировании

Биннинг в Vega-Lite представляет собой механизм дискретизации непрерывных количественных данных для их последующего отображения в виде гистограмм, тепловых карт, ступенчатых распределений и других форм визуализации, требующих разбиения числовой оси на интервалы. Поле bin в канале кодирования определяет, как именно выполняется это разбиение, какие параметры влияют на ширину интервалов, их количество и границы.

В Vega-Lite биннинг задаётся внутри описания канала (обычно x, y, реже color, size) через свойство:

  • bin: true — включение биннинга с параметрами по умолчанию
  • bin: { ... } — детальная настройка процесса разбиения

При активации биннинга исходное числовое поле преобразуется в два производных поля:

  • начало интервала (bin start)
  • конец интервала (bin end)

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

Базовая форма биннинга

Простейшая конфигурация:

{
  "mark": "bar",
  "encoding": {
    "x": {
      "field": "value",
      "type": "quantitative",
      "bin": true
    },
    "y": {
      "aggregate": "count",
      "type": "quantitative"
    }
  }
}

В данном случае Vega-Lite автоматически выбирает стратегию разбиения диапазона значений поля value, формируя интервалы одинаковой ширины.

Параметр maxbins

Наиболее часто используемая настройка — maxbins, ограничивающая количество интервалов:

"bin": {
  "maxbins": 20
}

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

Особенность заключается в том, что фактическое количество бин может отличаться от maxbins, так как применяется эвристика выбора «красивых» чисел (1, 2, 5, 10 и их степени).

Управление шагом: step и anchor

Для более строгого контроля используется параметр step, задающий фиксированную ширину интервала:

"bin": {
  "step": 10
}

При таком подходе диапазон значений делится на равные отрезки длиной 10 единиц.

Параметр anchor определяет точку привязки сетки биннинга:

"bin": {
  "step": 10,
  "anchor": 0
}

Если anchor установлен в 0, интервалы будут выглядеть как:

  • [0, 10)
  • [10, 20)
  • [20, 30)

Если anchor смещён, сетка сдвигается, что критично при работе с временными или смещёнными числовыми распределениями.

extent и ограничение диапазона

Параметр extent задаёт явный диапазон данных, который должен быть разбит на корзины:

"bin": {
  "extent": [0, 100]
}

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

base и логарифмическое разбиение

Для нелинейных распределений применяется параметр base, определяющий основание логарифмического биннинга:

"bin": {
  "base": 2
}

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

divide и сложные шкалы

Параметр divide управляет разбиением диапазона на неравномерные сегменты:

"bin": {
  "divide": [5, 2]
}

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

Результат трансформации данных

При компиляции Vega-Lite преобразует биннинг в Vega-конструкции, добавляя в поток данных новые поля:

  • field_bin_start
  • field_bin_end

Или их эквиваленты, зависящие от имени исходного поля.

Пример внутреннего представления:

{
  "transform": [
    {
      "bin": true,
      "field": "value",
      "as": ["value_start", "value_end"]
    }
  ]
}

Эти поля затем используются для позиционирования геометрических примитивов, чаще всего прямоугольников.

Использование биннинга в гистограммах

Типичная структура гистограммы строится на сочетании биннинга и агрегирования:

{
  "mark": "bar",
  "encoding": {
    "x": {
      "field": "value",
      "type": "quantitative",
      "bin": {
        "maxbins": 30
      }
    },
    "y": {
      "aggregate": "count",
      "type": "quantitative"
    }
  }
}

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

Биннинг и шкалы осей

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

  • начало интервала отображается как позиция бара
  • ширина интервала задаёт визуальную ширину элемента

При этом подписи осей могут отображать либо левую границу, либо середину интервала, в зависимости от конфигурации axis.

Взаимодействие с другими трансформациями

Биннинг может комбинироваться с другими трансформациями Vega-Lite:

  • aggregate — подсчёт количества элементов в каждом интервале
  • filter — предварительное ограничение набора данных
  • calculate — создание производных значений до биннинга

Порядок применения трансформаций критичен: биннинг выполняется до агрегирования.

Особенности поведения и тонкости

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

  1. Границы интервалов обычно полуоткрытые: [a, b)
  2. Значения NaN и null исключаются из биннинга
  3. При изменении данных автоматически пересчитываются границы
  4. Временные данные могут биниться с учётом календарных единиц (день, месяц, год)

Биннинг временных данных

Хотя биннинг чаще применяется к числам, Vega-Lite поддерживает его и для временных шкал:

"bin": {
  "maxbins": 12
}

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

Роль биннинга в декларативной визуализации

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

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

Механизм остаётся декларативным: описание биннинга не требует указания алгоритма разбиения, а задаёт только ограничения и предпочтения, оставляя конкретную реализацию системе компиляции Vega-Lite.