В спецификациях Vega-Lite временные данные рассматриваются как
полноценные количественные признаки с возможностью дискретизации по
календарным и временным единицам. Параметр timeUnit
используется для преобразования временного поля в категориальные или
агрегированные представления без предварительной ручной обработки
данных.
Ключевая идея заключается в том, что исходное значение даты/времени не теряется, но проецируется в новую шкалу: год, месяц, день недели, час и другие компоненты календаря. Это позволяет строить визуализации, ориентированные на сезонность, цикличность и временные паттерны.
timeUnit выполняет преобразование временного значения в
дискретный «бакет» (bucket), основанный на календарной системе. В
отличие от числового биннинга (bin), здесь используются не
равномерные интервалы, а логически определённые единицы времени.
Пример базового использования:
{
"data": {"url": "data.csv"},
"mark": "bar",
"encoding": {
"x": {
"field": "date",
"type": "temporal",
"timeUnit": "month"
},
"y": {
"aggregate": "count"
}
}
}
В этом случае все даты группируются по месяцам независимо от года.
Vega-Lite поддерживает широкий набор календарных трансформаций. Они делятся на несколько групп:
yearquartermonthИспользуются для анализа долгосрочных тенденций и сезонности.
weekdaydate (день месяца без учёта месяца)Позволяют исследовать краткосрочные колебания и поведенческие паттерны.
hoursminutessecondsmillisecondsИспользуются для высокочастотных данных (логи, события, телеметрия).
Vega-Lite поддерживает составные временные единицы:
yearmonthyearmonthdateyearmonthdatehoursyearquarteryearquartermonthЭти комбинации создают более детализированные группы без необходимости вручную объединять поля.
При применении timeUnit происходит вычисление нового
значения поля, которое заменяет исходное в контексте визуализации. Важно
понимать, что:
Пример:
"timeUnit": "yearmonth"
Дата 2024-11-18T14:32:00Z преобразуется в ключ:
2024-11
Это значение становится категориальной осью или ключом агрегации.
Хотя timeUnit и bin решают схожую задачу
дискретизации, их внутренняя логика различается принципиально:
bin работает с числовыми диапазонами фиксированной
ширины;timeUnit работает с календарными правилами.Например:
Это различие критично при анализе сезонных данных, где календарная структура важнее математической равномерности.
timeUnit часто применяется совместно с агрегатами:
{
"encoding": {
"x": {
"field": "timestamp",
"type": "temporal",
"timeUnit": "day"
},
"y": {
"aggregate": "mean",
"field": "value"
}
},
"mark": "line"
}
Здесь происходит двухуровневая трансформация:
Такой подход позволяет строить временные ряды без предварительной подготовки данных.
Временные преобразования в Vega-Lite зависят от интерпретации временных зон. Внутри системы используется стандартизированное представление времени, но визуализация может быть чувствительна к:
При использовании timeUnit важно учитывать, что границы
суток, недель и месяцев вычисляются относительно интерпретируемого
времени. Это может приводить к смещению групп при переходе между
часовыми поясами.
Результаты применения timeUnit сохраняют естественный
календарный порядок. Например:
Это достигается за счёт того, что Vega-Lite использует внутренние числовые представления временных единиц, а не строковые метки.
Однако при использовании составных единиц (например,
yearmonth) сортировка становится иерархической:
Комбинированные timeUnit позволяют строить многомерные
временные структуры. Например:
"timeUnit": "yearmonthdate"
создаёт три уровня детализации:
Это может использоваться для:
Использование month или quarter позволяет
выявить регулярные колебания в данных:
hours часто применяется для:
day и week используются для выявления
недельных циклов:
При использовании timeUnit Vega-Lite автоматически
выбирает временную шкалу (scale type: time), но после
преобразования в дискретные значения поведение оси меняется:
Например, yearmonth создаёт ось, где каждая метка
соответствует первому дню месяца.
Результирующие значения timeUnit могут отображаться
по-разному в зависимости от контекста:
month → сокращённые названия месяцев;yearmonth → 2024-01,
2024-02;day → локализованные названия дней недели или
числа.Форматирование может зависеть от:
При работе с timeUnit важно учитывать ряд
ограничений:
Потеря точности
day обнуляет часы, минуты и секунды.Необратимость на уровне визуализации
Неравномерность календаря
Сложности с комбинированными единицами
yearquartermonth может создавать неожиданные группы при
агрегации небольших наборов данных.Альтернативой timeUnit является ручная трансформация
данных до подачи в Vega-Lite. Однако использование встроенного механизма
даёт преимущества:
Ручная агрегация может быть оправдана только при сложных бизнес-правилах, не укладывающихся в календарную модель.
timeUnit применяется после фильтрации, но до визуального
отображения. Это означает:
При комбинировании с transform (например,
filter, calculate) порядок операций становится
критически важным для корректного результата.
timeUnit можно рассматривать как функцию проекции:
f(date) → calendar_bucket
где функция f извлекает определённый компонент календаря
или их комбинацию.
В зависимости от выбранной единицы изменяется «разрешение» временной оси: