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

e6fa6c5d3469fe7c43a5527b640af9e4.png

目录:

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

一、项目介绍

背景

当我们在做用户分析时,会遇到这样的一个问题,一个用户使用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列

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


df.head()

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

210fbe2913d0e5569ddc961bce0248b4.png
# 设置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()

ca2093abd142cc142d3147003642fc3b.png

拆解:

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

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

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

45170d9d163ff9c16bceccf3d3c48f98.png

拆解结束

# 根据订单月份和首次消费日进行分组
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

aa8f748c1ac68f9927eb8fee3b84d5ee.png

拆解结束

# 把每个群组继续购买的日期字段进行改变
def cohort_period(df): #定义 订单编码
    # 给首次购买日期进行编号,第二次购买为2,第三次购买为3
    df["首次购买日编号"] = np.arange(len(df)) + 1

    return df

# 注意的是apply后面传入的是一个个dataframe
cohorts = cohorts.groupby(level=0).apply(cohort_period)


cohorts.head()

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

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

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

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

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

9f7ba62b0da62673c06825fc88d3d74f.png

四、总结展示

# 折线图展示
import matplotlib.pyplot as plt
import matplotlib as mpl



pd.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")

2e05dbe554697491edf75c0ec2924bd2.png
# 热力图展示
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%")

700eba64cdec616e18671a5ed3ba5126.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智能陈桥即智能五笔是第一套真正支持全部GBK汉字编码的五笔字型,它全面支持WIN95 WIN98 WINME WINNT WIN2000中文系统。智能陈桥是一套功能强大的汉字输入软件,她内置了直接支持二万多汉字编码的五笔和新颖实用的陈桥拼音(增加了笔画输入),具有智能提示、语句输入、语句提示及简化输入、智能选词 等多项非常实用的独特技术,支持繁体汉字输出、各种符号输出、大五码汉字输出,内含丰富的词库和 强大的词库管理功能。灵活强大的参数设置功能,可使绝大部分人员都能称心的使用本软件。 智能陈桥同时可支持台湾BIG5码汉字WINDOWS系统。   在由中国软件行业协会主办的首届全国优秀共享软件及自由软件评选活动中,智能五笔荣获最高奖项——2000-2001年度“十佳软件奖”,并在网上投票阶段其得票数、软件人气值及评论意见数三项指标均名列第一。   五笔高手使用本软件,将会感到更为轻松   五笔新手使用本软件,将会取得事半功倍的效果   写作人员使用本软件,将使你写作更感流畅   网上使用本软件,将使你迅速成为聊天高手   智能陈桥是一套最好用的五笔输入系统   智能陈桥还是一套功能独特的拼音输入系统   智能陈桥也是一套非常好的繁体汉字输入系统   智能陈桥更是一套功能强大的汉字输入平台   智能陈桥5.0版称得上是目前最好用的五笔字型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值