pyecharts 【留存矩阵图】分析抖音用户的留存情况

文章介绍了如何通过Python进行数据处理,计算次日、3日、5日和7日留存率,并绘制留存矩阵图。使用Pandas库进行数据清洗和分组,计算用户活跃度,然后用Scatter图表展示留存率情况,帮助理解用户行为和产品粘性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据介绍

数据结构及个字段所表达的含义

uid -用户id
user_city-用户所在 城市
item_id -作品id
author_id-作者id
item_city-作者城市
channel -观看到该作品的来源
finish-是否浏览完作品
like-是否对作品点赞
music_id-音乐id
duration_time -作品时长
real_time-真实时间
H-时间点
date-日期

留存率分析 

数据留存矩阵图,是在留存率和用户活跃度的基础上进行绘制的

留存率 
        又分为次日留存率,3日留存率,5日留存率等。

计算方法:
        次日留存率:(第2天 日活跃的用户 / 第1天 日活跃的用户 )*100%
        3日留存率: (第3天 日活跃的用户 / 第1天 日活跃的用户)*100%
        ......
        以此类推。

用户活跃度
        通俗来讲就是当日用户的上线的数量(去重之后)

分析结果

        绘制留存矩阵图(需要知道留存率活跃度

                留存率(至少需要知道最早的一天在线任意一天的活跃度
                        间隔(最早的一天任意一天的间隔多少天
                活跃度(需要知道间隔日期相同时,去重的用户数量

代码实验

导入数据

df = pd.read_csv('地址')
df.info()  # 查看数据列的信息

 

 将date列转换成 datetime类型

# 将date 转换为datetime 类型
df['date'] = pd.to_datetime(df['date'])

 根据每个用户uid来确定早时间(重点咯,最早登录时间)

grouping = df.groupby("uid")["date"]
df['min_day'] = grouping.transform("min")
df.head()

 

 确定时间间隔,获取天数 (重点咯,间隔)

df['day_gap'] = (df['date'] - df['day_min']).apply(lambda x:x.days)
df

 

 利用间隔和最早登录的天数进行分组,重置id列(重点,活跃度)

df1 =df.groupby(['day_min','day_gap']).agg({'uid':'nunique'}).reset_index()

table1 = df1.pivot_table(columns='day_gap',index='day_min',values='uid')  # 转换一下,更容易看懂

 

 留存率计算

table2 = table1.divide(table1[0],axis=0)
table2

 

 绘制留存矩阵图

# x 轴为 不同类型的用户留存率
# y 轴为 活跃用户的数量
s = charts.Scatter(init_opts=opts.InitOpts(bg_color='#6e7074'))
s.add_xaxis(table2[1])
s.add_yaxis('次日留存数量',table1[1],label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(opacity=0.5))
s.set_global_opts(
    xaxis_opts=opts.AxisOpts(
        type_="value",
        splitline_opts=opts.SplitLineOpts(
            is_show=True
        )
    ),
    yaxis_opts=opts.AxisOpts(
        splitline_opts=opts.SplitLineOpts(
            is_show=True
        )
    ),
    visualmap_opts=opts.VisualMapOpts(
        type_='size',
        max_=2000,
        min_=100,
    )
)



s3 = charts.Scatter(init_opts=opts.InitOpts(bg_color='#6e7074'))
s3.add_xaxis(table2[3])
s3.add_yaxis('3日留存数量', table1[3], label_opts=opts.LabelOpts(is_show=False),
            itemstyle_opts=opts.ItemStyleOpts(opacity=0.5))
s3.set_global_opts(
    xaxis_opts=opts.AxisOpts(
        type_="value",
        splitline_opts=opts.SplitLineOpts(
            is_show=True
        )
    ),
    yaxis_opts=opts.AxisOpts(
        splitline_opts=opts.SplitLineOpts(
            is_show=True
        )
    ),
    visualmap_opts=opts.VisualMapOpts(
        type_='size',
        max_=2000,
        min_=100,
    )
)


s7 = charts.Scatter(init_opts=opts.InitOpts(bg_color='#6e7074'))
s7.add_xaxis(table2[7])
s7.add_yaxis('7日留存数量', table1[7], label_opts=opts.LabelOpts(is_show=False),
            itemstyle_opts=opts.ItemStyleOpts(opacity=0.5))
s7.set_global_opts(
    xaxis_opts=opts.AxisOpts(
        type_="value",
        splitline_opts=opts.SplitLineOpts(
            is_show=True
        )
    ),
    yaxis_opts=opts.AxisOpts(
        splitline_opts=opts.SplitLineOpts(
            is_show=True
        )
    ),
    visualmap_opts=opts.VisualMapOpts(
        type_='size',
        max_=2000,
        min_=100,
    )
)
s21 = charts.Scatter(init_opts=opts.InitOpts(bg_color='#6e7074'))
s21.add_xaxis(table2[21])
s21.add_yaxis('21日留存数量', table1[21], label_opts=opts.LabelOpts(is_show=False),
             itemstyle_opts=opts.ItemStyleOpts(opacity=0.5))
s21.set_global_opts(
    xaxis_opts=opts.AxisOpts(
        type_="value",
        splitline_opts=opts.SplitLineOpts(
            is_show=True
        )
    ),
    yaxis_opts=opts.AxisOpts(
        splitline_opts=opts.SplitLineOpts(
            is_show=True
        ),

    ),
    visualmap_opts=opts.VisualMapOpts(
        type_='size',
        max_=2000,
        min_=100,
    )
)

s.render('留存矩阵图.html')

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源源佩奇

一起进步,提高自己。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值