Именованные источники данных в Vega и Vega-Lite представляют собой механизм, позволяющий определять и переиспользовать наборы данных внутри одной визуализационной спецификации. Вместо работы с единственным безымянным источником, система оперирует несколькими логически отделёнными датасетами, каждый из которых получает уникальное имя и становится доступным для ссылок из различных частей описания графика.
Именованный источник данных — это объект данных, которому присвоен
идентификатор name. Этот идентификатор используется для
последующих обращений внутри спецификации: в преобразованиях, слоях,
масштабах и визуальных примитивах.
Ключевая особенность подхода заключается в разделении данных по ролям:
Такое разделение позволяет строить сложные визуализации без дублирования данных и без повторного вычисления одинаковых трансформаций.
В спецификации Vega данные описываются в массиве data,
где каждый элемент может иметь поле name.
{
"data": [
{
"name": "table",
"values": [
{"category": "A", "value": 28},
{"category": "B", "value": 55},
{"category": "C", "value": 43}
]
}
]
}
После объявления такой структуры данные становятся доступны через имя
table.
Доступ к именованному источнику осуществляется через ссылку:
{
"from": {"data": "table"}
}
Именование превращает набор данных в глобально доступный ресурс внутри спецификации, что позволяет использовать его в:
В Vega-Lite концепция именованных источников реализуется через поле
datasets. В отличие от Vega, где данные являются частью
массива объектов, Vega-Lite разделяет декларацию датасетов и их
использование.
{
"datasets": {
"sales": [
{"month": "Jan", "value": 100},
{"month": "Feb", "value": 120}
]
}
}
Доступ к данным осуществляется через ссылку $source в
data:
{
"data": {
"name": "sales"
}
}
Такой подход делает спецификацию более декларативной и облегчает повторное использование данных в разных местах одной диаграммы.
Именованные источники обладают локальной областью видимости внутри одной спецификации. Это означает:
В сложных визуализациях, особенно в многослойных графиках, важно поддерживать строгую иерархию имен, чтобы избежать конфликтов.
Именованные источники данных особенно важны в трансформациях. Они позволяют строить цепочки обработки данных без потери исходного набора.
{
"transform": [
{
"filter": "datum.value > 30"
}
],
"from": {"data": "table"}
}
{
"transform": [
{
"aggregate": [
{"op": "mean", "field": "value", "as": "avgValue"}
],
"groupby": ["category"]
}
],
"from": {"data": "table"}
}
Именованный источник здесь выступает как точка входа для вычислений, не требующая повторного определения исходного массива.
Одним из ключевых преимуществ является возможность комбинировать несколько датасетов.
{
"transform": [
{
"lookup": "category",
"from": {
"data": "categories",
"key": "id",
"fields": ["label"]
}
}
],
"from": {"data": "table"}
}
Здесь происходит связывание двух именованных источников: основной таблицы и справочника категорий. Такая схема аналогична операции JOIN в реляционных базах данных.
Именованные источники позволяют слоям диаграммы обращаться к одному и тому же набору данных без повторного определения.
{
"layer": [
{
"data": {"name": "table"},
"mark": "bar"
},
{
"data": {"name": "table"},
"mark": "line"
}
]
}
Оба слоя используют один и тот же источник, но применяют разные визуальные представления.
Именованные источники могут быть не только статическими, но и вычисляемыми. Это создаёт цепочку производных данных.
{
"data": [
{
"name": "base",
"values": [
{"x": 1, "y": 10},
{"x": 2, "y": 20}
]
},
{
"name": "derived",
"source": "base",
"transform": [
{"calculate": "datum.y * 2", "as": "y2"}
]
}
]
}
Здесь derived зависит от base, формируя
направленный граф зависимостей данных.
В Vega именованные данные тесно взаимодействуют с сигналами. Сигналы могут изменять поведение данных, а данные могут влиять на сигналы через вычисления.
{
"signals": [
{
"name": "threshold",
"value": 50
}
]
}
{
"transform": [
{
"filter": "datum.value > threshold"
}
],
"from": {"data": "table"}
}
Таким образом создаётся динамическая связь между параметрами и данными, где именованные источники выступают точками привязки.
При работе с несколькими датасетами возможны конфликты:
Стандартная стратегия — явное переименование и структурирование:
raw_sales, agg_sales),Именованные данные формируют основу архитектуры декларативных визуализаций. Они обеспечивают:
В результате спецификация перестаёт быть линейной структурой и превращается в сеть взаимосвязанных источников данных, где каждый узел имеет собственную роль и поведение.