Библиотека Kepler.gl строится вокруг идеи интерактивного анализа пространственно-временных данных, где время рассматривается не как дополнительный атрибут, а как полноценная ось измерения. Временные агрегации в этом контексте представляют собой механизм преобразования «сырых» событий с временной меткой в структурированные представления: интервалы, окна, бины и анимированные последовательности, позволяющие выявлять динамику процессов.
Основой временного анализа в Kepler.gl является наличие временного поля в датасете. Чаще всего это:
При загрузке данных библиотека выполняет автоматическое определение потенциальных временных колонок. Это становится фундаментом для дальнейших операций агрегации и фильтрации.
Ключевой момент: время в Kepler.gl не является просто фильтром, оно участвует в построении вычисляемых представлений слоёв (layers).
На уровне интерфейса и состояния приложения временная агрегация начинается с временного фильтра (Time Filter). Он задаёт:
Фактически временной фильтр выполняет функцию скользящего окна, внутри которого происходит пересчёт всех визуализаций.
Для набора событий E и временного окна W(t, Δ):
Фильтрация:
E_filtered = { e ∈ E | time(e) ∈ [t, t + Δ] }
Это базовая операция, на которой строятся все последующие агрегаты.
Следующий уровень временной агрегации — разбиение непрерывной шкалы времени на интервалы.
Поддерживаются типовые стратегии:
После разбиения каждый объект попадает в определённый временной слот:
bin_id = floor((time(e) - t0) / Δt)
Где:
В слоях типа Point Layer и Screen Grid Layer временная агрегация реализуется через пересчёт геометрии в каждом временном шаге.
Временная агрегация здесь проявляется как:
При анимации происходит последовательная перестройка множества точек:
P(t) = { p ∈ P | t_start ≤ time(p) ≤ t }
Для экранной сетки временная агрегация приобретает форму пространственно-временного накопления:
Формально:
cell_value(t) = Σ weight(p), p ∈ cell ∧ time(p) ∈ W(t)
Это создаёт эффект «тепловой динамики» без явного построения heatmap.
В слоях Hexagon Layer и H3 Hexagon Layer добавляется дополнительное измерение — пространственная индексация через гексагональную сетку.
Каждый временной шаг приводит к построению:
Комбинированная модель:
H(h, t) = Σ f(p), p ∈ h ∧ time(p) ∈ W(t)
Где:
Таким образом формируется трёхмерная агрегация: широта, долгота, время.
Анимация в Kepler.gl не является визуальным эффектом поверх данных — это последовательная пересборка агрегированных состояний.
Каждый кадр анимации соответствует:
Модель можно описать как поток состояний:
State(t) → Aggregate(State(t)) → Render
Для сглаживания переходов используется интерполяция:
Пример линейной интерполяции:
v(t) = v1 + (v2 - v1) * α
где α — нормализованный коэффициент времени между двумя бинами.
Отдельный класс представляют накопительные (cumulative) агрегации.
Вместо пересчёта «с нуля» для каждого шага используется наращивание состояния:
C(t) = C(t-1) + Δ(t)
Где Δ(t) — новые события в текущем временном интервале.
Такая модель используется для:
Для траекторных слоёв временная компонента становится основной.
Точки соединяются в последовательности, где порядок определяется временем:
path = sort(points, time)
Агрегация включает:
В этом случае временная агрегация превращается в непрерывное движение объектов:
position(t) = interpolate(p_i, p_{i+1}, t)
При больших объёмах данных ключевым становится вопрос производительности.
Используются подходы:
Kepler.gl построен поверх deck.gl, где временные агрегации реализуются как изменение props слоёв.
Каждый слой получает:
и пересчитывается в GPU-пайплайне, что позволяет обрабатывать миллионы точек в реальном времени.
При одновременном использовании нескольких слоёв формируется составная модель времени:
В результате создаётся многомасштабное представление временной динамики, где каждый слой отражает свой уровень детализации.
Перед агрегацией часто выполняется нормализация временных значений:
Это обеспечивает корректную работу всех агрегирующих функций и предотвращает смещение временных интервалов.
Гранулярность определяет качество агрегации:
Изменение гранулярности фактически меняет характер агрегированного представления без изменения исходных данных.
В сложных сценариях временные агрегации комбинируются:
Такая композиция позволяет строить модели потоков данных, где время выступает основным измерением трансформации информации.