本文中介绍的是一种数据分析方法:群组分析Cohort Analysis

群组分析是用于研究用户行为和提高增长的分析思路。在本文中,将结合一个数据集利用Python来实现该分析方法。

https://www.philosophicalhacker.com/post/better-cohort-analysis/

本文数据集下载地址:

https://www.kaggle.com/mkechinov/ecommerce-events-history-in-cosmetics-shop

一、什么是群组分析

群组分析Cohort Analysis,重点就是群/组,它是一种利用用户分层和用户建模的方法,主要分析的是相同用户群体随着时间延续的变化发展情况。

我们需要将获取到的全部用户分成一个个的组或者簇群,这样的群或组的分层方式可以是日期、渠道或者其他特定的用户为来划分。总之,我们可以按照实际的需求和维度来进行用户分层。

通过群组分析,我们可以看到不同组别的留存情况。群组分析Cohort Analysis图表和留存曲线是最常用的留存工具。这些图表主要是告诉我们用户在我们产品的中的参与度如何,留存率是怎样的情况,同时还可以分析用户新增速度是否达到我们的要求。

目前市面上很多的BI工具都可以绘制群组分析的图表和留存曲线,比如GrowingIO、神策大数据系统、PowerBI等。但是,如果想自定义一些分组或分群的维度,使用Python也是不二选择。

二、Cohort 分析使用场景

  1. 用户留存率分析

  2. 用户流失率分析

  3. 用户转化率分析

  4. 广告转化率分析

上面是很常见的使用场景,还可以进行其他场合的延伸,比如电商网站用户的交易支付数据,不同周期内获取的用户在交易频次、客单价等的比较分析

三、用户留存

用户留存指的是随着时间延续,用户在某个周期内的存在情况。为什么要看留存?

  • 了解一个渠道的质量:通常是日留存,衡量用户的短期活跃情况

  • 观察整体的情况:用周留存或者月留存,衡量用户在平台上的黏性

留存又分为次日留存、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实现用户群组分析!相关推荐

  1. 数据分析方法——用户群组分析

    文章目录 数据分析方法--用户群组分析 内容摘要 一.群组分析方法介绍 二.项目背景及目的 三.python实操 (1)数据导入 (2)数据处理 (3)用户群组存留率计算 (4)用户群组存留率可视化 ...

  2. 陈桥五笔用户编号获取_用户群组分析

    目录: 项目介绍 定义阐述 分析流程 总结展示 一.项目介绍 背景: 当我们在做用户分析时,会遇到这样的一个问题,一个用户使用APP时,会留下一连串的使用数据,可能是一月份的购买了1次,二月份购买了2 ...

  3. 用 SQL 分析不同用户群组留存率

    一.前言 用户增长对企业非常重要,主要包括: 新增.留存.召回 .留存率就是用户在某段时间内,开始使用某网站或APP,经过一段时间后仍然继续使用,这类群体就认为是留存用户,留存用户的占比即为留存率.N ...

  4. 【Python例】利用 python 进行用户画像词云图的生成 --- wordcloud

    [Python例]利用 python 进行用户画像词云图的生成 - wordcloud 本文主要用于记录,并使用 python 脚本进行用户画像的词云图的生成. 前言 对于词云图来说,是一个用户画像数 ...

  5. 补充 sealtalk 群组分析

    群组分析 此群组文档新增于 sealtalk 群组分析 之上, 补充 sealtalk 之外的群组逻辑功能.群组体系维护非 sdk 功能,仅做参考. 群组体系是需要建立在用户体系之上 群组搜索 客户端 ...

  6. 利用Python进行足球远动员分析

    利用Python进行足球远动员分析 分析步骤 1.明确需求与目的 数据预览 提出问题 2.数据预处理 数据清洗 缺失值 异常值 重复值 数据转换 3.数据分析 问题1左撇子适合踢足球吗? 问题2 哪个 ...

  7. 如何用python制作画像_利用Python搭建用户画像系统

    用户画像是当下很多企业都会提及的概念,多数情况下会和大数据以及营销挂钩.本文将对用户画像的相关知识进行进行简单的介绍,并利用Python去实现一个简单的用户画像系统. 1.什么是用户画像 用户画像可以 ...

  8. 利用Python搭建用户画像系统

    用户画像是当下很多企业都会提及的概念,多数情况下会和大数据以及营销挂钩.本文将对用户画像的相关知识进行进行简单的介绍,并利用Python去实现一个简单的用户画像系统. 1.什么是用户画像 用户画像可以 ...

  9. 电脑修改ip地址方法cmd_Mac系统如何创建用户群组?苹果电脑修改用户名方法

    群组允许多个用户拥有相同的访问权限.例如,您可以将文件夹或文件的特定访问权限授予群组,这样该群组的所有成员都可以进行访问.您还可以将每个共享文件夹的特定访问权限分配给群组. Mac系统如何创建用户群组 ...

最新文章

  1. 如何使用敏捷工具Leangoo脑图做Epic/ Theme /Story 管理
  2. linux awk 用一个或多个空格做分隔符
  3. 仿豆丁百度文库网页版阅读器完整解决方案
  4. java程序在内存中的存储分配
  5. Docker下使用gdb
  6. contentType,charset和pageEncoding的区别
  7. 【数据结构】图文例题详解单调栈与单调队列
  8. html文件用excel打开乱码,都是兼容惹的祸 用excel打开xls文件出现乱码的解决方法...
  9. 惠普HP CM1312nfi彩色激光打印机硒鼓替代方案
  10. 视频编码格式——h264优点
  11. com.android.dx.cf.iface.ParseException
  12. 阻容感基础02:电阻器原理(1)-电阻器模型
  13. 智慧环卫管理系统方案
  14. 补码加减运算及判断溢出方法
  15. 黑马JavaScript核心操作BOM与DOM课程笔记1-DOM
  16. 微软的软件工程现代化转型
  17. Win10怎么设置有线网络和WiFi网络优先级?
  18. QS世界大学 计算机科学与信息系统学科排名!中国高校表现如何?
  19. 李宏毅《机器学习》模型压缩-知识蒸馏
  20. 地产“罗生门”:是世茂“不讲武德”,还是福晟“谎话连篇”?

热门文章

  1. 华为平板解锁工具_2020年备战考研必选8款平板电脑 平板电脑推荐(12月最新版)...
  2. ue4sky时间_UE4 SkyLight RealTimeCapture浅析
  3. 让字跑起来的HTML5标签,HTML5:标记文字
  4. 无法跳转 vscode_爱了爱了,这个VSCode插件将极大提高你的工mo作yu效率
  5. MySQL的行转列、列转行、连接字符串 concat、concat_ws、group_concat函数用法
  6. Vue parse之 从template到astElement 源码详解
  7. 如何在SAP CRM WebClient UI里创建HANA Live Report
  8. 嵌入式tomcat例子
  9. 基于HTML5 WebGL实现 json工控风机叶轮旋转
  10. Python学习预备