利用Python实现用户群组分析!
本文中介绍的是一种数据分析方法:群组分析Cohort Analysis。
群组分析是用于研究用户行为和提高增长的分析思路。在本文中,将结合一个数据集利用Python来实现该分析方法。
本文数据集下载地址:
https://www.kaggle.com/mkechinov/ecommerce-events-history-in-cosmetics-shop
一、什么是群组分析
群组分析Cohort Analysis,重点就是群/组,它是一种利用用户分层和用户建模的方法,主要分析的是相同用户群体随着时间延续的变化发展情况。
我们需要将获取到的全部用户分成一个个的组或者簇群,这样的群或组的分层方式可以是日期、渠道或者其他特定的用户为来划分。总之,我们可以按照实际的需求和维度来进行用户分层。
通过群组分析,我们可以看到不同组别的留存情况。群组分析Cohort Analysis图表和留存曲线是最常用的留存工具。这些图表主要是告诉我们用户在我们产品的中的参与度如何,留存率是怎样的情况,同时还可以分析用户新增速度是否达到我们的要求。
目前市面上很多的BI工具都可以绘制群组分析的图表和留存曲线,比如GrowingIO、神策大数据系统、PowerBI等。但是,如果想自定义一些分组或分群的维度,使用Python也是不二选择。
二、Cohort 分析使用场景
用户留存率分析
用户流失率分析
用户转化率分析
广告转化率分析
上面是很常见的使用场景,还可以进行其他场合的延伸,比如电商网站用户的交易支付数据,不同周期内获取的用户在交易频次、客单价等的比较分析
三、用户留存
用户留存指的是随着时间延续,用户在某个周期内的存在情况。为什么要看留存?
了解一个渠道的质量:通常是日留存,衡量用户的短期活跃情况
观察整体的情况:用周留存或者月留存,衡量用户在平台上的黏性
留存又分为次日留存、7日留存、14留存等。下面通过一个案例来说明常见的7日留存计算规则。
问题:如何计算产品的7日留存?
3.1 算法1-7日日留存
第一种算法是:第7天活跃人数 / 第1天活跃人数 * 100%
3.2 算法2-7日内留存
第二种算法是:第2天~第7天去重后/第1天*100%
3.3 算法3-不同定义的7日日留存
上面的算法1中是把当前日直接记为Day1,还有一种计算方法将当前日当做Day0,然后再开始计算;
举例说明一下算法3的使用,比如DAU=10刚好是星期2产生的数据:
如果使用算法1,7日日留存=下周1的数据/本周2的数据(10)
如果使用算法2,7日日留存=下周2的数据/本周2的数据(10)
说明:算法3在一定程度上能够巧妙避开星期级别的影响
3.4 3种留存算法比较
四、本文数据
4.1 导入数据
本文中使用的一份数据集是从kaggle下载,主要是包含事件发生时间、类型(阅览、加购、移除购物车和购买)、产品ID、分类ID、产品编码、品牌、价格、用户ID、用户会话,总共7个属性
import numpy as np
import pandas as pd
import datetime as dt import matplotlib.pyplot as plt
import seaborn as sns#设置汉字格式:Trebuchet MS, Tahoma, Verdana, Arial, Helvetica,SimHei 中文的幼圆、隶书等等# 解决中文无法显示问题
plt.rcParams['font.sans-serif']=['Songti SC']
# 解决保存图像中负号'-'显示为方块问题
plt.rcParams['axes.unicode_minus'] = False
4.2 数据探索
主要查看的是数据类型、数据的行列数看大小、数据的缺失值情况
df.dtypes # 数据类型# 结果
event_time object
event_type object
product_id int64
category_id int64
category_code object
brand object
price float64
user_id int64
user_session object
dtype: objectdf.shape # 数据的行列数
# 结果
(3533286, 9)df.isnull().sum() # 字段缺失值情况
# 结果
event_time 0
event_type 0
product_id 0
category_id 0
category_code 3474821 # 缺失值严重
brand 1510289
price 0
user_id 0
user_session 779
dtype: int64
五、数据清洗
主要操作是挑选数据中价格大于和去重操作:
六、数据处理
在本文的案例中,群组分析是按照首次访问的时间和每次的访问来计算时间间隔,从而来计算留存情况,具体步骤为:
计算每个用户的首次访问时间min_day
记录后续每次访问时间和首次访问时间的间隔day_gap
因为是12月份的电商数据,我们将一个月分成10份,时间周期为3天
因为上面的两个因素都是和时间相关,所以必须导入Python中强大的datetime库来处理时间处理的需求。
1、获取event_time中的时间:年月日
def get_time(datetime):"""函数作用:获取时间中的年月日"""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.day) # 取出年月日return ydf2["event_day"] = df2["event_time"].apply(get_time)
df2
2、根据每个用户user_id来确定最早时间
# 用户本月的最早登陆时间确定
grouping = df2.groupby("user_id")["event_day"]
grouping
df2["min_day"] = grouping.transform("min")
df2.head()
3、计算访问日event_day和最早访问时间的间隔
# 计算用户当日访问event_day和最早访问时间min_day之间的时间间隔
# 3为假定的用户分组访问周期df2["day_gap"] = (((df2["event_day"] - df2["min_day"]) // 3) + dt.timedelta(days=1)).apply(lambda x:x.days)
df2
4、按照首次访问时间和时间间隔来统计用户数
# 按照首次访问时间和下一次访问的间隔,统计用户数
grouping1 = df2.groupby(["min_day","day_gap"])# 根据用户user_id去重统计每个组的用户数
# grouping1["user_id"].apply(pd.Series.nunique):展示去重的总个数
# grouping1["user_id"].apply(pd.Series.unique): 展示去重之后的具体元素
df3 = grouping1["user_id"].apply(pd.Series.nunique).reset_index()
df3.head()
上面表中的数据表示的是和当前的时间间隔分别为1,2,3…的人数分别为17519,2591,2276等
5、生成数据透视表
有了上面分组统计的数据,我们可以生成透视表
# 数据透视部分
df4 = df3.pivot(index="min_day",columns="day_gap",values="user_id")
df4.head()
6、改变数据形式:方便最终使用百分比显示数据
一般情况下,我们习惯用百分比来表示用户的留存,很清晰地看到用户的留存比例。首先我们取出第一列的数据(全部行):
后面每个数据除以相应日期的第一个数据:
# divide 函数
table = df4.divide(size,axis=0) # 在行的方向上除以对应size中的值
table.head()
保留3位小数,同时改变数据table的索引值:
# 保留3位小数并乘以100
table.round(3) * 100# 索引重置,只取出年月日,后面的时分秒取消
table.index = table.index.date
群组分析绘图
绘制群组分析留存热力图:
# 解决中文无法显示问题
plt.rcParams['font.sans-serif']=['Songti SC']
# 解决保存图像中负号'-'显示为方块问题
plt.rcParams['axes.unicode_minus'] = False plt.figure(figsize=(15,8))
plt.title("群组分析留存图")sns.heatmap(data=table,annot=True,fmt='.0%',vmin = 0.0,vmax = 0.2,cmap="BuPu_r")
plt.show()
从上面的数据中我们可以看到:前6天的留存情况还是很漂亮(颜色较浅,留存率相对较高)。
可能原因是这是整个12月份的全量数据,导致了多数的活跃用户会被归类为月初前几天的新增活跃用户。但是数据整体上到了月末,留存占比还是较少,月留存情况并不可观。
- END -
对比Excel系列图书累积销量达15w册,让你轻松掌握数据分析技能,可以在全网搜索书名进行了解:
利用Python实现用户群组分析!相关推荐
- 数据分析方法——用户群组分析
文章目录 数据分析方法--用户群组分析 内容摘要 一.群组分析方法介绍 二.项目背景及目的 三.python实操 (1)数据导入 (2)数据处理 (3)用户群组存留率计算 (4)用户群组存留率可视化 ...
- 陈桥五笔用户编号获取_用户群组分析
目录: 项目介绍 定义阐述 分析流程 总结展示 一.项目介绍 背景: 当我们在做用户分析时,会遇到这样的一个问题,一个用户使用APP时,会留下一连串的使用数据,可能是一月份的购买了1次,二月份购买了2 ...
- 用 SQL 分析不同用户群组留存率
一.前言 用户增长对企业非常重要,主要包括: 新增.留存.召回 .留存率就是用户在某段时间内,开始使用某网站或APP,经过一段时间后仍然继续使用,这类群体就认为是留存用户,留存用户的占比即为留存率.N ...
- 【Python例】利用 python 进行用户画像词云图的生成 --- wordcloud
[Python例]利用 python 进行用户画像词云图的生成 - wordcloud 本文主要用于记录,并使用 python 脚本进行用户画像的词云图的生成. 前言 对于词云图来说,是一个用户画像数 ...
- 补充 sealtalk 群组分析
群组分析 此群组文档新增于 sealtalk 群组分析 之上, 补充 sealtalk 之外的群组逻辑功能.群组体系维护非 sdk 功能,仅做参考. 群组体系是需要建立在用户体系之上 群组搜索 客户端 ...
- 利用Python进行足球远动员分析
利用Python进行足球远动员分析 分析步骤 1.明确需求与目的 数据预览 提出问题 2.数据预处理 数据清洗 缺失值 异常值 重复值 数据转换 3.数据分析 问题1左撇子适合踢足球吗? 问题2 哪个 ...
- 如何用python制作画像_利用Python搭建用户画像系统
用户画像是当下很多企业都会提及的概念,多数情况下会和大数据以及营销挂钩.本文将对用户画像的相关知识进行进行简单的介绍,并利用Python去实现一个简单的用户画像系统. 1.什么是用户画像 用户画像可以 ...
- 利用Python搭建用户画像系统
用户画像是当下很多企业都会提及的概念,多数情况下会和大数据以及营销挂钩.本文将对用户画像的相关知识进行进行简单的介绍,并利用Python去实现一个简单的用户画像系统. 1.什么是用户画像 用户画像可以 ...
- 电脑修改ip地址方法cmd_Mac系统如何创建用户群组?苹果电脑修改用户名方法
群组允许多个用户拥有相同的访问权限.例如,您可以将文件夹或文件的特定访问权限授予群组,这样该群组的所有成员都可以进行访问.您还可以将每个共享文件夹的特定访问权限分配给群组. Mac系统如何创建用户群组 ...
最新文章
- 如何使用敏捷工具Leangoo脑图做Epic/ Theme /Story 管理
- linux awk 用一个或多个空格做分隔符
- 仿豆丁百度文库网页版阅读器完整解决方案
- java程序在内存中的存储分配
- Docker下使用gdb
- contentType,charset和pageEncoding的区别
- 【数据结构】图文例题详解单调栈与单调队列
- html文件用excel打开乱码,都是兼容惹的祸 用excel打开xls文件出现乱码的解决方法...
- 惠普HP CM1312nfi彩色激光打印机硒鼓替代方案
- 视频编码格式——h264优点
- com.android.dx.cf.iface.ParseException
- 阻容感基础02:电阻器原理(1)-电阻器模型
- 智慧环卫管理系统方案
- 补码加减运算及判断溢出方法
- 黑马JavaScript核心操作BOM与DOM课程笔记1-DOM
- 微软的软件工程现代化转型
- Win10怎么设置有线网络和WiFi网络优先级?
- QS世界大学 计算机科学与信息系统学科排名!中国高校表现如何?
- 李宏毅《机器学习》模型压缩-知识蒸馏
- 地产“罗生门”:是世茂“不讲武德”,还是福晟“谎话连篇”?
热门文章
- 华为平板解锁工具_2020年备战考研必选8款平板电脑 平板电脑推荐(12月最新版)...
- ue4sky时间_UE4 SkyLight RealTimeCapture浅析
- 让字跑起来的HTML5标签,HTML5:标记文字
- 无法跳转 vscode_爱了爱了,这个VSCode插件将极大提高你的工mo作yu效率
- MySQL的行转列、列转行、连接字符串 concat、concat_ws、group_concat函数用法
- Vue parse之 从template到astElement 源码详解
- 如何在SAP CRM WebClient UI里创建HANA Live Report
- 嵌入式tomcat例子
- 基于HTML5 WebGL实现 json工控风机叶轮旋转
- Python学习预备