В Vega и Vega-Lite работа с внешними данными и их интерпретацией
опирается на два тесно связанных, но концептуально разных механизма —
format и formatType. Эти поля определяют, как
исходный источник данных преобразуется в внутреннее представление,
пригодное для последующей визуализации и трансформаций.
Поле format задаёт структуру и правила разбора входного
набора данных. Оно используется внутри блока data, когда
данные загружаются из внешнего источника через url, либо
передаются как встроенный массив.
Базовая форма:
{
"data": {
"url": "data.csv",
"format": {
"type": "csv"
}
}
}
Ключевая задача format — указать:
format.type:
определение типа данныхПоле type внутри format определяет, каким
парсером будет обработан входной поток.
{
"format": {
"type": "csv"
}
}
CSV является наиболее распространённым табличным форматом. Vega использует стандартный CSV-парсер, где:
{
"format": {
"type": "tsv"
}
}
TSV аналогичен CSV, но использует табуляцию как разделитель. Применяется при работе с данными, где запятые могут встречаться внутри значений.
{
"format": {
"type": "json"
}
}
JSON-формат предполагает, что данные уже структурированы как массив объектов или вложенная структура. Vega не требует дополнительного парсинга, кроме чтения файла.
{
"format": {
"type": "dsv",
"delimiter": ";"
}
}
DSV используется, когда разделитель отличается от стандартных
CSV/TSV. Поле delimiter становится обязательным.
{
"format": {
"type": "topojson",
"feature": "countries"
}
}
TopoJSON применяется для геоданных. Поле feature
указывает, какую коллекцию геометрий извлекать из структуры.
format.parse:
контроль типов полейПомимо определения формата, Vega позволяет явно указать, как интерпретировать отдельные поля после загрузки.
{
"format": {
"type": "csv",
"parse": {
"date": "date",
"value": "number"
}
}
}
"number" — преобразование в число"boolean" — логический тип"date" — дата (ISO или кастомные форматы)"string" — явное оставление строкойЕсли parse не задан, Vega пытается автоматически
определить типы, но результат может быть неоднозначным, особенно
для:
format в
Vega и Vega-LiteVega-Lite выступает как декларативный надстройщик и использует более
упрощённую модель данных. Однако при компиляции спецификации она
преобразуется в полноценный Vega-spec, где format
становится частью нижнего уровня.
{
"data": {
"url": "data.csv",
"format": {
"type": "csv"
}
}
}
После компиляции в Vega это остаётся практически без изменений, но дополняется внутренними трансформациями и нормализацией структуры.
formatType:
исторический и расширяемый механизмПоле formatType относится к более низкоуровневому API
Vega (не Vega-Lite напрямую) и используется для определения способа
декодирования данных через регистрируемые парсеры.
{
"data": {
"url": "data.custom",
"format": {
"type": "custom",
"formatType": "myParser"
}
}
}
Здесь:
type задаёт логическую категориюformatType указывает конкретный обработчикformatTypeformatType становится актуальным в следующих
случаях:
Vega поддерживает механизм регистрации:
type и formatTypeЛогика обработки строится по приоритету:
type определяет базовый класс форматаformatType уточняет конкретную реализацию
обработкиparse, property,
feature) применяются поверх результата{
"data": {
"url": "geo.topojson",
"format": {
"type": "topojson",
"feature": "states",
"formatType": "topojson"
}
}
}
Здесь одновременно заданы:
{
"format": {
"type": "csv"
}
}
при фактическом JSON-файле приводит к некорректному парсингу или полной потере данных.
parseДанные могут быть загружены корректно, но интерпретированы неправильно:
formatType без регистрацииЕсли указан formatType, но соответствующий парсер не
зарегистрирован, Vega:
Для JSON-структур сложной вложенности format не
выполняет глубокую нормализацию. В таких случаях требуется:
transform (flatten, calculate,
filter)Хотя format отвечает только за загрузку, он часто
выступает первым этапом цепочки обработки:
format — декодирование источникаtransform — преобразование структурыencoding — отображение в визуальные каналыОшибки на уровне format распространяются на всю
последующую цепочку, так как ломают исходную модель данных.
При загрузке Vega фактически выполняет следующую последовательность:
url)format.typeformatType (если задан)parseКорректная настройка format напрямую влияет на:
Ошибки в format чаще проявляются не на этапе загрузки, а
в виде некорректной визуализации: смещённые оси, пустые графики,
неверные группировки.