В визуализации данных пропуски в последовательностях наблюдений приводят к разрывам линий, некорректным агрегатам и искажённой интерпретации трендов. В Vega и Vega-Lite задача восстановления недостающих точек решается трансформацией impute, которая формирует отсутствующие комбинации ключей и заполняет значения по заданному правилу.
Трансформация impute работает в два этапа:
Ключевыми параметрами являются:
"value"{
"transform": [
{
"impute": "value",
"field": "value",
"key": "date"
}
]
}
Такое определение создаёт недостающие значения по оси
date и заполняет их указанным методом.
Метод "value" используется для простого восстановления
данных, когда отсутствие значения интерпретируется как ноль или
константа.
{
"data": { "name": "dataset" },
"transform": [
{
"impute": "value",
"field": "sales",
"key": "date",
"value": 0
}
],
"mark": "line",
"encoding": {
"x": { "field": "date", "type": "temporal" },
"y": { "field": "sales", "type": "quantitative" }
}
}
Такой подход используется в ситуациях, где отсутствие наблюдения трактуется как нулевое значение, например, отсутствие продаж в день.
Метод "mean" заменяет пропуски средним значением по
доступным наблюдениям в пределах группы.
{
"transform": [
{
"impute": "value",
"field": "temperature",
"key": "day",
"method": "mean"
}
]
}
Аналогично доступны:
"median" — устойчив к выбросам"min" — минимальное наблюдаемое значение"max" — максимальное наблюдаемое значениеТакие методы особенно полезны при восстановлении временных рядов с шумом.
При работе с несколькими категориями важно разделять независимые ряды, чтобы значения не смешивались между группами.
{
"transform": [
{
"impute": "value",
"field": "value",
"key": "date",
"groupby": ["category"],
"method": "mean"
}
]
}
Здесь каждая категория получает собственный набор заполнения, что предотвращает утечку данных между сериями.
По умолчанию Vega-Lite формирует ключи на основе существующих данных. Однако для корректного заполнения временных рядов требуется явное определение диапазона.
{
"transform": [
{
"impute": "value",
"field": "sales",
"key": "date",
"keyvals": { "signal": "sequence(datum.start, datum.end, 86400000)" },
"method": "value",
"value": 0
}
]
}
keyvals позволяет:
Наиболее частый сценарий — восстановление ежедневных или ежемесячных данных.
{
"data": { "name": "sales_data" },
"transform": [
{
"timeUnit": "yearmonthdate",
"field": "date",
"as": "date"
},
{
"impute": "sales",
"field": "sales",
"key": "date",
"groupby": ["product"],
"method": "value",
"value": 0
}
],
"mark": "line",
"encoding": {
"x": { "field": "date", "type": "temporal" },
"y": { "field": "sales", "type": "quantitative" },
"color": { "field": "product", "type": "nominal" }
}
}
Особенность таких схем заключается в предварительном приведении даты
к дискретной шкале через timeUnit, что обеспечивает
корректное определение пропусков.
Импутация часто применяется до агрегации или после неё, в зависимости от задачи.
Схема до агрегации:
Схема после агрегации:
Если комбинация key + groupby отсутствует в данных,
Vega-Lite создаёт новую запись. Значение поля field
определяется:
valuemean, median,
min, max)null, если параметры не заданыПри использовании статистических методов вычисление происходит по текущей группе данных:
Это делает impute детерминированной трансформацией, не зависящей от порядка входных данных.
При работе с временными рядами важно учитывать:
Типичная ошибка — применение impute без нормализации временной оси. В
таких случаях необходимо предварительное преобразование через
timeUnit, иначе ключи не будут совпадать.
Если визуализация содержит несколько измеряемых полей, impute
применяется только к одному field. Остальные значения:
Impute не выполняет интерполяцию в математическом смысле. Отсутствующие значения:
Для линейной интерполяции требуется комбинация:
imputewindow трансформации с frameДля более сложного восстановления используется следующий паттерн:
{
"transform": [
{
"impute": "value",
"field": "value",
"key": "date",
"groupby": ["series"],
"value": 0
},
{
"window": [
{
"op": "mean",
"field": "value",
"as": "smoothed"
}
],
"frame": [-2, 2]
}
]
}
При значительных объёмах данных эффективность impute зависит от:
groupbyРасширение key domain через keyvals может существенно
увеличить количество генерируемых строк, что влияет на
производительность последующих этапов pipeline.