您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何理解R語(yǔ)言數(shù)據(jù)分析中的Cohort存留分析,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
相信經(jīng)常做數(shù)據(jù)分析的同學(xué)都聽(tīng)說(shuō)過(guò)Cohort 分析,特別是互聯(lián)網(wǎng)運(yùn)營(yíng)中,用于分析客戶存留等場(chǎng)景,以往這種分析大都借助SQL+Excel完成。
最近在嘗試學(xué)習(xí) Cohort 用戶存留分析時(shí),找到了國(guó)外一個(gè)數(shù)據(jù)分析愛(ài)好者Cohort 存留分析的Python版本完整代碼,并且很良心到的提供了練習(xí)數(shù)據(jù),作為一個(gè)R比Python要熟練的菜鳥(niǎo)分析師,自然是首先想到如何把這個(gè)代碼翻譯成R版本。
http://www.gregreda.com/2015/08/23/cohort-analysis-with-python/
終于功夫不顧有心人,忙活了一天用R語(yǔ)言代碼還原了這個(gè)Cohort分析的R語(yǔ)言版本,這里分享給大家,代碼不佳之處,敬請(qǐng)見(jiàn)諒,只是一個(gè)demo,還沒(méi)有做封裝。
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')
2、數(shù)據(jù)清洗:
存留分析使用到的字段只有購(gòu)買日期、用戶ID等信息,分析月度存留,需要將日期規(guī)范化成年月形式,同時(shí)按照客戶id分組,計(jì)算出用戶首次購(gòu)買的日期,代碼如下:
2.1 創(chuàng)建購(gòu)買月份字段
df$OrderPeriod = format(df$OrderDate,'%Y-%m') #購(gòu)買日期
2.2 創(chuàng)建用戶首次購(gòu)買字段
CohortGroup = df %>% group_by(UserId) %>%
summarize( CohortGroup = min(OrderDate))
#計(jì)算用戶首購(gòu)日期
CohortGroup$CohortGroup <- CohortGroup$CohortGroup %>% format('%Y-%m')
df <- df %>% left_join(CohortGroup,by = 'UserId')
#將首購(gòu)日期與原始訂單表合并對(duì)齊
2.3 分組(按照首購(gòu)日期、購(gòu)買日期)計(jì)算總用戶數(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ù)購(gòu)買日期月份添加順序標(biāo)簽
chorts <- chorts %>% arrange(CohortGroup,OrderPeriod) %>% group_by(CohortGroup) %>% mutate( CohortPeriod =row_number())
3、計(jì)算當(dāng)月購(gòu)買新用戶數(shù)
cohort_group_size <- chorts %>%
filter(CohortPeriod == 1) %>%
select(CohortGroup,OrderPeriod,TotalUsers)
user_retention <- chorts %>%
select(CohortGroup,CohortPeriod,TotalUsers) %>%
spread(CohortGroup,TotalUsers)
#長(zhǎng)表轉(zhuǎn)換為寬表#將具體用戶數(shù)換算為占基準(zhǔn)月份比率
user_retention[,-1] <- user_retention[,-1] %>% t() %>% `/`(cohort_group_size$TotalUsers) %>% t() %>% as.data.frame()
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')
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年三月中間的留存率趨勢(shì)")+
theme(
text = element_text(family = 'myfont',size = 15),
rect = element_blank()
)
showtext_end()
dev.off()
存留分析是互聯(lián)網(wǎng)數(shù)據(jù)分析和運(yùn)用中經(jīng)常會(huì)用到分析工具,本節(jié)的R代碼是源于篇首Python代碼的思路,大家可以對(duì)比兩者的優(yōu)劣,作為今后分析使用的參考資料。
關(guān)于如何理解R語(yǔ)言數(shù)據(jù)分析中的Cohort存留分析就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。