Данные

Определения наборов данных и преобразований задают, какие данные загружать и как их обрабатывать.

Основная модель данных Vega — таблица, похожая на электронную таблицу или таблицу базы данных. Набор данных состоит из записей («строк»). Каждая запись может содержать любое число именованных атрибутов — полей, или «столбцов». Записи представлены обычными объектами JavaScript.

Если входные данные — простой массив примитивных значений, Vega помещает каждое значение в свойство data нового объекта. Например, массив [5, 3, 8, 1] загружается так:

[ {"data": 5}, {"data": 3}, {"data": 8}, {"data": 1} ]

При загрузке Vega также присваивает каждому объекту данных уникальный идентификатор, доступный через специальный Symbol. Поэтому к свойству идентификатора нельзя обратиться по строковому ключу и оно не перечисляется при обходе объекта, хотя его значение можно увидеть при изучении данных в консоли JavaScript.

Набор данных можно задать непосредственно в спецификации или указать URL-адрес для его загрузки. Также данные можно связать с визуализацией динамически во время работы: передать их при создании графика или обновлять потоком через API представления. Загрузка по URL подчиняется правилам среды выполнения, например ограничениям на междоменные запросы.

Содержание

Свойства набора данных

Свойства, задающие набор данных. Из полей source, url и values можно указать не более одного.

Свойство Тип Описание
name String Обязательно. Уникальное имя набора данных.
format Формат Объект, задающий правила разбора файла или значений. Подробнее см. справочник по форматам.
source String | String[ ] Имя одного или нескольких наборов данных, используемых как источник. Свойство source удобно сочетать с цепочкой преобразований для получения новых данных. Строка обозначает имя одного набора-источника. Массив перечисляет имена источников, данные которых нужно объединить.
url String URL-адрес, по которому загружается набор данных. Чтобы данные разбирались правильно, используйте свойство format. Если оно не задано, предполагается формат JSON с записями по строкам.
values Any Полный набор данных, включённый непосредственно в спецификацию. Чаще всего это массив объектов, но настройки format допускают и другие типы, например строку CSV.
async Boolean ≥ 5.9 Логический флаг (по умолчанию false), определяющий, выполняется ли динамическая загрузка или повторное форматирование данных асинхронно. При true обработка потока данных завершается, загрузка идёт в фоне, а после её окончания поток вычисляется повторно. При false вычисление приостанавливается до конца загрузки и затем продолжается в том же цикле. Режим async позволяет одновременно загружать несколько динамических наборов, сохраняя интерактивность. Но пока загрузка идёт, наборы могут оставаться пустыми, а это способно повлиять на последующие вычисления.
on Триггер[ ] Массив обновлений, которые при выполнении условий триггера добавляют, удаляют или переключают значения данных либо очищают набор. Подробнее см. справочник по триггерам.
transform Преобразование[ ] Массив преобразований входных данных. Результат цепочки становится значением этого набора. Подробнее см. справочник по преобразованиям.

Динамическая загрузка данных

≥ 4.2 Начиная с Vega 4.2 параметры данных url и format (если данные загружаются по URL) могут содержать ссылки на сигналы. Это позволяет во время работы динамически менять адрес источника или параметры формата и повторно загружать данные. Например, одна спецификация может выбирать набор данных по вводу пользователя или периодически опрашивать источник с помощью потока событий timer.

Если сигналы не используются, внешние данные загружаются сразу при создании представления, а первое вычисление потока данных ждёт окончания загрузки. При динамической загрузке сначала нужно вычислить поток, чтобы получить значения сигналов, и только затем можно загрузить данные. Поэтому последующие преобразования и правила кодирования поначалу могут работать с пустыми наборами: убедитесь, что выражения сигналов правильно обрабатывают отсутствие данных, в том числе пустые домены шкал.

Формат

Объект format описывает формат данных и дополнительные правила разбора.

Имя Тип Описание
type String Тип формата данных: json (по умолчанию), csv (значения, разделённые запятыми), tsv (значения, разделённые табуляцией), dsv (текст с произвольным разделителем) или topojson.
parse String | Object Значение auto включает автоматическое определение типов данных. Чтобы задать типы явно, передайте объект правил разбора: его ключи — имена полей, а значения — нужные типы ("boolean", "date", "number" или "string"). Например, "parse": {"modified_on": "date"} разбирает поле modified_on каждой записи как дату. Можно указать конкретный формат даты, например {"foo": "date:'%m%d%Y'"}, в синтаксисе d3-time-format. Аналогично поддерживается разбор даты в UTC: {"foo": "utc:'%m%d%Y'"}.

