- import pandas as pd
- from datetime import datetime, timedelta
- from matplotlib import pyplot as plt
- # Загрузка данных
- users = pd.read_csv('ch02_problems01_users.csv') # профили
- visits = pd.read_csv('ch02_problems01_visits.csv') # сессии
- # Преобразование данных о времени
- users['dt'] = pd.to_datetime(users['dt']).dt.date
- users['first_ts'] = pd.to_datetime(users['first_ts'])
- visits['session_start'] = pd.to_datetime(visits['session_start'])
- # Доступный интервал привлечения пользователей
- min_analysis_date = users['dt'].min()
- observation_date = users['dt'].max()
- # Горизонт анализа
- analysis_horizon = 14
- # Максимально возможная дата привлечения с учётом горизонта
- max_analysis_date = observation_date - timedelta(days=analysis_horizon - 1)
- # Расчет размеров когорт
- report = (
- users.query("dt >= @min_analysis_date and dt <= @max_analysis_date")
- .groupby("dt")
- .agg({"user_id": "nunique"})
- )
- # Построение графика
- report.plot(grid=True)
- plt.title('Динамика привлечения пользователей')
- plt.xlabel('Дата привлечения')
- plt.xticks(rotation=45)
- plt.ylabel('Размер когорты')
- plt.show()
- # Расчет среднего размера когорты
- mean_daily_cohort_size = report["user_id"].mean().astype('int')
- # Вывод среднего размера когорты
- print("Средний размер когорты:", mean_daily_cohort_size)