Начальное значение и тип

В системах декларативной визуализации Vega-Lite и Vega ключевую роль играет понятие типа данных. Тип определяет семантику поля, правила агрегации, допустимые преобразования и поведение шкал (scales), а также влияет на автоматический выбор визуальных кодировок.

В Vega-Lite тип задаётся явно через свойство type в описании поля encoding. В Vega тип данных чаще выводится через преобразования (transform) и сигналы, однако логика интерпретации остаётся схожей.

Основные типы данных:

  • quantitative — числовые непрерывные значения
  • nominal — категориальные данные без порядка
  • ordinal — упорядоченные категории
  • temporal — даты и время
  • geojson — географические объекты (в расширенных сценариях)

Каждый тип определяет поведение шкал:

  • quantitative → линейные, логарифмические шкалы
  • nominal → дискретные шкалы цветов или позиций
  • ordinal → порядковые шкалы с сохранением последовательности
  • temporal → временные шкалы с календарной логикой
  • geojson → геопространственные проекции

Пример декларации в Vega-Lite:

{
  "data": {"url": "data.csv"},
  "mark": "bar",
  "encoding": {
    "x": {"field": "category", "type": "nominal"},
    "y": {"field": "value", "type": "quantitative"}
  }
}

Здесь category интерпретируется как дискретный набор значений, а value — как числовая ось.


Инференция типа данных

Если тип не указан явно, Vega-Lite пытается вывести его автоматически на основе структуры данных:

  • числовые значения → quantitative
  • строки → nominal
  • ISO-строки дат → temporal (при распознавании формата)

Однако автоматическое определение не всегда корректно. Например, числовые идентификаторы могут быть ошибочно интерпретированы как количественные значения, хотя семантически являются номинальными.


Начальное значение в сигналах Vega

В Vega ключевым механизмом управления интерактивностью являются сигналы (signals). Сигнал — это реактивная переменная, которая может управлять параметрами визуализации.

Каждый сигнал имеет начальное значение (initial value), определяющее состояние до взаимодействий пользователя или поступления событий.

Пример сигнала:

{
  "signals": [
    {
      "name": "threshold",
      "value": 10
    }
  ]
}

Здесь value задаёт начальное значение сигнала threshold.

Если значение не задано, сигнал может:

  • получить значение по умолчанию из выражения
  • быть вычислен на основе данных
  • остаться неопределённым до первого события

Тип сигнала и его роль

Тип сигнала в Vega не задаётся явно, но фактически определяется контекстом выражения:

  • числовой сигнал → используется в арифметике, шкалах, фильтрах
  • строковый сигнал → управление форматами, подписями
  • булевый сигнал → переключение состояний
  • массив → выборы, множественные селекции
  • объект → сложные состояния взаимодействия

Пример числового сигнала:

{
  "signals": [
    {
      "name": "opacity",
      "value": 0.5
    }
  ]
}

Пример булевого сигнала:

{
  "signals": [
    {
      "name": "showLabels",
      "value": true
    }
  ]
}

Начальные значения в интерактивных параметрах Vega-Lite

В Vega-Lite интерактивность реализуется через selections и parameters. В них также присутствует понятие начального состояния.

Selection с начальными значениями

{
  "selection": {
    "brush": {
      "type": "interval",
      "init": {
        "x": [100, 200]
      }
    }
  }
}

Здесь init задаёт начальное состояние выделения, определяя стартовый диапазон.

Parameter с initial value

{
  "params": [
    {
      "name": "alpha",
      "value": 0.7
    }
  ]
}

Свойство value выступает как начальное значение параметра.


Типизация параметров в Vega-Lite

Параметры в Vega-Lite не требуют явного указания типа, но их поведение определяется контекстом использования:

  • в шкалах → числовой тип
  • в фильтрах → булевый или строковый
  • в вычислениях → числовой или временной
  • в взаимодействии → часто структурный (объект или массив)

Пример использования параметра:

{
  "params": [
    {
      "name": "minValue",
      "value": 20
    }
  ],
  "transform": [
    {
      "filter": "datum.value > minValue"
    }
  ]
}

Здесь начальное значение minValue влияет на фильтрацию данных с момента загрузки визуализации.


Неявные начальные значения и поведение по умолчанию

В обеих системах существуют неявные начальные состояния:

  • шкалы без домена используют диапазон данных
  • оси без конфигурации автоматически масштабируются
  • сигналы без value могут стартовать как undefined
  • selections без init начинаются в пустом состоянии

Это поведение критично для декларативной природы системы: визуализация должна строиться даже при минимальном описании.


Влияние типа на начальные значения

Тип данных напрямую влияет на допустимость и интерпретацию начального значения:

Quantitative

  • начальное значение должно быть числом
  • используется для масштабирования и фильтров
  • некорректные типы приводят к NaN или игнорированию

Nominal

  • начальное значение — строка или категория
  • влияет на выбор цвета, фильтров и группировок

Temporal

  • ISO-строка или timestamp
  • преобразуется в Date объект
  • используется в временных шкалах

Ordinal

  • строка или число с порядком
  • важно соответствие последовательности данных

Пример комплексного взаимодействия типов и начальных значений

{
  "data": {"url": "sales.csv"},
  "params": [
    {
      "name": "year",
      "value": 2023
    }
  ],
  "mark": "line",
  "encoding": {
    "x": {"field": "date", "type": "temporal"},
    "y": {"field": "revenue", "type": "quantitative"}
  },
  "transform": [
    {"filter": "year(datum.date) == year"}
  ]
}

Здесь:

  • temporal тип определяет работу с датой
  • quantitative задаёт числовую ось
  • year имеет начальное значение 2023
  • фильтрация выполняется сразу при инициализации

Роль начального значения в реактивной модели

В Vega реактивность построена на пересчёте зависимостей:

  • начальные значения формируют стартовый граф вычислений
  • любые изменения сигналов инициируют перерасчёт
  • отсутствие начального значения может блокировать цепочку вычислений

Таким образом, начальное значение выступает не просто параметром, а частью вычислительной модели визуализации.


Связь между типами и системой масштабирования

Тип данных определяет не только визуальное отображение, но и поведение шкал:

  • quantitative → continuous scales
  • nominal → band/piecewise scales
  • ordinal → ordered band scales
  • temporal → time scales

Начальное значение параметров может влиять на:

  • начальный zoom
  • стартовый диапазон фильтра
  • начальное положение интерактивных элементов

Семантическая строгость типов

Тип в Vega-Lite выполняет функцию контрактного описания:

  • гарантирует согласованность данных и визуализации
  • предотвращает некорректные преобразования
  • задаёт основу для автоматических решений системы

Начальное значение, в свою очередь, фиксирует стартовое состояние этого контракта, определяя поведение визуализации до любых внешних воздействий.