Python 统计会员N日(内)留存率

一、导入库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
import openpyxl
import datetime as dt

二、导入数据

df=pd.read_excel(os.getcwd() + os.path.sep + "data.xlsx")

三、实现

df.sort_values('memberid').head(5)
def retention(data,n,dur=False):
    result = {}
    dates = sorted(set(data['购买日期']))
    new_member = data[['memberid','购买日期']].groupby('memberid').min()
    for date in dates:
        date_pay_p = set(new_member[new_member['购买日期']==date].index)   # 当日首次下单用户
        daten = date + dt.timedelta(days=n)
        if dur == True:
            daten_pay_p = set(df[(df['购买日期'] > date) & (df['购买日期']<=daten)]['memberid']) # 首次下单后n日内(含第n日)再次下单用户
        else:
            daten_pay_p = set(df[df['购买日期']==daten]['memberid']) # 首次下单第n日再次下单用户
        day_count = len(date_pay_p)
        nday_count = len(daten_pay_p)
        retention_count = len(date_pay_p.intersection(daten_pay_p))
        if len(date_pay_p) == 0:
            retention_rate = np.nan
        else:
            retention_rate = retention_count/day_count
        result[date] = [day_count,nday_count,retention_count,retention_rate]
    result = pd.DataFrame.from_dict(result).T
    result.columns=['day_count','nday_count','retention_count','retention_rate']
    return(result)

四、结果呈现

retention_table = retention(df,3)
retention_table['Month'] = pd.to_datetime(retention_table.index).month
retention_table.groupby(retention_table['Month'])['retention_rate'].mean().plot()

五、数据及源码

阿里云盘:https://www.aliyundrive.com/s/R1y61iU6zdT

CSDN资源Python统计会员N日(内)留存率【数据及源码】-电子商务文档类资源-CSDN下载

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值