Агрегирование

Агрегирование сводит таблицу к одной записи для каждой группы. В Vega-Lite его можно задать свойством aggregate в определении поля канала или преобразованием aggregate в массиве transform. Если нужно сохранить исходные записи и добавить к ним вычисленный итог, используйте присоединённое агрегирование.

Содержание страницы

Агрегирование в канале кодирования

// Спецификация одиночного представления или слоя
{
  ...,
  "mark/layer": ...,
  "encoding": {
    "x": {
      "aggregate": ..., // Агрегирование
      "field": ...,
      "type": "quantitative",
      ...
    },
    "y": ...,
    ...
  },
  ...
}

Свойство aggregate в определении поля вычисляет итоговую статистику поля: например, медиану, минимум или максимум. Если хотя бы один канал содержит aggregate, все поля каналов без функции агрегирования становятся полями группировки1. Для каждой группы создаётся отдельный итог.

Например, столбчатая диаграмма показывает среднее значение Acceleration по числу цилиндров Cylinders:

Агрегированные поля по умолчанию считаются количественными, а неагрегированные поля группировки в таких диаграммах — номинальными.

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

1В статистике поля группировки также называют независимыми переменными или переменными условий, а агрегируемые поля — зависимыми переменными. В бизнес-аналитике им соответствуют измерения и показатели.

Преобразование aggregate

// Любая спецификация представления
{
  ...,
  "transform": [
    {
      // Преобразование агрегирования
      "aggregate": [{"op": ..., "field": ..., "as": ...}],
      "groupby": [...]
    },
     ...
  ],
  ...
}

Та же средняя величина Acceleration по группам Cylinders, но через массив преобразований:

Свойство преобразования Тип Описание
aggregate AggregatedFieldDef[] Обязательный массив объектов, определяющих поля для агрегирования.
groupby FieldName[] Поля данных для группировки. Если не указаны, используется одна группа, содержащая все объекты данных.

Определение итогового поля

Свойство Тип Описание
op AggregateFieldOp Обязательная операция агрегирования, применяемая к полям, например "sum", "average" или "count". См. полный список поддерживаемых операций.
field FieldName Поле данных, для которого вычисляется функция агрегирования. Обязательно для всех операций, кроме "count".
as FieldName Обязательное имя выходного поля для результата агрегирования.

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

Поддерживаемые операции

Операция Результат
count Число записей группы. Считает сами записи, поэтому результат не зависит от указанного поля.
valid Число значений поля, не равных null, undefined и NaN.
values Список исходных записей группы.
missing Число значений поля, равных null или undefined.
distinct Число различных значений поля.
sum Сумма значений.
product Произведение значений.
mean Среднее арифметическое значений поля.
average Среднее арифметическое значений поля; эквивалентно mean.
variance Выборочная дисперсия.
variancep Дисперсия генеральной совокупности.
stdev Выборочное стандартное отклонение.
stdevp Стандартное отклонение генеральной совокупности.
stderr Стандартная ошибка среднего.
median Медиана.
q1 Первый квартиль значений поля (нижняя квартильная граница).
q3 Третий квартиль значений поля (верхняя квартильная граница).
ci0 Нижняя граница бутстрепного 95%-го доверительного интервала среднего.
ci1 Верхняя граница бутстрепного 95%-го доверительного интервала среднего.
min Минимальное значение.
max Максимальное значение.
argmin Исходная запись, в которой значение поля минимально. Внутри encoding задаётся объектом; см. пример ниже.
argmax Исходная запись, в которой значение поля максимально. Внутри encoding задаётся объектом; см. пример ниже.
exponential Экспоненциальное скользящее среднее. Задаётся объектом; см. пример ниже.
exponentialb Экспоненциальное скользящее среднее с поправкой на смещение. Задаётся объектом; см. пример ниже.

argmin и argmax

Иногда нужно получить не само минимальное или максимальное значение, а другое поле той записи, в которой достигнут экстремум. Для этого предназначены argmin и argmax. В определении поля канала свойство aggregate задаётся объектом: argmax указывает поле, по которому ищется максимум, а argmin — поле для поиска минимума.

В этой диаграмме показан производственный бюджет фильма с наибольшими сборами в США в каждом крупном жанре:

Тот же результат можно получить преобразованием aggregate и обращением к вложенному полю выбранной записи:

Подписи на конце линий

argmax помогает находить последнюю точку линии и размещать возле неё подпись:

Экспоненциальное среднее

Операция exponential создаёт сглаженное скользящее среднее, в котором недавние значения имеют больший вес. Это сглаженная альтернатива простому скользящему среднему: она подходит, когда нужно придать больший вес недавним значениям, избегая резкого изменения при выходе значений из окна усреднения. Операция задаётся объектом, в котором exponential указывает вес — число от 0 до 1. Вариант exponentialb добавляет поправку на смещение; пример записи — {"exponentialb": 0.5}.