Поле impute в кодировании

В Vega-Lite поле impute в кодировании используется для восстановления пропущенных значений в данных непосредственно на этапе визуального описания. Это механизм заполнения разрывов в последовательностях, который позволяет поддерживать непрерывность визуальных представлений без предварительной очистки датасета.

Пропущенные значения (null, undefined или отсутствующие записи) нарушают целостность визуальных преобразований, особенно в случаях временных рядов, упорядоченных измерений или категориальных последовательностей с ожидаемой непрерывностью. Поле impute в Vega-Lite задаёт стратегию восстановления таких значений прямо в декларации кодирования канала.

Основная идея заключается в том, что визуализация может самостоятельно интерпретировать «дыры» в данных и подставлять вычисленные или контекстные значения, не изменяя исходный массив данных.

Позиция impute в структуре encoding

Поле impute используется внутри определения канала кодирования:

{
  "mark": "line",
  "encoding": {
    "x": { "field": "t", "type": "quantitative" },
    "y": {
      "field": "value",
      "type": "quantitative",
      "impute": {
        "method": "value",
        "value": 0
      }
    }
  }
}

Здесь impute применяется к каналу y, что означает восстановление отсутствующих значений именно в этом измерении.

Основные параметры impute

method

Параметр method определяет стратегию заполнения пропусков:

  • “value” — фиксированное значение
  • “mean” — среднее по группе
  • “median” — медианное значение
  • “max” / “min” — крайние значения
  • “previous” — предыдущее доступное значение
  • “next” — следующее доступное значение

Каждый метод применяется в зависимости от структуры данных и ожидаемой логики восстановления.

value

Используется при method: "value". Определяет конкретное значение, подставляемое вместо пропуска.

"impute": {
  "method": "value",
  "value": 0
}

groupby

Параметр groupby задаёт поля, по которым производится разбиение данных перед импутацией. Это критично для многосерийных графиков.

"impute": {
  "method": "mean",
  "groupby": ["category"]
}

В этом случае заполнение пропусков выполняется отдельно для каждой категории.

frame / order (контекст вычисления)

Хотя напрямую не всегда задаётся внутри impute, логика восстановления часто зависит от упорядочивания данных через канал x или order. Особенно это важно для методов previous и next, где значение определяется соседними точками.

Механизм работы impute

Процесс импутации в Vega-Lite можно разложить на несколько этапов:

  1. Определение набора данных и каналов кодирования
  2. Выявление отсутствующих значений в выбранном поле
  3. Группировка данных (если указан groupby)
  4. Вычисление значения согласно выбранному методу
  5. Подстановка результата в визуальный поток данных

Важно, что импутация происходит на уровне трансформации данных внутри движка визуализации, а не на уровне исходного JSON.

Пример: временной ряд с пропусками

{
  "data": {
    "values": [
      {"t": 1, "v": 10},
      {"t": 2},
      {"t": 3, "v": 30}
    ]
  },
  "mark": "line",
  "encoding": {
    "x": {"field": "t", "type": "quantitative"},
    "y": {
      "field": "v",
      "type": "quantitative",
      "impute": {
        "method": "mean"
      }
    }
  }
}

В этом случае отсутствующее значение при t = 2 будет вычислено как среднее между доступными значениями.

Поведение с различными типами шкал

Количественные данные

Наиболее предсказуемое поведение наблюдается при quantitative типе. Здесь методы mean, median, min, max имеют математическую интерпретацию и дают стабильный результат.

Категориальные данные

При nominal или ordinal типах использование impute ограничено. Чаще применяются методы value, previous, next, так как статистические агрегаты не имеют смысла.

Связь с transform impute

Помимо использования в encoding, Vega-Lite поддерживает отдельный трансформационный блок impute:

{
  "transform": [
    {
      "impute": "v",
      "key": "t",
      "value": 0
    }
  ]
}

Различие заключается в уровне применения:

  • encoding impute — локальная логика канала визуализации
  • transform impute — предобработка данных в потоке трансформаций

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

Влияние groupby на многосерийные графики

При визуализации нескольких линий или групп данных groupby предотвращает смешивание значений между сериями.

Пример:

"impute": {
  "method": "linear",
  "groupby": ["series"]
}

Каждая серия интерпретируется независимо, и пропуски восстанавливаются внутри локального контекста.

Ограничения и особенности поведения

Невозможность восстановления краевых значений

Методы previous и next не могут восстановить значения на границах последовательности, если соседние точки отсутствуют.

Зависимость от сортировки

Корректность методов, основанных на соседних значениях, зависит от правильного упорядочивания данных. Без стабильного порядка результат становится неопределённым.

Потенциальные искажения статистики

Использование mean или median может сглаживать данные и скрывать локальные аномалии, что влияет на интерпретацию визуализации.

Типовые сценарии применения

Временные ряды

Заполнение пропусков в датах наблюдений для сохранения непрерывности линии графика.

Сенсорные данные

Восстановление пропущенных измерений при нерегулярной передаче данных.

Категориальные отчёты

Поддержание полного набора категорий на оси, даже если часть значений отсутствует.

Взаимодействие с масштабированием (scale)

Импутированные значения участвуют в расчёте шкал так же, как и исходные данные. Это влияет на:

  • диапазон осей
  • положение экстремумов
  • интерполяцию линий

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

Отличие от интерполяции линий

Импутация не равна визуальной интерполяции:

  • impute — добавляет или вычисляет недостающие данные
  • interpolation (в mark line) — управляет способом соединения существующих точек

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