如何理解R語言數(shù)據(jù)分析中的Cohort存留分析

這篇文章給大家介紹如何理解R語言數(shù)據(jù)分析中的Cohort存留分析,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

十余年的察隅網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整察隅建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“察隅網(wǎng)站設(shè)計”,“察隅網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。

相信經(jīng)常做數(shù)據(jù)分析的同學(xué)都聽說過Cohort 分析,特別是互聯(lián)網(wǎng)運營中,用于分析客戶存留等場景,以往這種分析大都借助SQL+Excel完成。

最近在嘗試學(xué)習(xí) Cohort 用戶存留分析時,找到了國外一個數(shù)據(jù)分析愛好者Cohort 存留分析的Python版本完整代碼,并且很良心到的提供了練習(xí)數(shù)據(jù),作為一個R比Python要熟練的菜鳥分析師,自然是首先想到如何把這個代碼翻譯成R版本。

http://www.gregreda.com/2015/08/23/cohort-analysis-with-python/

終于功夫不顧有心人,忙活了一天用R語言代碼還原了這個Cohort分析的R語言版本,這里分享給大家,代碼不佳之處,敬請見諒,只是一個demo,還沒有做封裝。

library('xlsx')
library('ggplot2')
library('dplyr')
library('magrittr')
library('tidyr')
library('reshape2')

1、數(shù)據(jù)導(dǎo)入:

setwd("D:/R/File/")
df <- read.xlsx('relay-foods.xlsx', sheetName = 'Purchase Data')

如何理解R語言數(shù)據(jù)分析中的Cohort存留分析

2、數(shù)據(jù)清洗:

存留分析使用到的字段只有購買日期、用戶ID等信息,分析月度存留,需要將日期規(guī)范化成年月形式,同時按照客戶id分組,計算出用戶首次購買的日期,代碼如下:

2.1 創(chuàng)建購買月份字段

df$OrderPeriod = format(df$OrderDate,'%Y-%m')   #購買日期

2.2 創(chuàng)建用戶首次購買字段

CohortGroup = df %>% group_by(UserId) %>% 
              summarize( CohortGroup = min(OrderDate))
             #計算用戶首購日期

CohortGroup$CohortGroup <-  CohortGroup$CohortGroup %>% format('%Y-%m') df <- df %>% left_join(CohortGroup,by = 'UserId')  
#將首購日期與原始訂單表合并對齊

2.3 分組(按照首購日期、購買日期)計算總用戶數(shù)、總訂單數(shù)、總支付金額(用戶ID要去重)

chorts <- df %>% group_by(CohortGroup,OrderPeriod) %>% 
           summarize(
               UserId  = n_distinct(UserId),
               OrderId = n_distinct(OrderId),
               TotalCharges = sum(TotalCharges)
               ) %>% rename(TotalUsers= UserId , TotalOrders = OrderId)

2.4 按照用戶ID分組并根據(jù)購買日期月份添加順序標(biāo)簽

chorts <- chorts %>% 
              arrange(CohortGroup,OrderPeriod) %>% 
              group_by(CohortGroup) %>% 
              mutate( CohortPeriod =row_number())

3、計算當(dāng)月購買新用戶數(shù)

cohort_group_size <- chorts %>% 
             filter(CohortPeriod == 1) %>% 
             select(CohortGroup,OrderPeriod,TotalUsers)

user_retention <- chorts %>% 
             select(CohortGroup,CohortPeriod,TotalUsers) %>% 
             spread(CohortGroup,TotalUsers) 
             #長表轉(zhuǎn)換為寬表#將具體用戶數(shù)換算為占基準(zhǔn)月份比率

user_retention[,-1] <- user_retention[,-1] %>% t() %>% `/`(cohort_group_size$TotalUsers) %>% t() %>% as.data.frame()

寬表轉(zhuǎn)為長表

user_retention1 <- user_retention %>% select(1:5) %>% 
            melt( 
                id.vars = 'CohortPeriod', 
                variable.name = 'CohortGroup', 
                value.name = 'TotalUsers'
                )

4、存留曲線

ggplot(user_retention1,aes(CohortPeriod,TotalUsers)) +
     geom_line(aes(group = CohortGroup,colour = CohortGroup)) +
     scale_x_continuous(breaks = 1:15) +
     scale_colour_brewer(type = 'div')

如何理解R語言數(shù)據(jù)分析中的Cohort存留分析

最終的存留熱力圖數(shù)據(jù)源:

user_retentionT <- t(user_retention) %>% .[2:nrow(.),]  %>% as.data.frame
user_retentionT$CohortPeriod <- row.names(user_retentionT)
row.names(user_retentionT) <- NULLuser_retentionT <- user_retentionT[,c(16,1:15)]

user_retentionT1 <- user_retentionT %>% 
            melt( 
                id.vars = 'CohortPeriod', 
                variable.name = 'CohortGroup', 
                value.name = 'TotalUsers'
                )

5、存留分析熱力圖:

library("Cairo")
library("showtext") font_add("myfont","msyh.ttc") CairoPNG("C:/Users/RAINDU/Desktop/emoji1.png",1000,750) showtext_begin() ggplot(user_retentionT1 ,aes(CohortGroup,CohortPeriod,fill=TotalUsers))+  geom_tile(colour='white') +  geom_text(aes(label = ifelse(TotalUsers != 0,paste0(round(100*TotalUsers,2),'%'),'')),colour = 'blue') +  scale_fill_gradient2(limits=c(0,.55),low="#00887D", mid ='yellow', high="orange",midpoint = median(user_retentionT1$TotalUsers, na.rm =TRUE),na.value = "grey90") +  scale_y_discrete(limits = rev(unique(user_retentionT1$CohortPeriod))) +  scale_x_discrete(position = "top")+  labs(title="XXX產(chǎn)品Chort留存分析",subtitle="XXX產(chǎn)品在2019年1月至2010年三月中間的留存率趨勢")+  theme(    text = element_text(family = 'myfont',size = 15),    rect = element_blank()    ) showtext_end() dev.off()

如何理解R語言數(shù)據(jù)分析中的Cohort存留分析

存留分析是互聯(lián)網(wǎng)數(shù)據(jù)分析和運用中經(jīng)常會用到分析工具,本節(jié)的R代碼是源于篇首Python代碼的思路,大家可以對比兩者的優(yōu)劣,作為今后分析使用的參考資料。

關(guān)于如何理解R語言數(shù)據(jù)分析中的Cohort存留分析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

分享文章:如何理解R語言數(shù)據(jù)分析中的Cohort存留分析
文章轉(zhuǎn)載:http://muchs.cn/article14/jepede.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、全網(wǎng)營銷推廣網(wǎng)頁設(shè)計公司、微信公眾號、外貿(mào)網(wǎng)站建設(shè)、用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作