目录:

  • 项目介绍
  • 定义阐述
  • 分析流程
  • 总结展示

一、项目介绍

背景

当我们在做用户分析时,会遇到这样的一个问题,一个用户使用APP时,会留下一连串的使用数据,可能是一月份的购买了1次,二月份购买了2次,三四月没有购买,五月份又购买了。也就是对于用户来说他的数据是一个时间面数据,而且不同用户的时间面是不相同的,开始时间经历时间都不一样,而如果我们分析的时候不考虑到这个因素而直接进行分析,显然是不够合理的,因为新用户和老用户经历的产品运营情况是不一样的。

那我们应该如何处理呢,这个时候就有一种分析方法,可以帮助我们在时间轴上对齐用户,这就是群组分析。

二、定义阐述

(1)群组分析

用户在产品使用中都有一个用户行为流程,不同时期的用户表现情况可能不一样,群组分析的主要目的是分析相似群体随时间的变化,核心就是对比、分析不同时间群组的用户,在相同周期下的行为差异, 所以也称同期群分析。

(2)群组分析的作用

1. 对处于相同生命周期阶段的用户进行垂直分析(横向比较),从而比较得出相似群体随时间的变化

2. 通过比较不同的同期群,可以从总体上看到,应用的表现是否越来越好了。从而验证产品改进是否取得了效果。

三、分析流程

import pandas as pd
import numpy as np
import sqlalchemy# 读取数据
engine = sqlalchemy.create_engine('mysql+pymysql://froghd:Froghd@123@localhost:3306/froghd')sql_cmd = "select * from groups_data"# 执行sql语句,获取数据
df = pd.read_sql(sql=sql_cmd, con=engine)#数据显示有用户的OrederId、OrderDate、UserId、TotalCharges(我们只会用到这四个),
#其他的字段没有用
df #一共118条信息,8列

#重命名
df.rename(columns={"orderid":"订单编号","orderdate":"下单日","userid":"用户id","totalcharges":"销售额"
},inplace=True)df.head()

# 生成一个新字段,用户订单月份,只保留下单日的月份信息
df["订单月份"] = df['下单日'].apply(lambda x:x.strftime("%Y-%m"))
df.head()

# 设置userid为索引
df.set_index("用户id",inplace=True)
# 这里的level=0表示第一层索引即userid,并且每次分组之后都会形成很多个dataframe
# 按照每个用户的订单的最早时期,生成用户群组
df["首次购买日"]=df.groupby('用户id')["下单日"].min().apply(lambda x:x.strftime("%Y-%m"))
df.reset_index(inplace=True)
df.head()

拆解:

# 设置userid为索引
df.set_index("用户id",inplace=True)
df.head()

#找出每个用户的最早下单日
df.groupby('用户id')["下单日"].min() #也可以写成:df.groupby(level=0)["orderdate"].min()

#新增字段 最早消费日,同样只保留月份
df["首次购买日"]=df.groupby('用户id')["下单日"].min().apply(lambda x:x.strftime("%Y-%m"))
df.reset_index(inplace=True) #重置索引
df.head()

拆解结束

# 根据订单月份和首次消费日进行分组
grouped = df.groupby(["首次购买日","订单月份"])
# 求每个用户群下每一个月份的用户数量、订单数量、购买金额
cohorts = grouped.agg({"用户id":pd.Series.nunique,"订单编号":pd.Series.nunique,"销售额":np.sum})
# 重命名
cohorts.rename(columns={"用户id":"用户数量","订单编号":"销售量"},inplace=True)
cohorts.head()

拆解:

# 根据订单月份和首次消费日进行分组
grouped=df.groupby(['首次购买日','订单月份'])# 求每个用户最早消费日下 每一个月份的用户数量、订单数量、购买金额
cohorts = grouped.agg({"用户id":pd.Series.nunique,"订单编号":pd.Series.nunique,"销售额":np.sum})# 重命名
cohorts.rename(columns={"用户id":"用户数量","订单编号":"销售量"},inplace=True)
cohorts

拆解结束

# 把每个群组继续购买的日期字段进行改变
def cohort_period(df): #定义 订单编码# 给首次购买日期进行编号,第二次购买为2,第三次购买为3df["首次购买日编号"] = np.arange(len(df)) + 1return df# 注意的是apply后面传入的是一个个dataframe
cohorts = cohorts.groupby(level=0).apply(cohort_period)cohorts.head()

# 得到每个群组的用户量
# 重新设置索引
cohorts.reset_index(inplace=True)
cohorts

#重新设置索引
cohorts.set_index(["首次购买日","首次购买日编号"],inplace=True)
cohorts

# 得到每个群组的用户量,就是第一天的用户数据量,用作留存率的分母
cohort_group_size = cohorts["用户数量"].groupby(level=0).first()
cohort_group_size.head()

# 计算每个群组的留存
# unstack 是把index转化为column,https://www.jianshu.com/p/5ab1019836c9
cohorts["用户数量"].unstack(0).head()

# 计算留存 divide除
user_retention = cohorts["用户数量"].unstack(0).divide(cohort_group_size,axis=1)
user_retention.head()

四、总结展示

