陈桥五笔用户编号获取_用户群组分析
目錄:
- 項(xiàng)目介紹
- 定義闡述
- 分析流程
- 總結(jié)展示
一、項(xiàng)目介紹
背景:
當(dāng)我們?cè)谧鲇脩舴治鰰r(shí),會(huì)遇到這樣的一個(gè)問(wèn)題,一個(gè)用戶使用APP時(shí),會(huì)留下一連串的使用數(shù)據(jù),可能是一月份的購(gòu)買(mǎi)了1次,二月份購(gòu)買(mǎi)了2次,三四月沒(méi)有購(gòu)買(mǎi),五月份又購(gòu)買(mǎi)了。也就是對(duì)于用戶來(lái)說(shuō)他的數(shù)據(jù)是一個(gè)時(shí)間面數(shù)據(jù),而且不同用戶的時(shí)間面是不相同的,開(kāi)始時(shí)間經(jīng)歷時(shí)間都不一樣,而如果我們分析的時(shí)候不考慮到這個(gè)因素而直接進(jìn)行分析,顯然是不夠合理的,因?yàn)樾掠脩艉屠嫌脩艚?jīng)歷的產(chǎn)品運(yùn)營(yíng)情況是不一樣的。
那我們應(yīng)該如何處理呢,這個(gè)時(shí)候就有一種分析方法,可以幫助我們?cè)跁r(shí)間軸上對(duì)齊用戶,這就是群組分析。
二、定義闡述
(1)群組分析:
用戶在產(chǎn)品使用中都有一個(gè)用戶行為流程,不同時(shí)期的用戶表現(xiàn)情況可能不一樣,群組分析的主要目的是分析相似群體隨時(shí)間的變化,核心就是對(duì)比、分析不同時(shí)間群組的用戶,在相同周期下的行為差異, 所以也稱同期群分析。
(2)群組分析的作用:
1. 對(duì)處于相同生命周期階段的用戶進(jìn)行垂直分析(橫向比較),從而比較得出相似群體隨時(shí)間的變化
2. 通過(guò)比較不同的同期群,可以從總體上看到,應(yīng)用的表現(xiàn)是否越來(lái)越好了。從而驗(yàn)證產(chǎn)品改進(jìn)是否取得了效果。
三、分析流程
import pandas as pd import numpy as np import sqlalchemy# 讀取數(shù)據(jù) engine = sqlalchemy.create_engine('mysql+pymysql://froghd:Froghd@123@localhost:3306/froghd')sql_cmd = "select * from groups_data"# 執(zhí)行sql語(yǔ)句,獲取數(shù)據(jù) df = pd.read_sql(sql=sql_cmd, con=engine)#數(shù)據(jù)顯示有用戶的OrederId、OrderDate、UserId、TotalCharges(我們只會(huì)用到這四個(gè)), #其他的字段沒(méi)有用 df #一共118條信息,8列#重命名 df.rename(columns={"orderid":"訂單編號(hào)","orderdate":"下單日","userid":"用戶id","totalcharges":"銷(xiāo)售額" },inplace=True)df.head()# 生成一個(gè)新字段,用戶訂單月份,只保留下單日的月份信息 df["訂單月份"] = df['下單日'].apply(lambda x:x.strftime("%Y-%m")) df.head()# 設(shè)置userid為索引 df.set_index("用戶id",inplace=True) # 這里的level=0表示第一層索引即userid,并且每次分組之后都會(huì)形成很多個(gè)dataframe # 按照每個(gè)用戶的訂單的最早時(shí)期,生成用戶群組 df["首次購(gòu)買(mǎi)日"]=df.groupby('用戶id')["下單日"].min().apply(lambda x:x.strftime("%Y-%m")) df.reset_index(inplace=True) df.head()拆解:
# 設(shè)置userid為索引 df.set_index("用戶id",inplace=True) df.head()#找出每個(gè)用戶的最早下單日 df.groupby('用戶id')["下單日"].min() #也可以寫(xiě)成:df.groupby(level=0)["orderdate"].min()#新增字段 最早消費(fèi)日,同樣只保留月份 df["首次購(gòu)買(mǎi)日"]=df.groupby('用戶id')["下單日"].min().apply(lambda x:x.strftime("%Y-%m")) df.reset_index(inplace=True) #重置索引 df.head()拆解結(jié)束
# 根據(jù)訂單月份和首次消費(fèi)日進(jìn)行分組 grouped = df.groupby(["首次購(gòu)買(mǎi)日","訂單月份"]) # 求每個(gè)用戶群下每一個(gè)月份的用戶數(shù)量、訂單數(shù)量、購(gòu)買(mǎi)金額 cohorts = grouped.agg({"用戶id":pd.Series.nunique,"訂單編號(hào)":pd.Series.nunique,"銷(xiāo)售額":np.sum}) # 重命名 cohorts.rename(columns={"用戶id":"用戶數(shù)量","訂單編號(hào)":"銷(xiāo)售量"},inplace=True) cohorts.head()拆解:
# 根據(jù)訂單月份和首次消費(fèi)日進(jìn)行分組 grouped=df.groupby(['首次購(gòu)買(mǎi)日','訂單月份'])# 求每個(gè)用戶最早消費(fèi)日下 每一個(gè)月份的用戶數(shù)量、訂單數(shù)量、購(gòu)買(mǎi)金額 cohorts = grouped.agg({"用戶id":pd.Series.nunique,"訂單編號(hào)":pd.Series.nunique,"銷(xiāo)售額":np.sum})# 重命名 cohorts.rename(columns={"用戶id":"用戶數(shù)量","訂單編號(hào)":"銷(xiāo)售量"},inplace=True) cohorts拆解結(jié)束
# 把每個(gè)群組繼續(xù)購(gòu)買(mǎi)的日期字段進(jìn)行改變 def cohort_period(df): #定義 訂單編碼# 給首次購(gòu)買(mǎi)日期進(jìn)行編號(hào),第二次購(gòu)買(mǎi)為2,第三次購(gòu)買(mǎi)為3df["首次購(gòu)買(mǎi)日編號(hào)"] = np.arange(len(df)) + 1return df# 注意的是apply后面?zhèn)魅氲氖且粋€(gè)個(gè)dataframe cohorts = cohorts.groupby(level=0).apply(cohort_period)cohorts.head()# 得到每個(gè)群組的用戶量 # 重新設(shè)置索引 cohorts.reset_index(inplace=True) cohorts#重新設(shè)置索引 cohorts.set_index(["首次購(gòu)買(mǎi)日","首次購(gòu)買(mǎi)日編號(hào)"],inplace=True) cohorts# 得到每個(gè)群組的用戶量,就是第一天的用戶數(shù)據(jù)量,用作留存率的分母 cohort_group_size = cohorts["用戶數(shù)量"].groupby(level=0).first() cohort_group_size.head()# 計(jì)算每個(gè)群組的留存 # unstack 是把index轉(zhuǎn)化為column,https://www.jianshu.com/p/5ab1019836c9 cohorts["用戶數(shù)量"].unstack(0).head()# 計(jì)算留存 divide除 user_retention = cohorts["用戶數(shù)量"].unstack(0).divide(cohort_group_size,axis=1) user_retention.head()四、總結(jié)展示
# 折線圖展示 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%") 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的陈桥五笔用户编号获取_用户群组分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python绘图课设_python课程设
- 下一篇: 在python中查看关键字需要在pyth