陈桥五笔用户编号获取_用户群组分析
生活随笔
收集整理的这篇文章主要介绍了
陈桥五笔用户编号获取_用户群组分析
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
目录:
- 项目介绍
- 定义阐述
- 分析流程
- 总结展示
一、项目介绍
背景:
当我们在做用户分析时,会遇到这样的一个问题,一个用户使用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%") 《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读总结
以上是生活随笔为你收集整理的陈桥五笔用户编号获取_用户群组分析的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: python绘图课设_python课程设
- 下一篇: 在python中查看关键字需要在pyth