欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2025/6/17 编程问答 14 豆豆
生活随笔 收集整理的这篇文章主要介绍了 陈桥五笔用户编号获取_用户群组分析 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

目录:

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

一、项目介绍

背景:

当我们在做用户分析时,会遇到这样的一个问题,一个用户使用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位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的陈桥五笔用户编号获取_用户群组分析的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。