Ответ вслух Middle Даты и время спрашивают часто обновлено

DAU по московскому времени из UTC

Вопрос

Как посчитать DAU и WAU по московскому времени, если события лежат в UTC? Какие ловушки?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Сначала привожу время к aware UTC: pd.todatetime(df["ts"], utc=True), затем tzconvert("Europe/Moscow"). Только после этого беру день через dt.normalize(): иначе события с полуночи до трёх ночи по Москве уедут в предыдущие сутки.

Что должно прозвучать в ответе

  • `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 ошибок.

Термины по теме