DAU по московскому времени из UTC
Вопрос
Как посчитать DAU и WAU по московскому времени, если события лежат в UTC? Какие ловушки?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
`to_datetime(..., utc=True)` и `tz_convert("Europe/Moscow")` до взятия даты
День: `dt.normalize()` или `dt.date` после конвертации
`nunique` пользователей, а не число событий
`resample` или полная сетка дат, чтобы пустые дни были видны
WAU не равен сумме DAU, считать уникальных за неделю
Неделя с понедельника: `to_period("W")`
Что могут спросить следом
- Почему WAU не сумма DAU?
- Как посчитать скользящий WAU за 7 дней на каждый день?
- Что делать с пользователями в разных поясах?
Разбор
Сначала привожу время к aware UTC: pd.to_datetime(df["ts"], utc=True), затем tz_convert("Europe/Moscow"). Только после этого беру день через dt.normalize(): иначе события с полуночи до трёх ночи по Москве уедут в предыдущие сутки. DAU это nunique пользователей по дню, не число событий. Чтобы дни без активности не пропали с графика, делаю resample("D") или reindex на полный календарь. WAU считаю отдельно как уникальных за неделю через to_period("W"), понедельник это начало: сумма DAU пересчитает одного человека до семи раз. Если пользователи живут в разных поясах, оговариваю, по чьему времени считаем день: обычно берут единый пояс компании.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.