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

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

Параметры преобразования

Свойство Тип Описание
groupby Field[ ] Поля для группировки. Если не заданы, все объекты данных образуют одну группу.
fields Field[ ] Поля для расчёта агрегатов. Порядок должен соответствовать массивам ops и as. Если fields и ops не заданы, по умолчанию выполняется подсчёт count.
ops String[ ] Агрегирующие операции для полей fields, например sum, average или count. Если массив не задан, используется count. См. справочник операций.
as String[ ] Имена выходных полей для агрегатов. По умолчанию создаются из операции и поля, например sum_field или average_field.
cross Boolean Включать ли в результат все сочетания значений полей groupby (по умолчанию false). При true создаются также отсутствующие в данных группы с нулевым количеством, как если бы drop было false. При потоковых обновлениях новые значения группировки добавляют группы, а прежние сохраняются. Полезно для фасетов со всеми возможными разделами данных.
drop Boolean Удалять ли пустые группы с нулевым количеством (по умолчанию true). После обновлений, например интерактивной фильтрации, группа может опустеть. Обычно она исчезает из результата, но для некоторых диаграмм, в частности гистограмм, её полезно сохранить.
key Field Необязательное ключевое поле для ускорения вычисления ключа группы. Вместо сочетания всех полей groupby используется только это поле. Например, для гистограммы достаточно bin0, если bin1 не добавляет различий между группами. Используйте параметр осторожно: ключ должен однозначно определять каждое сочетание значений groupby.

Агрегирующие операции

Все допустимые агрегирующие операции.

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

Использование

Для следующих входных данных:

[
  {"foo": 1, "bar": 1},
  {"foo": 1, "bar": 2},
  {"foo": null, "bar": 3}
]

преобразование aggregate:

{
  "type": "aggregate",
  "fields": ["foo", "bar", "bar"],
  "ops": ["valid", "sum", "median"],
  "as": ["v", "s", "m"]
}

создаёт результат:

[{"v": 2, "s": 6, "m": 2}]

Использование с groupby

Для следующих входных данных:

[
  {"foo": "a", "bar": 1},
  {"foo": "a", "bar": 2},
  {"foo": "b", "bar": 3}
]

преобразование aggregate:

{
  "type": "aggregate",
  "groupby": ["foo"]
}

создаёт результат:

[
  {"foo": "a", "count": 2},
  {"foo": "b", "count": 1}
]

Использование с вложенными полями

Для следующих входных данных:

[
  {"foo": {"baz": "a"}, "bar": 1},
  {"foo": {"baz": "a"}, "bar": 2},
  {"foo": {"baz": "b"}, "bar": 3}
]

преобразование aggregate:

{
  "type": "aggregate",
  "groupby": ["foo.baz"]
}

создаёт результат:

[
  {"foo.baz": "a", "count": 2},
  {"foo.baz": "b", "count": 1}
]

Имя выходного поля "foo.baz" теперь является обычной строкой, а не ссылкой на вложенное поле. Для обращения к нему в других частях спецификации экранируйте точку: "foo\\.baz". Иначе Vega воспримет его как путь к вложенному полю. Чтобы избежать этого, можно сначала извлечь данные преобразованием project.