陈桥五笔用户编号获取_用户群组分析
目录:
- 项目介绍
- 定义阐述
- 分析流程
- 总结展示
一、项目介绍
背景:
当我们在做用户分析时,会遇到这样的一个问题,一个用户使用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%")
陈桥五笔用户编号获取_用户群组分析相关推荐
- 谷歌五笔输入法电脑版_“五笔输入法”打字速度更快,为什么却没啥人用?
现如今,随着国内经济水平的不断发展,电脑和手机都已经不再是稀罕玩意,因为现在国内有很多的厂家都在生产手机和电脑,导致这些电子产品的价格下降,所以我们很轻易就能够买得起这样的产品.而在手机.电脑普及之后 ...
- 从此以后不再用“陈桥五笔”
最近使用陈桥五笔把我气坏了.非得安装所谓的"百度搜霸",如果选择不安装,刚五笔装不上.反复试了好多次都不行.什么玩意儿嘛! 汉字录入我一直钟情于五笔输入,也一直在用"陈桥 ...
- 在XP上安装‘陈桥五笔’
陈桥五笔是个很不错的东东,我很欣赏它. 但在XP Pro 版上安装,总是不响应,直到失去安装的信心.后来关掉防火墙.取消IE代理服务器设置(忘了拔没拔网线),等上一会儿,好了.
- 利用Python实现用户群组分析!
本文中介绍的是一种数据分析方法:群组分析Cohort Analysis. 群组分析是用于研究用户行为和提高增长的分析思路.在本文中,将结合一个数据集利用Python来实现该分析方法. https:// ...
- 数据分析方法——用户群组分析
文章目录 数据分析方法--用户群组分析 内容摘要 一.群组分析方法介绍 二.项目背景及目的 三.python实操 (1)数据导入 (2)数据处理 (3)用户群组存留率计算 (4)用户群组存留率可视化 ...
- 分布分析和分组分析_如何通过群组分析对用户进行分组并获得可行的见解
分布分析和分组分析 数据分析 (DATA ANALYSIS) Being a regular at a restaurant is great. 乙 eing定期在餐厅是伟大的. When I sta ...
- 谷歌五笔输入法电脑版_新手学拼音还是学五笔打字(看完你就明白)
在如今的生活中,手机以及电脑成为了人们生活中越来越不可或缺的物件.而对于人们来说,那些越受人们欢迎的东西就会发展的越来越好,而那些人们不怎么关心的东西,则会随着时间慢慢被淘汰掉,这也算是时代的进步吧. ...
- 基于用户的产品分析之Cohort Analysis(群组分析,留存分析)
在产品正式上线后,我们需要对产品的客群对象进行分析,此时产品的群组分析会给予我们找到一定的方向. 核心的维度:产品 ->客群,时间->聚类周期现象 首先读取数据集: import nump ...
- Linux shell 学习笔记(5)— 文件权限(添加、修改、删除用户及创建、修改群组)
1. Linux的安全性 Linux 安全系统的核心是用户账户.每个能进入 Linux 系统的用户都会被分配唯一的用户账户.用户对系统中各种对象的访问权限取决于他们登录系统时用的账户. 用户权限是通过 ...
最新文章
- vlookup示例_VLOOKUP示例–如何在Excel中执行VLOOKUP
- 一举打败16个同类模型,视频超分比赛冠军算法入选CVPR 2022,来自商汤南洋理工大学...
- System.arraycopy(src, srcPos, dest, destPos, length) 与 Arrays.copyOf(original, newLength)区别
- aop实现原理-动态代理CGLib代理
- python if else用法_python列表推导式中使用if-else
- IE下 显示图片会多出一个边框的问题
- 点赞功能设计,网上的,留个底
- jQuery中append()、prepend()与after()、before()的区别
- 基于Jupyter Notebook---卷积神经网络的图像分类(keras对猫狗图像数据集进行分类)
- java常量映射_java-基础 - 常量与变量
- Hdu2612Find a way bfs
- gpg: no default secret key: 私钥不可用
- MES系统源码 MES系统功能介绍
- python dot_graphviz,dot,及dot图可视化
- 【枚举的定义;枚举变量的定义、初始化和赋值】(学习笔记16--枚举)
- linux系统密码正则,Linux密钥登录原理和ssh使用密钥实现免密码登陆
- 计算机ps二级考试试题,2020年3月计算机等级Photoshop考试模拟试题及答案
- 超全的学习资料——Oracle 从入门到精通
- 斯诺克台球游戏HTML5
- Emacs快捷键相关
热门文章
- 0016-Avro序列化反序列化和Spark读取Avro数据
- Moodle安全漏洞如何启动远程代码执行?
- 优云携手网易云 助力企业“互联网+”转型
- appium运行报错java.net.SocketException: socket write error
- Android上webview界面切换动画效果
- ShopEx安装过程
- 从零开始学习Kafka
- 【咸鱼教程】基于系统时间的计时器DateTimer(不受FPS影响)
- Linux命令之ln软链接
- Mysql 查看、创建、更改 数据库和表