利用Python实现用户群组分析.docx
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 Python 实现 用户 组分
- 资源描述:
-
利用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载,主要是包含事件发生时间、类型(阅览、加购、移除购物车和购买)、产品展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




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



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/4555044.html