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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

利用Python实现用户群组分析!

發(fā)布時(shí)間:2023/12/19 python 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用Python实现用户群组分析! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文中介紹的是一種數(shù)據(jù)分析方法:群組分析Cohort Analysis

群組分析是用于研究用戶行為和提高增長的分析思路。在本文中,將結(jié)合一個(gè)數(shù)據(jù)集利用Python來實(shí)現(xiàn)該分析方法。

https://www.philosophicalhacker.com/post/better-cohort-analysis/

本文數(shù)據(jù)集下載地址:

https://www.kaggle.com/mkechinov/ecommerce-events-history-in-cosmetics-shop

一、什么是群組分析

群組分析Cohort Analysis,重點(diǎn)就是群/組,它是一種利用用戶分層和用戶建模的方法,主要分析的是相同用戶群體隨著時(shí)間延續(xù)的變化發(fā)展情況。

我們需要將獲取到的全部用戶分成一個(gè)個(gè)的組或者簇群,這樣的群或組的分層方式可以是日期、渠道或者其他特定的用戶為來劃分。總之,我們可以按照實(shí)際的需求和維度來進(jìn)行用戶分層。

通過群組分析,我們可以看到不同組別的留存情況。群組分析Cohort Analysis圖表和留存曲線是最常用的留存工具。這些圖表主要是告訴我們用戶在我們產(chǎn)品的中的參與度如何,留存率是怎樣的情況,同時(shí)還可以分析用戶新增速度是否達(dá)到我們的要求。

目前市面上很多的BI工具都可以繪制群組分析的圖表和留存曲線,比如GrowingIO、神策大數(shù)據(jù)系統(tǒng)、PowerBI等。但是,如果想自定義一些分組或分群的維度,使用Python也是不二選擇。

