日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

發布時間:2025/6/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 陈桥五笔用户编号获取_用户群组分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄:

  • 項目介紹
  • 定義闡述
  • 分析流程
  • 總結展示

一、項目介紹

背景:

當我們在做用戶分析時,會遇到這樣的一個問題,一個用戶使用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位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的陈桥五笔用户编号获取_用户群组分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。