# 折线图展示
import matplotlib.pyplot as plt
import matplotlib as mplpd.set_option("max_columns",50)
mpl.rcParams["lines.linewidth"] = 2
%matplotlib inline
user_retention[["2009-01","2009-02","2009-03"]].plot(figsize=(5,3))
plt.title("user tetention")
plt.xticks(np.arange(1,12.1,1))
plt.xlim(1,12)
plt.ylabel("%of cohort")

# 热力图展示
import seaborn as sns
sns.set(style="white")plt.figure(figsize=(8,4))
plt.title("co:user retention")
sns.heatmap(user_retention.T,mask=user_retention.T.isnull(),annot=True,fmt=".0%")

陈桥五笔用户编号获取_用户群组分析相关推荐

  1. 谷歌五笔输入法电脑版_“五笔输入法”打字速度更快,为什么却没啥人用?

    现如今,随着国内经济水平的不断发展,电脑和手机都已经不再是稀罕玩意,因为现在国内有很多的厂家都在生产手机和电脑,导致这些电子产品的价格下降,所以我们很轻易就能够买得起这样的产品.而在手机.电脑普及之后 ...

  2. 从此以后不再用“陈桥五笔”

    最近使用陈桥五笔把我气坏了.非得安装所谓的"百度搜霸",如果选择不安装,刚五笔装不上.反复试了好多次都不行.什么玩意儿嘛! 汉字录入我一直钟情于五笔输入,也一直在用"陈桥 ...

  3. 在XP上安装‘陈桥五笔’

    陈桥五笔是个很不错的东东,我很欣赏它. 但在XP Pro 版上安装,总是不响应,直到失去安装的信心.后来关掉防火墙.取消IE代理服务器设置(忘了拔没拔网线),等上一会儿,好了.

  4. 利用Python实现用户群组分析!

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

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

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

  6. 分布分析和分组分析_如何通过群组分析对用户进行分组并获得可行的见解

    分布分析和分组分析 数据分析 (DATA ANALYSIS) Being a regular at a restaurant is great. 乙 eing定期在餐厅是伟大的. When I sta ...

  7. 谷歌五笔输入法电脑版_新手学拼音还是学五笔打字(看完你就明白)

    在如今的生活中,手机以及电脑成为了人们生活中越来越不可或缺的物件.而对于人们来说,那些越受人们欢迎的东西就会发展的越来越好,而那些人们不怎么关心的东西,则会随着时间慢慢被淘汰掉,这也算是时代的进步吧. ...

  8. 基于用户的产品分析之Cohort Analysis(群组分析,留存分析)

    在产品正式上线后,我们需要对产品的客群对象进行分析,此时产品的群组分析会给予我们找到一定的方向. 核心的维度:产品 ->客群,时间->聚类周期现象 首先读取数据集: import nump ...

  9. Linux shell 学习笔记(5)— 文件权限(添加、修改、删除用户及创建、修改群组)

    1. Linux的安全性 Linux 安全系统的核心是用户账户.每个能进入 Linux 系统的用户都会被分配唯一的用户账户.用户对系统中各种对象的访问权限取决于他们登录系统时用的账户. 用户权限是通过 ...

最新文章

  1. vlookup示例_VLOOKUP示例–如何在Excel中执行VLOOKUP
  2. 一举打败16个同类模型,视频超分比赛冠军算法入选CVPR 2022,来自商汤南洋理工大学...
  3. System.arraycopy(src, srcPos, dest, destPos, length) 与 Arrays.copyOf(original, newLength)区别
  4. aop实现原理-动态代理CGLib代理
  5. python if else用法_python列表推导式中使用if-else
  6. IE下 显示图片会多出一个边框的问题
  7. 点赞功能设计,网上的,留个底
  8. jQuery中append()、prepend()与after()、before()的区别
  9. 基于Jupyter Notebook---卷积神经网络的图像分类(keras对猫狗图像数据集进行分类)
  10. java常量映射_java-基础 - 常量与变量
  11. Hdu2612Find a way bfs
  12. gpg: no default secret key: 私钥不可用
  13. MES系统源码 MES系统功能介绍
  14. python dot_graphviz,dot,及dot图可视化
  15. 【枚举的定义;枚举变量的定义、初始化和赋值】(学习笔记16--枚举)
  16. linux系统密码正则,Linux密钥登录原理和ssh使用密钥实现免密码登陆
  17. 计算机ps二级考试试题,2020年3月计算机等级Photoshop考试模拟试题及答案
  18. 超全的学习资料——Oracle 从入门到精通
  19. 斯诺克台球游戏HTML5
  20. Emacs快捷键相关

热门文章

  1. 0016-Avro序列化反序列化和Spark读取Avro数据
  2. Moodle安全漏洞如何启动远程代码执行?
  3. 优云携手网易云 助力企业“互联网+”转型
  4. appium运行报错java.net.SocketException: socket write error
  5. Android上webview界面切换动画效果
  6. ShopEx安装过程
  7. 从零开始学习Kafka
  8. 【咸鱼教程】基于系统时间的计时器DateTimer(不受FPS影响)
  9. Linux命令之ln软链接
  10. Mysql 查看、创建、更改 数据库和表