json

Загружает файл JavaScript Object Notation (JSON). Предполагается, что данные организованы по строкам, каждая из которых — объект с именованными атрибутами. Это формат по умолчанию, если параметр format не задан. При явном указании format его свойство type должно иметь значение "json". Дополнительно доступны следующие свойства:

Имя Тип Описание
property String Свойство JSON, содержащее нужные данные. Оно полезно, если загруженный файл включает дополнительную структуру или метаданные. Например, "property": "values.features" извлекает json.values.features из загруженного объекта JSON.
copy Boolean Логический флаг (по умолчанию false): нужно ли копировать входные данные JSON перед использованием. Это полезно, если передаются уже разобранные данные JSON, например не загруженные по URL, которые нельзя изменять.

csv

Загружает файл CSV со значениями, разделёнными запятыми.

Имя Тип Описание
header String[ ] Массив имён полей, добавляемый к данным как строка заголовков. Указывайте его только тогда, когда входные данные не содержат собственного заголовка.

tsv

Загружает файл TSV со значениями, разделёнными табуляцией.

Имя Тип Описание
header String[ ] Массив имён полей, добавляемый к данным как строка заголовков. Указывайте его только тогда, когда входные данные не содержат собственного заголовка.

dsv

Загружает текстовый файл с указанным пользователем разделителем.

Имя Тип Описание
delimiter String Обязательно. Разделитель полей записи. Он должен состоять из одного символа (одной 16-битной кодовой единицы). Поэтому символы ASCII подходят, а эмодзи — нет.
header String[ ] Массив имён полей, добавляемый к данным как строка заголовков. Указывайте его только тогда, когда входные данные не содержат собственного заголовка.

topojson

Загружает файл JSON в формате TopoJSON. Входной файл должен содержать корректные данные TopoJSON. Для работы в Vega они преобразуются в GeoJSON. Процесс преобразования можно задать одним из двух взаимоисключающих свойств:

Имя Тип Описание
feature String Имя набора объектов TopoJSON, который нужно преобразовать в коллекцию объектов GeoJSON. Например, на карте мира может быть набор "countries". Свойство feature извлекает его и создаёт объект GeoJSON для каждой страны.
mesh String Имя набора объектов TopoJSON, который нужно преобразовать в сетку. Подобно feature, свойство mesh извлекает именованный набор. Но вместо отдельных объектов GeoJSON геоданные возвращаются как единая сетка. Это удобно для более эффективной отрисовки границ и других географических элементов, которые не требуется связывать с конкретными странами, регионами или округами.
filter String Необязательный фильтр извлечённой сетки. Значение "interior" оставляет только внутренние границы регионов, удаляя внешние. Значение "exterior" оставляет только внешнюю границу. При null или отсутствии свойства (по умолчанию) фильтрации нет. Свойство применяется только при извлечении mesh, но не feature. ≥ 5.4
property String Свойство JSON, содержащее нужные данные. Как и при type=json, этот необязательный параметр полезен, если загруженные данные TopoJSON окружены дополнительной структурой или метаданными.
copy Boolean Логический флаг (по умолчанию false): нужно ли копировать входные данные JSON перед использованием. Как и при type=json, это полезно для уже разобранных данных JSON, например переданных без загрузки по URL, которые нельзя изменять.

Примеры

Пример данных, заданных непосредственно в спецификации:

{"name": "table", "values": [12, 23, 47, 6, 52, 19]}

Данные также можно загрузить из внешнего файла, в данном случае JSON:

{"name": "points", "url": "data/points.json"}

Можно объявить набор данных без значений и передать их динамически при создании визуализации. Подробнее см. документацию API представления.

{"name": "table"}

Наконец, можно взять существующий набор и применить к нему преобразования. В этом примере новый набор "stats" создаётся путём вычисления агрегированных показателей для групп данных из исходного набора "table":

{
  "name": "stats",
  "source": "table",
  "transform": [
    {
      "type": "aggregate",
      "groupby": ["x"],
      "ops": ["average", "sum", "min", "max"],
      "fields": ["y", "y", "y", "y"]
    }
  ]
}