- # уберем событие Tutorial из данных для расчета воронки событий
- data_new = data_new.query('event_name != "Tutorial"')
- # сгруппируем данные по названию событий и посчитаем сколько пользователей совершали каждое из этих событий
- # отсортируем события по числу пользователей
- events_per_user = data_new.groupby('event_name').agg(
- {'user_id': 'nunique'}
- ).sort_values(
- by='user_id', ascending=False
- ).rename(columns={'user_id': 'users_cnt'})
- # добавим колонку users_share с долей пользователей, которые хоть раз совершали событие
- events_per_user['users_share'] = events_per_user['users_cnt'] / data_new['user_id'].nunique()
- # добавим колонку shift, чтобы посчитать отношение числа пользователей события к числу в предыдущем событии
- events_per_user['shift'] = events_per_user['users_cnt'].shift(periods=1, axis=0, fill_value=events_per_user['users_cnt'][0])
- # добавим колонку next_step_conversion, чтобы посчитать долю пользователей, которые доходят до следующего шага воронки
- events_per_user['next_step_conversion'] = (events_per_user['users_cnt'] * 100 / events_per_user['shift']).round(2)
- # удалим колонке shift, она больше не пригодится
- events_per_user.drop('shift', axis='columns', inplace=True)
- # посмотрим на результат
- events_per_user.style.format({'users_share':'{:.0%}'})