Агрегация в Vega-Lite представляет собой механизм преобразования исходного набора данных в обобщённые значения на основе заданных правил. Вместо отображения каждой отдельной записи система формирует сводные показатели: суммы, средние значения, количества, минимумы и максимумы, а также более сложные статистические функции.
Ключевая особенность подхода заключается в том, что агрегация описывается декларативно: разработчик задаёт что нужно вычислить, а не как выполнять вычисления пошагово.
В Vega-Lite агрегация применяется либо внутри канала
encoding, либо через трансформации transform.
Оба подхода используют единый набор агрегирующих операций.
Основные функции агрегации:
count — количество записейsum — сумма значенийmean — среднее арифметическоеmedian — медианаmin — минимумmax — максимумvariance — дисперсияstdev — стандартное отклонениеКаждая функция применяется к полю данных и может сочетаться с группировкой.
Группировка определяет, как именно разбивается исходный набор данных
перед вычислением агрегатов. В Vega-Lite это реализуется через параметр
groupby.
Группировка формирует категории, внутри которых вычисляются агрегированные значения.
Пример логики:
regionНаиболее компактный способ использования агрегирования — через
encoding.
Пример:
{
"data": {
"values": [
{"category": "A", "value": 10},
{"category": "A", "value": 20},
{"category": "B", "value": 5},
{"category": "B", "value": 15}
]
},
"mark": "bar",
"encoding": {
"x": {"field": "category", "type": "nominal"},
"y": {
"field": "value",
"type": "quantitative",
"aggregate": "sum"
}
}
}
В этом примере:
categoryvalueБолее гибкий способ — использование блока transform.
{
"data": {
"values": [
{"city": "A", "sales": 100},
{"city": "A", "sales": 150},
{"city": "B", "sales": 80}
]
},
"transform": [
{
"aggregate": [
{"op": "sum", "field": "sales", "as": "total_sales"}
],
"groupby": ["city"]
}
],
"mark": "bar",
"encoding": {
"x": {"field": "city", "type": "nominal"},
"y": {"field": "total_sales", "type": "quantitative"}
}
}
Здесь происходит явное преобразование:
citysalestotal_salesVega-Lite позволяет вычислять сразу несколько агрегированных значений.
{
"transform": [
{
"aggregate": [
{"op": "sum", "field": "sales", "as": "total"},
{"op": "mean", "field": "sales", "as": "average"},
{"op": "max", "field": "sales", "as": "max_value"}
],
"groupby": ["region"]
}
]
}
Каждая группа получает набор вычисленных метрик одновременно.
Агрегация count часто применяется для построения
распределений категорий.
{
"mark": "bar",
"encoding": {
"x": {"field": "product", "type": "nominal"},
"y": {"aggregate": "count", "type": "quantitative"}
}
}
Особенность count:
fieldПри работе с временными данными агрегация часто применяется совместно с датами.
{
"transform": [
{
"timeUnit": "year",
"field": "date",
"as": "year"
},
{
"aggregate": [
{"op": "sum", "field": "value", "as": "total"}
],
"groupby": ["year"]
}
]
}
Здесь сначала выполняется дискретизация времени, затем агрегирование.
Агрегация в encoding:
Агрегация в transform:
После агрегации часто требуется сортировка результата.
{
"transform": [
{
"aggregate": [
{"op": "sum", "field": "sales", "as": "total"}
],
"groupby": ["category"]
},
{
"sort": [
{"field": "total", "order": "descending"}
]
}
]
}
Сортировка применяется уже к агрегированному набору.
В Vega-Lite можно строить каскадные преобразования:
Пример сценария:
Агрегированные значения напрямую используются в каналах:
x — категории группy — агрегированные метрикиcolor — группировка по дополнительному признакуsize — агрегированные величины (например, count)Пример:
{
"mark": "point",
"encoding": {
"x": {"field": "category", "type": "nominal"},
"y": {"aggregate": "mean", "field": "value"},
"size": {"aggregate": "count"}
}
}
Фильтрация часто предшествует агрегации, ограничивая данные.
{
"transform": [
{
"filter": "datum.value > 0"
},
{
"aggregate": [
{"op": "mean", "field": "value", "as": "avg"}
],
"groupby": ["type"]
}
]
}
Так обеспечивается корректность статистики без влияния выбросов.
Vega-Lite поддерживает последовательные transform, где
каждый шаг опирается на результат предыдущего:
Такая модель позволяет строить сложные аналитические пайплайны без перехода к императивному коду.
Агрегация используется в типовых аналитических задачах:
В каждом случае агрегирование снижает уровень детализации и переводит данные в аналитическую форму.
При работе с агрегацией в Vega-Lite важно учитывать:
Эти ограничения компенсируются предсказуемостью и декларативностью подхода.