На прошлой неделе мы разбирали задачку на SQL и считали LTV для недельной когорты новых игроков. Сегодня те же вводные данные, но другая задача.
В этой задаче нужно написать код на Python, который построит таблицу когортного анализа удержания новичков. Примерный вид итоговой таблицы: в колонке Week_start неделя первого входа игрока в игру — когорта; следующие 30 колонок — дни после первого входа.
Что проверяет такая задача?
🔵 базовое знание Python
🔵 понимание сути когортного анализа
Как можно решить?
1️⃣ Берем датафрейм, соответствующий таблице, в которой есть логирование всех входов игрока в игру.
2️⃣ Получаем дату первого захода пользователя и определяем неделю первого входа в качестве когорты.
3️⃣ Считаем количество дней между первым входом и остальными заходами пользователя.
4️⃣ Формируем таблицу в соответствии с датафреймом, где 0 день соответствует размеру когорты.
5️⃣ Корректируем названия столбцов и заполняем нулями пустые значения, где Day <= (current_date - первый день недели).dt.days.
Наш вариант решения:
users_first_login = df.groupby('user_id').agg(
first_login = ('created', 'min')
).reset_index()
users_first_login['week_start'] = users_first_login['first_login'].dt.to_period('W').apply(
lambda r: r.start_time)
df_final = pd.merge(users_first_login, df, how='inner', on='user_id')
df_final['day'] = (df_final['created'] - df_final['first_login']).dt.days
df_final_pivot = pd.pivot_table(df_final, values='user_id', index='week_start',
columns='day', aggfunc='count')
df_final_pivot = df_final_pivot.astype('Int32')
df_final_pivot.columns = list(map(lambda x: 'Day_' + str(x), df_final_pivot.columns))
Задавайте вопросы и предлагайте ваши способы решения в комментариях!
#разбор_тестового

