📈 Генерация реалистичных временных рядов для Superset
При подготовке демо-дашбордов часто возникает соблазн сгенерировать данные простым random().
Проблема в том, что такие ряды моментально выглядят неестественно: нет сезонности, нет тренда, нет провалов и всплесков, нет пропусков.
Если данные выглядят «синтетически», то и визуализации в BI-системе перестают быть убедительными.
Что делает временной ряд похожим на реальные данные
В базовом, но уже практичном варианте стоит учитывать:
• тренд — метрики редко стоят на месте
• сезонность — суточную и недельную
• шум, зависящий от уровня значений
• события — всплески (акции, релизы) и провалы (инциденты)
• пропуски и дубликаты — неизбежная реальность ETL
Такой ряд уже можно использовать:
• для time-series графиков,
• для поиска аномалий,
• для демонстрации gap’ов,
• для обучения работе с агрегациями и фильтрами.
trend = day_index * trend_per_day
daily = np.sin(2 * np.pi * hour / 24)
weekly = np.sin(2 * np.pi * dow / 7)
metric = base_level + trend + daily + weekly + noise
Именно комбинация детерминированных эффектов + управляемой случайности даёт правдоподобный результат.
Полный код генерации
Полный пример с:
• трендом
• суточной и недельной сезонностью
• аномалиями
• пропусками и дубликатами
• готовым CSV под загрузку в Superset
👉 GitHub Gist:
https://gist.github.com/golubnichiy/1a721fae5c9347d61a018fdfb0b6bc84