**Контекст.** У вас есть сырой лог кликов/запросов веб-сервера. Аналитике нужны продуктовые метрики по сессиям: сколько сессий у пользователя, средняя длительность и число событий в сессии. Классическое правило: новая сессия начинается, если между двумя соседними событиями пользователя прошло **больше 30 минут**.
**Что дано.** DataFrame `events`:
| колонка | тип | описание |
|---|---|---|
| `user_id` | str | id пользователя |
| `ts` | datetime | время события |
| `url` | str | запрошенный путь |
События могут быть не отсортированы. У одного пользователя тысячи событий.
**Задание.**
1. Присвойте каждому событию идентификатор сессии `session_id`, уникальный в пределах пользователя: новая сессия при разрыве `> 30 минут` между соседними событиями одного пользователя.
2. Постройте сводку по сессиям `sessions` с колонками: `user_id`, `session_id`, `started_at`, `ended_at`, `n_events`, `duration_min` (минуты между первым и последним событием сессии).
3. Верните также агрегат по пользователю `per_user`: число сессий и средняя длительность сессии в минутах.
4. Формат ответа: две таблицы — `sessions` и `per_user`.
**Пример входа:**
[см. код в задании]
Структура для ориентира — реальные значения из эталонного решения.
events = pd.DataFrame({
'user_id': ['a','a','a','a','b','b'],
'ts': pd.to_datetime([
'2024-06-01 10:00','2024-06-01 10:10','2024-06-01 10:55',
'2024-06-01 11:00',
'2024-06-01 09:00','2024-06-01 09:20',
]),
'url': ['/a','/b','/c','/d','/x','/y'],
})
pandas сессионизация cumsum diff логи
Это задание для уровня medium. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.
Подобные задания в категории «Python» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: pandas, сессионизация, cumsum, diff, логи.
На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть 530+ Python задачи с проверкой через Pyodide, конспекты Python и pandas, AI мок-собеседование с разбором ваших ответов.
← Все задания