Поле data является центральной частью декларативного
описания визуализации в Vega и Vega-Lite. Оно определяет источники
данных, их формат, способ загрузки и первичную структуру, на основе
которой далее строятся преобразования, шкалы и визуальные элементы. В
отличие от императивных подходов, здесь данные описываются как часть
схемы, а не обрабатываются вручную в коде визуализации.
В спецификациях Vega-Lite данные задаются как объект или массив объектов, каждый из которых описывает отдельный набор данных. Каждый набор данных может быть:
Vega использует более низкоуровневую модель, где данные обычно
определяются через массив data, содержащий объекты с
именами наборов, источниками и преобразованиями.
valuesНаиболее прямой способ описания данных — использование поля
values. Оно содержит массив объектов или примитивов,
которые интерпретируются как строки данных.
{
"data": {
"values": [
{ "category": "A", "value": 28 },
{ "category": "B", "value": 55 },
{ "category": "C", "value": 43 }
]
}
}
В этом случае данные полностью встроены в спецификацию. Такой подход применяется для:
Особенность values заключается в том, что Vega-Lite
немедленно интерпретирует массив как таблицу, где каждый объект — это
строка, а ключи объекта — поля.
Поле values может содержать:
Однако наиболее устойчивый и распространённый формат — массив объектов.
urlПоле url используется для загрузки данных из внешнего
источника. Vega и Vega-Lite поддерживают различные форматы:
{
"data": {
"url": "data/sales.csv"
}
}
При этом Vega автоматически определяет формат, если он явно не указан, либо использует стандартные правила парсинга.
{
"data": {
"url": "data/sales.csv",
"format": {
"type": "csv"
}
}
}
formatformat определяет способ интерпретации входных данных.
Оно критически важно при работе с неоднородными источниками.
csv — таблицы с разделителямиtsv — табличные данные с табуляциейjson — структурированные объектыtopojson — географические данныеdsv — данные с произвольным разделителем{
"data": {
"url": "data/items.json",
"format": {
"type": "json"
}
}
}
В случае JSON Vega ожидает либо массив объектов, либо объект, который
затем преобразуется через property:
{
"data": {
"url": "data/root.json",
"format": {
"type": "json",
"property": "data.items"
}
}
}
Поле property позволяет извлекать вложенные
структуры.
В Vega-Lite существует механизм datasets, позволяющий
определить несколько наборов данных на верхнем уровне и ссылаться на них
по имени.
{
"datasets": {
"tableA": [
{ "x": 1, "y": 10 },
{ "x": 2, "y": 20 }
],
"tableB": [
{ "x": 1, "y": 5 },
{ "x": 2, "y": 15 }
]
},
"data": { "name": "tableA" }
}
Такой подход позволяет:
name и
связь с трансформациямиПоле name используется в Vega (низкоуровневой
спецификации) для идентификации набора данных внутри графа
вычислений.
{
"data": [
{
"name": "sourceTable",
"url": "data.csv"
}
]
}
Идентификатор name позволяет:
dataОдной из ключевых особенностей Vega является возможность описания
преобразований прямо в блоке данных через transform.
{
"data": {
"values": [
{ "category": "A", "value": 10 },
{ "category": "B", "value": 20 }
],
"transform": [
{
"type": "filter",
"expr": "datum.value > 15"
}
]
}
}
{
"data": {
"values": [
{ "a": 2, "b": 3 }
],
"transform": [
{
"type": "formula",
"as": "sum",
"expr": "datum.a + datum.b"
}
]
}
}
Трансформации выполняются последовательно и формируют конвейер обработки данных.
При работе с внешними источниками часто возникает необходимость привести данные к единому формату. Для этого используются:
calculate / formulaaggregatefoldpivotlookup{
"data": {
"url": "sales.csv",
"transform": [
{
"type": "aggregate",
"groupby": ["region"],
"fields": ["amount"],
"ops": ["sum"],
"as": ["total"]
}
]
}
}
Здесь данные преобразуются из строк транзакций в агрегированную таблицу.
Vega поддерживает использование нескольких наборов данных в одной визуализации. Это особенно важно для:
{
"data": [
{
"name": "points",
"url": "points.csv"
},
{
"name": "lines",
"url": "lines.csv"
}
]
}
Каждый набор данных становится независимой сущностью внутри графа исполнения.
lookupОдин из мощных механизмов — связывание таблиц по ключу.
{
"transform": [
{
"type": "lookup",
"from": "tableB",
"key": "id",
"fields": ["id"],
"as": ["joined"]
}
]
}
Так реализуется поведение, аналогичное join в реляционных базах данных.
При работе с картографией используется формат TopoJSON:
{
"data": {
"url": "world-110m.json",
"format": {
"type": "topojson",
"feature": "countries"
}
}
}
Поле feature указывает, какие геометрические объекты
извлекать.
Vega строит граф вычислений, где каждый data-узел может
зависеть от других. Это создаёт:
Каждое изменение входных данных приводит к пересборке зависимых узлов.
В Vega-Lite поле data более декларативно и упрощено:
values, url,
nameВ Vega:
dataНа практике часто возникают следующие проблемы:
format при нестандартных CSVurldatasetsnameЭти ошибки приводят к тому, что граф не может быть построен или данные интерпретируются как пустые.
data в визуализацииПоле data является точкой входа всей системы
визуализации. Оно определяет:
encodeВсе последующие элементы спецификации — оси, марки, интерактивность — зависят от корректного определения данных и их преобразований.