Всем привет! На связи Александр Грудинин, ментор курса «Аналитик данных» 👋🏻
Сегодня поговорим про тему, которая кажется простой, но на практике входит в топ источников багов в аналитике — работа с датами и временем.
Самое неприятное, что ошибки с датами сложно заметить. Метрика считается, график строится, всё выглядит правдоподобно... но цифры неверные.
Примеры буду показывать на PostgreSQL, но логика применима и к другим БД.
📌 DATE vs TIMESTAMP
DATE — просто календарная дата: 2025-03-15TIMESTAMP — дата + время: 2025-03-15 14:30:00Почему важно различать? Вот классический баг:
WHERE created_at = '2025-03-15'
Заказ в
'2025-03-15 10:30:00' сюда НЕ попадет!— Рабочий вариант #1 — приведение к дате:
WHERE created_at::date = '2025-03-15'
— Рабочий вариант #2 (есть мнение, что так лучше, но я сам использую предыдущий):
WHERE created_at >= '2025-03-15' AND created_at < '2025-03-16'
📌 Часовые пояса — главная боль
Пользователь из Москвы сделал заказ в 1:30 ночи 15 марта. На сервере в UTC это записалось как 14 марта 22:30. Один заказ, два дня. Умножьте на тысячи заказов 🙃
Конвертируем UTC в московское время:
SELECT
(created_at AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Moscow')::date AS order_date,
COUNT(1) AS orders_count
FROM orders GROUP BY 1
В pandas то же самое:
# Указываем что данные в UTC
df['created_at'] = pd.to_datetime(df['created_at']).dt.tz_localize('UTC')
# Конвертируем в Москву
df['created_at_msk'] = df['created_at'].dt.tz_convert('Europe/Moscow')`
Важно:
—
tz_localize = «эти данные уже в таком поясе, запомни»—
tz_convert = «пересчитай из одного пояса в другой»Перепутаете — и получите сдвиг на несколько часов во всех данных 🙂
📌 Ещё одни грабли — формат дат
Дата
03/04/2025 — это 3 апреля или 4 марта? Pandas может угадать неправильно. Всегда указывайте формат явно:df['date'] = pd.to_datetime(df['date'], format='%d/%m/%Y')
Чек-лист для проверки:
✅ Проверяйте тип данных — DATE или TIMESTAMP?
✅ Выясняйте, в каком часовом поясе хранятся данные в источнике данных
✅ Договоритесь с командой о едином часовом поясе для отчётов
✅ Явно указывайте формат при парсинге дат
Ставьте 🔥 и сохраняйте шпаргалку к себе!
📈 Симулейтив | 📱 ВК | 📱 YouTube | 📱 Канал о DS