二、Cohort 分析使用場景

  • 用戶留存率分析

  • 用戶流失率分析

  • 用戶轉(zhuǎn)化率分析

  • 廣告轉(zhuǎn)化率分析

  • 上面是很常見的使用場景,還可以進(jìn)行其他場合的延伸,比如電商網(wǎng)站用戶的交易支付數(shù)據(jù),不同周期內(nèi)獲取的用戶在交易頻次、客單價(jià)等的比較分析

    三、用戶留存

    用戶留存指的是隨著時(shí)間延續(xù),用戶在某個(gè)周期內(nèi)的存在情況。為什么要看留存?

    • 了解一個(gè)渠道的質(zhì)量:通常是日留存,衡量用戶的短期活躍情況

    • 觀察整體的情況:用周留存或者月留存,衡量用戶在平臺(tái)上的黏性

    留存又分為次日留存、7日留存、14留存等。下面通過一個(gè)案例來說明常見的7日留存計(jì)算規(guī)則。

    問題:如何計(jì)算產(chǎn)品的7日留存?

    3.1 算法1-7日日留存

    第一種算法是:第7天活躍人數(shù) / 第1天活躍人數(shù) * 100%

    3.2 算法2-7日內(nèi)留存

    第二種算法是:第2天~第7天去重后/第1天*100%


    3.3 算法3-不同定義的7日日留存

    上面的算法1中是把當(dāng)前日直接記為Day1,還有一種計(jì)算方法將當(dāng)前日當(dāng)做Day0,然后再開始計(jì)算;

    舉例說明一下算法3的使用,比如DAU=10剛好是星期2產(chǎn)生的數(shù)據(jù):

    • 如果使用算法1,7日日留存=下周1的數(shù)據(jù)/本周2的數(shù)據(jù)(10)

    • 如果使用算法2,7日日留存=下周2的數(shù)據(jù)/本周2的數(shù)據(jù)(10)

    說明:算法3在一定程度上能夠巧妙避開星期級(jí)別的影響

    3.4 3種留存算法比較

    四、本文數(shù)據(jù)

    4.1 導(dǎo)入數(shù)據(jù)

    本文中使用的一份數(shù)據(jù)集是從kaggle下載,主要是包含事件發(fā)生時(shí)間、類型(閱覽、加購、移除購物車和購買)、產(chǎn)品ID、分類ID、產(chǎn)品編碼、品牌、價(jià)格、用戶ID、用戶會(huì)話,總共7個(gè)屬性

    import?numpy?as?np? import?pandas?as?pd? import?datetime?as?dt?import?matplotlib.pyplot?as?plt import?seaborn?as?sns#設(shè)置漢字格式:Trebuchet MS, Tahoma, Verdana, Arial, Helvetica,SimHei 中文的幼圓、隸書等等#?解決中文無法顯示問題 plt.rcParams['font.sans-serif']=['Songti?SC']??? #?解決保存圖像中負(fù)號(hào)'-'顯示為方塊問題 plt.rcParams['axes.unicode_minus']?=?False

    4.2 數(shù)據(jù)探索

    主要查看的是數(shù)據(jù)類型、數(shù)據(jù)的行列數(shù)看大小、數(shù)據(jù)的缺失值情況

    df.dtypes??#?數(shù)據(jù)類型#?結(jié)果 event_time????????object event_type????????object product_id?????????int64 category_id????????int64 category_code?????object brand?????????????object price????????????float64 user_id????????????int64 user_session??????object dtype:?objectdf.shape??#?數(shù)據(jù)的行列數(shù) #?結(jié)果 (3533286,?9)df.isnull().sum()???#?字段缺失值情況 #?結(jié)果 event_time?????????????0 event_type?????????????0 product_id?????????????0 category_id????????????0 category_code????3474821????#?缺失值嚴(yán)重 brand????????????1510289 price??????????????????0 user_id????????????????0 user_session?????????779 dtype:?int64

    五、數(shù)據(jù)清洗

    主要操作是挑選數(shù)據(jù)中價(jià)格大于和去重操作:

    六、數(shù)據(jù)處理

    在本文的案例中,群組分析是按照首次訪問的時(shí)間和每次的訪問來計(jì)算時(shí)間間隔,從而來計(jì)算留存情況,具體步驟為:

    • 計(jì)算每個(gè)用戶的首次訪問時(shí)間min_day

    • 記錄后續(xù)每次訪問時(shí)間和首次訪問時(shí)間的間隔day_gap

    • 因?yàn)槭?2月份的電商數(shù)據(jù),我們將一個(gè)月分成10份,時(shí)間周期為3天

    因?yàn)樯厦娴膬蓚€(gè)因素都是和時(shí)間相關(guān),所以必須導(dǎo)入Python中強(qiáng)大的datetime庫來處理時(shí)間處理的需求。

    1、獲取event_time中的時(shí)間:年月日

    def?get_time(datetime):"""函數(shù)作用:獲取時(shí)間中的年月日"""event_time?=?datetime.strip("?UTC")??#?傳進(jìn)來的參數(shù)去掉?UTC部分#?dt表示datetime庫event_time?=?dt.datetime.fromisoformat(event_time)??#?生成一個(gè)YYYY-MM-DD的date對(duì)象y?=?dt.date(event_time.year,event_time.month,event_time.day)??#?取出年月日return?ydf2["event_day"]?=?df2["event_time"].apply(get_time) df2

    2、根據(jù)每個(gè)用戶user_id來確定最早時(shí)間

    #?用戶本月的最早登陸時(shí)間確定 grouping?=?df2.groupby("user_id")["event_day"] groupingdf2["min_day"]?=?grouping.transform("min") df2.head()

    3、計(jì)算訪問日event_day和最早訪問時(shí)間的間隔

    #?計(jì)算用戶當(dāng)日訪問event_day和最早訪問時(shí)間min_day之間的時(shí)間間隔 #?3為假定的用戶分組訪問周期df2["day_gap"]?=?(((df2["event_day"]?-?df2["min_day"])?//?3)?+?dt.timedelta(days=1)).apply(lambda?x:x.days) df2

    4、按照首次訪問時(shí)間和時(shí)間間隔來統(tǒng)計(jì)用戶數(shù)

    #??按照首次訪問時(shí)間和下一次訪問的間隔,統(tǒng)計(jì)用戶數(shù) grouping1?=?df2.groupby(["min_day","day_gap"])#?根據(jù)用戶user_id去重統(tǒng)計(jì)每個(gè)組的用戶數(shù) # grouping1["user_id"].apply(pd.Series.nunique):展示去重的總個(gè)數(shù) #?grouping1["user_id"].apply(pd.Series.unique):?展示去重之后的具體元素 df3?=?grouping1["user_id"].apply(pd.Series.nunique).reset_index() df3.head()

    上面表中的數(shù)據(jù)表示的是和當(dāng)前的時(shí)間間隔分別為1,2,3…的人數(shù)分別為17519,2591,2276等

    5、生成數(shù)據(jù)透視表

    有了上面分組統(tǒng)計(jì)的數(shù)據(jù),我們可以生成透視表

    #?數(shù)據(jù)透視部分 df4?=?df3.pivot(index="min_day",columns="day_gap",values="user_id") df4.head()

    6、改變數(shù)據(jù)形式:方便最終使用百分比顯示數(shù)據(jù)

    一般情況下,我們習(xí)慣用百分比來表示用戶的留存,很清晰地看到用戶的留存比例。首先我們?nèi)〕龅谝涣械臄?shù)據(jù)(全部行):

    后面每個(gè)數(shù)據(jù)除以相應(yīng)日期的第一個(gè)數(shù)據(jù):

    #?divide?函數(shù) table?=?df4.divide(size,axis=0)??#?在行的方向上除以對(duì)應(yīng)size中的值 table.head()

    保留3位小數(shù),同時(shí)改變數(shù)據(jù)table的索引值:

    #?保留3位小數(shù)并乘以100 table.round(3)?*?100#?索引重置,只取出年月日,后面的時(shí)分秒取消 table.index?=?table.index.date

    群組分析繪圖

    繪制群組分析留存熱力圖:

    #?解決中文無法顯示問題 plt.rcParams['font.sans-serif']=['Songti?SC']??? #?解決保存圖像中負(fù)號(hào)'-'顯示為方塊問題 plt.rcParams['axes.unicode_minus']?=?False??plt.figure(figsize=(15,8)) plt.title("群組分析留存圖")sns.heatmap(data=table,annot=True,fmt='.0%',vmin?=?0.0,vmax?=?0.2,cmap="BuPu_r") plt.show()

    從上面的數(shù)據(jù)中我們可以看到:前6天的留存情況還是很漂亮(顏色較淺,留存率相對(duì)較高)。

    可能原因是這是整個(gè)12月份的全量數(shù)據(jù),導(dǎo)致了多數(shù)的活躍用戶會(huì)被歸類為月初前幾天的新增活躍用戶。但是數(shù)據(jù)整體上到了月末,留存占比還是較少,月留存情況并不可觀。

    -?END -

    對(duì)比Excel系列圖書累積銷量達(dá)15w冊(cè),讓你輕松掌握數(shù)據(jù)分析技能,可以在全網(wǎng)搜索書名進(jìn)行了解:

    總結(jié)

    以上是生活随笔為你收集整理的利用Python实现用户群组分析!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。