陈桥五笔用户编号获取_用户群组分析
生活随笔
收集整理的這篇文章主要介紹了
陈桥五笔用户编号获取_用户群组分析
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄:
- 項目介紹
- 定義闡述
- 分析流程
- 總結展示
一、項目介紹
背景:
當我們在做用戶分析時,會遇到這樣的一個問題,一個用戶使用APP時,會留下一連串的使用數(shù)據(jù),可能是一月份的購買了1次,二月份購買了2次,三四月沒有購買,五月份又購買了。也就是對于用戶來說他的數(shù)據(jù)是一個時間面數(shù)據(jù),而且不同用戶的時間面是不相同的,開始時間經(jīng)歷時間都不一樣,而如果我們分析的時候不考慮到這個因素而直接進行分析,顯然是不夠合理的,因為新用戶和老用戶經(jīng)歷的產(chǎn)品運營情況是不一樣的。
那我們應該如何處理呢,這個時候就有一種分析方法,可以幫助我們在時間軸上對齊用戶,這就是群組分析。
二、定義闡述
(1)群組分析:
用戶在產(chǎn)品使用中都有一個用戶行為流程,不同時期的用戶表現(xiàn)情況可能不一樣,群組分析的主要目的是分析相似群體隨時間的變化,核心就是對比、分析不同時間群組的用戶,在相同周期下的行為差異, 所以也稱同期群分析。
(2)群組分析的作用:
1. 對處于相同生命周期階段的用戶進行垂直分析(橫向比較),從而比較得出相似群體隨時間的變化
2. 通過比較不同的同期群,可以從總體上看到,應用的表現(xiàn)是否越來越好了。從而驗證產(chǎ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語句,獲取數(shù)據(jù) df = pd.read_sql(sql=sql_cmd, con=engine)#數(shù)據(jù)顯示有用戶的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()拆解結束
# 根據(jù)訂單月份和首次消費日進行分組 grouped = df.groupby(["首次購買日","訂單月份"]) # 求每個用戶群下每一個月份的用戶數(shù)量、訂單數(shù)量、購買金額 cohorts = grouped.agg({"用戶id":pd.Series.nunique,"訂單編號":pd.Series.nunique,"銷售額":np.sum}) # 重命名 cohorts.rename(columns={"用戶id":"用戶數(shù)量","訂單編號":"銷售量"},inplace=True) cohorts.head()拆解:
# 根據(jù)訂單月份和首次消費日進行分組 grouped=df.groupby(['首次購買日','訂單月份'])# 求每個用戶最早消費日下 每一個月份的用戶數(shù)量、訂單數(shù)量、購買金額 cohorts = grouped.agg({"用戶id":pd.Series.nunique,"訂單編號":pd.Series.nunique,"銷售額":np.sum})# 重命名 cohorts.rename(columns={"用戶id":"用戶數(shù)量","訂單編號":"銷售量"},inplace=True) cohorts拆解結束
# 把每個群組繼續(xù)購買的日期字段進行改變 def cohort_period(df): #定義 訂單編碼# 給首次購買日期進行編號,第二次購買為2,第三次購買為3df["首次購買日編號"] = np.arange(len(df)) + 1return df# 注意的是apply后面?zhèn)魅氲氖且粋€個dataframe cohorts = cohorts.groupby(level=0).apply(cohort_period)cohorts.head()# 得到每個群組的用戶量 # 重新設置索引 cohorts.reset_index(inplace=True) cohorts#重新設置索引 cohorts.set_index(["首次購買日","首次購買日編號"],inplace=True) cohorts# 得到每個群組的用戶量,就是第一天的用戶數(shù)據(jù)量,用作留存率的分母 cohort_group_size = cohorts["用戶數(shù)量"].groupby(level=0).first() cohort_group_size.head()# 計算每個群組的留存 # unstack 是把index轉(zhuǎn)化為column,https://www.jianshu.com/p/5ab1019836c9 cohorts["用戶數(shù)量"].unstack(0).head()# 計算留存 divide除 user_retention = cohorts["用戶數(shù)量"].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%") 《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的陈桥五笔用户编号获取_用户群组分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python绘图课设_python课程设
- 下一篇: 在python中查看关键字需要在pyth