Поле data в спецификации Vega определяет наборы данных,
используемые для построения визуализаций. Оно может содержать один или
несколько источников, каждый из которых описывает способ загрузки,
преобразования и подготовки данных перед отрисовкой графика.
Базовая структура:
{
"data": [
{
"name": "table",
"values": [],
"url": "",
"format": {},
"transform": []
}
]
}
Ключевыми компонентами являются:
Поле values используется для небольших датасетов, когда
данные передаются напрямую в спецификацию.
{
"name": "points",
"values": [
{ "x": 1, "y": 10 },
{ "x": 2, "y": 20 }
]
}
Особенности:
Поле url позволяет загружать данные из внешних файлов
или API.
{
"name": "sales",
"url": "data/sales.csv"
}
Поддерживаются:
Загрузка может происходить:
Поле format описывает, как интерпретировать входные
данные.
{
"format": {
"type": "csv"
}
}
Дополнительно:
delimiter — кастомный разделительparse — типизация полей{
"format": {
"type": "csv",
"parse": {
"date": "date",
"value": "number"
}
}
}
{
"format": {
"type": "json",
"property": "data"
}
}
property позволяет извлечь вложенный массив из
JSON-структуры.
Поле name создаёт идентификатор таблицы данных внутри
Vega. Он используется для:
transformПример:
{
"name": "source",
"values": [ ... ]
}
Позже этот набор можно использовать как входной:
{
"transform": [
{ "type": "filter", "expr": "datum.value > 10" }
]
}
transform — центральный механизм подготовки данных. Vega
выполняет их последовательно, формируя pipeline обработки.
Удаляет записи, не удовлетворяющие условию.
{
"type": "filter",
"expr": "datum.value > 100"
}
Особенности:
Добавляет новые поля на основе выражений.
{
"type": "calculate",
"as": "total",
"expr": "datum.price * datum.quantity"
}
Характеристики:
Группирует данные и вычисляет статистики.
{
"type": "aggregate",
"groupby": ["category"],
"fields": ["value"],
"ops": ["sum"],
"as": ["total"]
}
Возможные операции:
Используется для гистограмм и разбиения числовых данных.
{
"type": "bin",
"field": "value",
"as": "binnedValue"
}
Результат:
bin_start и bin_endУпорядочивает данные.
{
"type": "sort",
"fields": ["value"],
"order": "ascending"
}
Особенности:
Позволяет выполнять оконные функции.
{
"type": "window",
"ops": ["rank", "sum"],
"fields": ["value"],
"as": ["rank", "runningTotal"]
}
Поддерживаемые операции:
Преобразует широкую таблицу в длинную.
{
"type": "fold",
"fields": ["a", "b", "c"],
"as": ["key", "value"]
}
Используется для:
Преобразует длинную таблицу в широкую.
{
"type": "pivot",
"field": "key",
"value": "value"
}
Особенности:
Позволяет выполнять join с внешними источниками.
{
"type": "lookup",
"from": "table2",
"key": "id",
"fields": ["id"],
"as": ["joinedData"]
}
Механизм:
Добавляет агрегированные значения без уменьшения строк.
{
"type": "joinaggregate",
"ops": ["mean"],
"fields": ["value"],
"as": ["avgValue"]
}
Особенность:
Группировка по временным интервалам.
{
"type": "timeunit",
"field": "date",
"units": ["year", "month"]
}
Используется для:
Трансформации выполняются последовательно, формируя цепочку обработки.
Пример сложного pipeline:
{
"data": [
{
"name": "sales",
"url": "sales.csv",
"format": { "type": "csv" },
"transform": [
{ "type": "filter", "expr": "datum.amount > 0" },
{ "type": "calculate", "as": "profit", "expr": "datum.revenue - datum.cost" },
{
"type": "aggregate",
"groupby": ["region"],
"fields": ["profit"],
"ops": ["sum"],
"as": ["totalProfit"]
}
]
}
]
}
Логика выполнения:
Vega позволяет использовать несколько источников одновременно:
{
"data": [
{ "name": "a", "values": [...] },
{ "name": "b", "url": "data.json" }
]
}
Это необходимо для:
Данные в Vega тесно связаны с другими частями спецификации:
datatransformПример зависимости:
data → фильтрация → агрегацияПри проектировании сложных визуализаций важно учитывать:
aggregate дешевле, чем window на больших
данныхlookup может быть узким местом при больших
join-таблицахcalculate масштабируется линейноfilter лучше выполнять как можно раньше в цепочкеОптимизационная практика:
В Vega-Lite поле data упрощено:
{
"data": {
"url": "data.csv"
}
}
Основные различия:
Vega используется там, где требуется: