Pandas留存数据分析

本文介绍如何使用pandas处理用户初次消费时间和登录时间数据,统计用户在未来n天的留存情况,并通过Pyecharts生成热力图展示用户留存趋势。作者展示了合并数据、时间格式转换和生成热力图的Python代码片段。
摘要由CSDN通过智能技术生成

需要先安装pandas,我安装的是2.0+的版本

pip install pandas

1、文件读取,

我这里有两个文件,一个文件时用户第一次消费时间,另外一个文件时用户登录应用的时间

这边需求是,需要统计每天第一次消费的用户在未来n天登录应用的的留存数据,就是每一天对第一次消费的用户进行跟踪30天,并且生成统计图,我使用的代码示例只是一个月的

代码:

import pandas as pd

login_df = pd.read_excel("登陆时间.xlsx")
register_df=pd.read_excel("第一次消费时间.xlsx",usecols=['userId','createTime','packageName'])
# 时间格式化,并且设置时间格式
login_df["OnlineDate"] = pd.to_datetime(login_df["OnlineDate"]).apply(lambda x: x.strftime("%Y-%m-%d"))
register_df["createTime"] = pd.to_datetime(register_df["createTime"]).apply(lambda x: x.strftime("%Y-%m-%d"))
# 将登录表根据登录日期进行去重,防止同一天登录多次
register_df.drop_duplicates(inplace=True)
# 获取第一次消费时间大于5月1号的
register_df = register_df[register_df["createTime"] > "2023-05-01"]
login_df = login_df[login_df["OnlineDate"] > "2023-05-01"]


print(login_df)
print(register_df)

运行截图:OnlineDate是在线日期,createTime:第一次消费时间

2、将两张表合并

# 合并表,根据用户id
merge_df = pd.merge(login_df,register_df,on="userId",how="inner")
merge_df["createTime"] = pd.to_datetime(merge_df["createTime"],format="%Y-%m-%d")
merge_df["OnlineDate"] = pd.to_datetime(merge_df["OnlineDate"],format="%Y-%m-%d")
# 计算是第几天登录
merge_df["OnlineDay"] = (merge_df["OnlineDate"] - merge_df["createTime"]).dt.days
# 将packageName设置为int64
merge_df["packageName"] = merge_df["packageName"].astype("int64")
# 获取天数大于0的,跟踪的数据是第一次消费后,可以有一些用户是以前使用过现在才消费的
merge_df = merge_df[merge_df["OnlineDay"] >= 0]
print(merge_df,merge_df.info())

运行截图:

我这里将数据处理成pyecharts中热力图需要的数据,然后进行显示:

# y轴是createTime,x轴是创建时间后第1,2,3,5,7,15,30天在线,值在在线数
from datetime import date,datetime
import copy
y_data = [date(year=2023,month=5,day=i).strftime("%Y-%m-%d") for i in range(1,31)]
x_data = [0,1,2,3,5,7,15,30]
# 计算每一天新增加的用户在未来每一天在线的人数
value_data = []
for y,d in enumerate(y_data):
    # 获取当前日期在线数据
    online_df = merge_df[merge_df["createTime"] == d]
    # 获取在线创建人数
    # online_num = online_df["userId"].nunique()
    # print(d,online_num,online_df.head(5))
    # 获取在未来几天登录的人数
    for x,days in enumerate(x_data):
        online_every = online_df[online_df["OnlineDay"] == days]
        # print(d,days,online_every.head(5))
        # print("第:"+str(days),online_every.head(5))
        online_num_days = online_every["userId"].nunique()
        value_data.append([x,y,online_num_days])

print(value_data)
print(x_data)
print(y_data)

运行截图,只有部分,数据太多了:

下面是生成热力图的代码,需要安装pyecharts:

pip install pyecharts==2.0.3
# 使用pyecharts绘制热力图
from pyecharts import options as opts
from pyecharts.charts import HeatMap

c = (
    HeatMap(init_opts=opts.InitOpts(width="1400px", height="800px"))
    .add_xaxis(x_data)
    .add_yaxis(
        "留存图",
        y_data,
        value_data,
        label_opts=opts.LabelOpts(is_show=True, position="inside"),
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="HeatMap-Label 显示"),
        visualmap_opts=opts.VisualMapOpts(),
    )
)
c.render_notebook()

运行截图:

可以从上面的热力图看出,用户留存情况

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值