收藏 分销(赏)

利用Python实现用户群组分析.docx

上传人:二*** 文档编号:4555044 上传时间:2024-09-29 格式:DOCX 页数:21 大小:181.15KB 下载积分:5 金币
下载 相关 举报
利用Python实现用户群组分析.docx_第1页
第1页 / 共21页
本文档共21页,全文阅读请下载到手机保存,查看更方便
资源描述
利用Python实现用户群组分析群组分析是用于研究用户行为和提高增长的分析思路。在本 文中,将结合一个数据集利用Python来实现该分析方法。 WeekO Week 1 Week 2 Week 3 All Users 6,812 users 100.00% 2.60% 1.06% 0.86% Nov 11,2018-Nov 17,2018 2.45B users 100 00% 2 20% 1.18% 0 94% Nov 18, 2018-Nov 24. 2018 932 users 100.00% 3 00% 1.07% 0.97% Nov 25,2018-Dec 1,2018 100.00% 3.56% 1.33% 1.00% Dec 2,2018-Dec 8,2018 100 00% 3.06% 0.55% 0.44% Dec 9,2018-Dec 15,2018 100 00% 2.69% 0.93% Dec 16.2018-Dec 22,2018 100.00% 1.60% . philosophicalhacker. com/post/better-cohort- analysis/ 本文数据集下载地址: -in-cosmetics-shop 、什么是群组分析ID、分类ID、产品编码、品牌、价格、用户ID、用户会话, 总共7个属性In [2): df - pd.read_csv(u2019-Dec.csv") df.head() Out(2]: tevent_time t event_type。 product_id tcategoryJd t category.code t 0 2019-12-01 00:00:00 UTC remove_from_cart NaN 1 2019-12-01 00:00:00 UTC view 5764655 NaN 2 2019-12-01 00:00:02 UTC cart 4958 NaN 3 2019-12-01 00:00:05 UTC view 5848413 NaN 4 2019-12-01 00:00:07 UTC view 5824148 NaN import numpy as npimport pandas as pd import datetime as dtimport matplotlib.pyplot as pit import seaborn as sns#设置汉字格式:Trebuchet MS, Tahoma, Verdana, Arial, Helvetica,SimHei中文的幼圆、隶书等等#解决中文无法显示问题 plt.rcParamsffont.sans-serif]=['Songti SC']#解决保存图像中负号'■'显示为方块问题 plt.rcParams['axes.unicode_minus'] = False4.2数据探索 数据的缺失 主要查看的是数据类型、数据的行列数看大小、值情况 df.dtypes #数据类型#结果 event_time event_type #结果 event_time event_type product_id category_id category_code brand price user_id user_session object object int64 int64 object object float64 int64 object dtype: object dtype: object df.shape #数据的行列数 #结果(3533286, 9) df.isnull().sum() #字段缺失值情况 #结果event_time0 event_type0product_id0 category_id0category_code 3474821 # 缺失值严重 brand1510289price0 user_id0user_session 779 dtype: int64五、数据清洗 主要操作是挑选数据中价格大于和去重操作: In [ 7 ] : ▼ #筛选价格大于。的行记录df1 = df.query(在本文的案例中,群组分析是按照首次访问的时间和每次的 访问来计算时间间隔,从而来计算留存情况,具体步骤为: 计算每个用户的首次访问时间min_day 记录后续每次访问时间和首次访问时间的间隔day_gap 因为是12月份的电商数据,我们将一个月分成1()份, 时间周期为3天 因为上面的两个因素都是和时间相关,所以必须导入Python 中强大的datetime库来处理时间处理的需求。 df1 = df.query(在本文的案例中,群组分析是按照首次访问的时间和每次的 访问来计算时间间隔,从而来计算留存情况,具体步骤为: 计算每个用户的首次访问时间min_day 记录后续每次访问时间和首次访问时间的间隔day_gap 因为是12月份的电商数据,我们将一个月分成1()份, 时间周期为3天 因为上面的两个因素都是和时间相关,所以必须导入Python 中强大的datetime库来处理时间处理的需求。 >获取event_time中的时间:年月曰 def get_time(datetime): 函数作用:获取时间中的年月日 ” !! !! price > O') In [8]: df2 = df1.drop_duplicates()六、数据处理 event_time = datetime.strip(" UTC") # 传进来的参数去 掉UTC部分 # dt 表示 datetime 库 event_time = dt.datetime.fromisoformat(event_time) # 生成 一个 YYYY-MM-DD 的 date 对象 y = dt.date(event_time.year,event_time.month,event_time.da y) #取出年月日 return ydf2[uevent_dayn] = df2["event_timen].apply(get_time) df2 令 event.time 令 event_type 令 product.id ▼ category_id ▼ category^code 令 bran 0 2019-12-01 00:00:00 UTC remove_from_cart 5712790 NaN 1 2019-12-01 00:00:00 UTC view 5764655 NaN 2 2019-12-01 00:00:02 UTC cart 4958 NaN n 3 2019-12-01 00:00:05 UTC view 5848413 NaN freed 4 2019-12-01 00:00:07 UTC view 5824148 NaN 2、根据每个用户user_id来确定最早时间#用户本月的最早登陆时间确定 grouping = df2.groupby("user_id")[”event_day”]grouping In [11]: - #用户本月的最早登陆时间确定grouping = df2.groupby("user id")["eve grouping Out[11]: <pandas.core•groupby.generic ・ SeriesGroujdf2fnmin_dayn] = grouping.transformC'min") df2.head() event time ▼ event type, product_id t category, id ▼ category code, brand ▼ 0 2019-12-01 00:00:00 UTC remove from_cart 5712790 NaN 1 2019-12-01 00:00:00 UTC view 5764655 NaN end 2 2019-12-01 00:00:02 UTC cart 4958 NaN runail 3 2019-12-01 00:00:05 UTC view 5848413 NaN freedecor 4 2019-12-01 00:00:07 UTC view 5824148 NaN NaN 3、计算访问日event_day和最早访问时间的间隔#计算用户当日访问event_day和最早访问时间min_day之 间的时间间隔 #3为假定的用户分组访问周期 df2["day_gap"] = (((df2["event_dayn] - df2["min_dayu]) // 3) + dt.timedelta(days= l)).apply(lambda x:x.days)df2 Out[14 ]: time * event type * product id = category id * category code ▼ brand * price ▼ )-12-01 30UTC remove _from_cart 5712790 NaN 6.27 >12-01 DOUTC view 5764655 NaN end 29.05 )-12-01 32 UTC cart 4958 NaN runail 1.19 )-12-01 J5 UTC view 5848413 NaN freedecor 0.79 )-12-01 37 UTC view 5824148 NaN NaN 5.56 4、按照首次访问时间和时间间隔来统计用户数 #按照首次访问时间和下一次访问的间隔,统计用户数 grouping 1 = df2.groupby([nmin_day","day_gapn])#根据用户user.id去重统计每个组的用户数 # grouping 1 [nuser_id"].apply(pd.Series.nunique): 展示去重的总个数 # grouping! ["user_idn].apply(pd.Series.unique): 展示 去重之后的具体元素 df3 = grouping 1 ["user_idn J.apply (pd.Series.nunique).reset_index() df3.head() ▲ min_day ▼ day_gap 令 user_id 令 0 2019-12-01 1 17519 1 2019-12-01 2 2591 2 2019-12-01 3 2276 3 2019-12-01 4 2039 4 2019-12-01 5 1749 <•/.尤而小妾上面表中的数据表示的是和当前的时间间隔分别为1,2,3... 的人数分别为17519, 2591, 2276等 5、生成数据透视表有了上面分组统计的数据,我们可以生成透视表 #数据透视部分 df4 = df3.pivot(index=umin_day",colunins="day_gap",values=nuser_idn) df4.head() Out[18]: day_gap 令1 ▼2 ▼3 ▼4 ▼5 ▼( min_day 令▼▼▼▼▼ 2019-12-17519.02591.02276.02039.01749.0162 01 2019-12-17044.02006.01759.01578.01330.0133 02 2019-12-15240.01346.01439.01080.01024.093 03 2019-12-14745.01265.01226.0829.0930.068 04 2019-12-13725.01154.0979.0745.0671.054 05 6、改变数据形式:方便最终使用百分比显示数据一般情况下,我们习惯用百分比来表示用户的留存,很清晰 地看到用户的留存比例。首先我们取出第一列的数据(全部 行): In [ 19 ] : size = df4.iloc[ : r0]# 所有行第一列的数hsize.head() Out[19]: min_day17519.0 17044.0 15240.0 14745.0 13725.0 float64 17519.0 17044.0 15240.0 14745.0 13725.0 float64 2019-12-012019-12-02 2019-12-032019-12-04 Name: 1r dtype: 2019-12-05后面每个数据除以相应日期的第一个数据: # divide 函数table = df4.divide(size,axis=0) # 在行的方向上除以对应 size 中的值table.head() 群组分析Cohort Analysis,重点就是群/组,它是一种利用 用户分层和用户建模的方法,主要分析的是相同用户群体随 着时间延续的变化发展情况。 我们需要将获取到的全部用户分成一个个的组或者簇群,这 样的群或组的分层方式可以是日期、渠道或者其他特定的用 户为来划分。总之,我们可以按照实际的需求和维度来进行 用户分层。 通过群组分析,我们可以看到不同组别的留存情况。群组分 析Cohort Analysis图表和留存曲线是最常用的留存工具。这 些图表主要是告诉我们用户在我们产品的中的参与度如何, 留存率是怎样的情况,同时还可以分析用户新增速度是否达 到我们的要求。 目前市面上很多的BI工具都可以绘制群组分析的图表和留 存曲线,比如Growing]。、神策大数据系统、PowerBI等。 但是,如果想自定义一些分组或分群的维度,使用Python 也是不二选择。 二、Cohort分析使用场景用户留存率分析 1. 用户流失率分析用户转化率分析 In [24]: ▼ # di vide 函数table = df4 .divide(size, axis=O)# 在行的方向上除L table.head() Out[24]: day_gap ▼ 1 ▼2 令 3 ▼4 ▼5 ▼6 ▼min_day。令令令▼今▼ 2019-12-011.00.1478970.1299160.1163880.0998340.092642I2019-12-021.00.1176950.1032030.0925840.0780330.078209I 2019-12-031.00.0883200.0944230.0708660.0671920.061483l2019-12-041.00.0857920.0831470.0562220.0630720.046524I 2019-12-051.00.0840800.0713300.0542810.0488890.039417I保留3位小数,同时改变数据table的索引值: #保留3位小数并乘以100table.round(3) * 100 #索引重置,只取出年月日,后面的时分秒取消table.index = 群组分析绘图绘制群组分析留存热力图: #解决中文无法显示问题 pit.rcParams['font.sans-serif J=l'Songti SC'J#解决保存图像中负号」显示为方块问题 plt.rcParams['axes.unicode_minus'] = Falseplt.figure(figsize=(15,8)) plt.title(”群组分析留存图”)sns.heatmap(data=table, annot=True,fmt=,.O%\ vmin = 0.0,vmax = 0.2, cmap=nBuPu_rH) plt.show() cwfl 分析 J)I4 12 01 XI9 12 02 XI9 1205 JDI9 1204 xnq I20S U4N» I24J7 X14 I20S XI9 12 W 2D\^ I2J0 XH9 12 II 3»!9 1212 S19 !2 B X!9 12 M JM・ 12 IS 3)19 12 li JMQ 13 17 XI9 12 18 XH。 12 19 12 30 J)i9 13 21 XI9 12 23 JDI9 12 33 XI9 12-24 JDI9 12 25 Xt9 123b J>!« 12 37 3DW 13 35 颤9 1229 XI9 12 30 3)19 13 51 x%xx%%xxx%xx%xx%x%%%%%x%xxxx%%% 8%螺戒”坎以以尹以皿 U5X5X4%4 "以嗔-n以 ”或嶙碑 aw^nnn fsxE J?5%5%n4%w " F 蜓稣力nn/螺螺5?嶙 Mnwnsxaxnw 螺!?状岫螺螺螺螺5%螺5%n5%nn虫-'XI从上面的数据中我们可以看到:前6天的留存情况还是很漂 亮(颜色较浅,留存率相对较高)。 可能原因是这是整个12月份的全量数据,导致了多数的活 跃用户会被归类为月初前几天的新增活跃用户。但是数据整 体上到了月末,留存占比还是较少,月留存情况并不可观。 4. 广告转化率分析 上面是很常见的使用场景,还可以进行其他场合的延伸,比如电商网站用户的交易支付数据,不同周期内获取的用户在 交易频次、客单价等的比较分析三、用户留存 用户留存指的是随着时间延续,用户在某个周期内的存在情 况。为什么要看留存? 了解一个渠道的质量:通常是日留存,衡量用户的短期 活跃情况 观察整体的情况:用周留存或者月留存,衡量用户在平 台上的黏性留存又分为次日留存、7日留存、14留存等。下面通过一个 案例来说明常见的7日留存计算规则。 问题:如何计算产品的7日留存? D1 DAU=10 D2 DAU=6 |p3DAU 7日留存=? 3.1算法1-7 HB留存第一种算法是:第7天活跃人数/第1天活跃人数* 100% 7日留存=? 算法1: D7/D1 * 100%= 4/10* 100%=4C 3.2算法2・7日内留存第二种算法是:第2天〜第7天去重后/第1天*100% 7日留存=? 算法2: D2~D7去重之和/ 3.3算法3 .不同定义的7日日留存 上面的算法1中是把当前日直接记为Dayl,还有一种计算方法将当前日当做DayO,然后再开始计算; Day : 算法一:g^SxlOO% 次日留存=歆舟xl00% = 80% 三日留存=簧三奏'100% = 30% 算法三:1^1 xlOO% 首日留存=蓄基 xlOO% = 80% 次日留存=舞奏xlOO% = 30%举例说明一下算法3的使用,比如DAU=1。刚好是星期2产 生的数据: 如果使用算法I,7日日留存=下周1的数据/本周2的 数据(10) 如果使用算法2, 7日日留存=下周2的数据/本周2的数据(10) 说明:算法3在一定程度上能够巧妙避开星期级别的影响 日!1! 27282930313.4 3种留存算法比较 算法1: 第7天 *100% 第1天 算法2: 算法3: 第7天 *100% 第0天 四、本文数据4.1导入数据 本文中使用的一份数据集是从kaggle T载,主要是包含事件发生时间、类型(阅览、加购、移除购物车和购买)、产品
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服