Advertisement
Guest User

Untitled

a guest
Apr 1st, 2020
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. # В данных о заказах и расходах выделим из дат столбцы с информацией о месяце.
  2. orders['order_month'] = orders['buy_ts'].astype('datetime64[M]')
  3. costs['month'] = costs['dt'].astype('datetime64[M]')
  4.  
  5. # Выделим в данных о заказах помесячные когорты покупателей
  6. # Выделим месяц первой покупки каждого покупателя
  7. first_orders = orders.groupby('uid').agg({'order_month': 'min'}).reset_index()
  8. first_orders.columns = ['uid', 'first_order_month']
  9.  
  10. # добавим в данные месяц первой покупки в первоначальную таблицу с заказами
  11. orders_new = pd.merge(orders,first_orders, on='uid')
  12. # Посчитаем количество новых покупателей каждый месяц
  13. cohort_sizes = first_orders.groupby('first_order_month').agg({'uid': 'nunique'}).reset_index()
  14. cohort_sizes.columns = ['first_order_month', 'buyers_nmb']
  15. # посчитаем выручку по когортам
  16. cohorts = orders_new.groupby(['first_order_month','order_month']).agg({'revenue': 'sum'}).reset_index()
  17. # добавим в таблицу с выручкой по когортам данные о размере когорт, т.е. о ежемесячном количестве новых покупателей
  18. report = pd.merge(cohort_sizes, cohorts, on='first_order_month')
  19. margin_rate = 0.5
  20. report['gross_profit'] = report['revenue'] * margin_rate
  21.  
  22. # добавим данные о сроке жизни когорты на каждый месяц заказа
  23. report['age'] = (report['order_month'] - report['first_order_month']) / np.timedelta64(1, 'M')
  24. report['age'] = report['age'].round().astype('int')
  25. # оставим в столбце с когортами только год и месяц
  26. report['first_order_month'] =report['first_order_month'].dt.strftime('%Y.%m')
  27. report['ltv'] = report['gross_profit'] / report['buyers_nmb']
  28.  
  29. output = report.pivot_table(index='first_order_month', columns='age', values='ltv', aggfunc='mean')
  30.  
  31. plt.figure(figsize=(13, 9))
  32.  
  33. plt.title('LTV когорт по месяцам')
  34. ax = sns.heatmap(output, annot=True, fmt='.2f', linewidths=1, linecolor='gray')
  35. ax.set_ylabel('Месяц когорты')
  36. ax.set_xlabel('Месяц жизни когорты')
  37. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement