作者:杨奉山 R语言中文社区专栏作者,R语言小学生,和我一起为成为优秀的商业数据分析师努力吧
知乎专栏:https://zhuanlan.zhihu.com/YFSbda
一个好的商业分析项目从来都不是从数据出发的,而是根据现象提出问题,之后根据问题从大局出发进行总体的(非数据上)分析(要清晰的把握自己的问题是什么,如何通过数据分析解决问题),根据这一步的分析建立具体数据分析框架,凭此再去确定要收集的数据和加工数据,最后分析得出结论解决问题。下面以一个手游公司销售额为例做商业数据分析。
第一部分:项目及思路分析
1. 根据业务经验提出两点假设:(1)商业宣传活动少了。(2)每个月开展游戏活动的主题不一致。
2. 经过和市场部和游戏开发部交流得到两点信息:(1)由于预算,本月宣传少了很多。(2)游戏活动主题没有变化。
3.根据前两步提出假设:大致原因是宣传少了,很难有更多的人了解公司产品,因此新用户的消费额减少了。
4. 为了验证问题我们设计分析框架是对比6月和7月总体销售额及各个月新老消费者的消费额占比。
5. 根据分析框架确定要收集的数据信息。
6. 数据整合分析,得出结论来支持或者推翻假设。
7. 若支持假设,那据此提出解决办法。
(P.S. 这种分析叫验证性数据分析,下一章介绍探索性数据分析。)
第二部分:按第一部分思路进行数据分析
数据是原始未经过任何处理的游戏数据,共记录了该公司某个手游的6月-7月139112条玩家登陆及消费信息。公众号后台回复“手游”下载数据集。
1. 首先读取数据,同时去除掉无用的列:game_id(游戏名称)
#读取数据##用户登陆时间DAU <- read.csv('dau.csv',header = T,stringsAsFactors=F)[,c(1,3)]##用户消费时间及消费金额DPU <- read.csv('dpu.csv',header = T,stringsAsFactors=F)[,c(1,3,4)]##用户初次安装游戏时间INS <- read.csv('install.csv',header=T,stringsAsFactors=F)[,c(1,3)]
然后看看这些数据都有哪些字段
> head(DAU,3)
log_date user_id
1 2013-06-01 116
2 2013-06-01 13491
3 2013-06-01 7006
> head(DPU,3)
log_date user_id payment
1 2013-06-01 351 1333
2 2013-06-01 12796 81
3 2013-06-01 364 571
> head(INS,3)
install_date user_id
1 2013-04-15 1
2 2013-04-15 2
3 2013-04-15 3
log_date:用户登录时间。
user_id:用户id,所有用户id唯一。
payment:用户再当天消费情况。
install_date:用户初次安装游戏时间。
2. 对3个不同的数据集进行合并,第一步以user_id为key,第二步以log_date和user_id为key,同时类似与SQL的left join功能(all.x=T):
#数据集合并
##第一次合并
dau.ins <- merge(DAU,INS,by='user_id')
##偷偷观察一下看看第二次合并怎么设置参数
head(dau.ins);head(DPU)
##第二次合并我在另外一个Script做了几次测试
did <- merge(dau.ins,DPU,by=c('log_date','user_id'),all.x = T)
#将NA值(没有消费)设为0
did$payment[is.na(did$payment)] <- 0
head(did)
第2步我们将3个不同文件的数据整合到了一起
3. 这一步进行表内操作,首先将年份和天去掉只保留月份,然后按月份整合数据,最后通过月份对比确定本月消费玩家中谁是新消费者,谁是老消费者。
#按月处理时间变量
#这里有俩办法,还有一个用substr()+as.number()
did$log_date <- as.numeric(format(as.Date(did$log_date),format='%m'))
did$install_date <- as.numeric(format(as.Date(did$install_date),format='%m'))
head(did)
#按月份整合数据:除了下述方法笔者还尝试了by(),reashape2,split()+apply(),均可实现,有兴趣的话可以试试。
final.data <- aggregate(did,by=list(did$user_id,did$log_date,did$install_date),FUN=sum)[,c(1,2,3,7)]
names(final.data) <- c('user_id','log_date','install_date','payment')
#为用户贴上新老标签
final.data$label <- ifelse(final.data$log_date==final.data$install_date,'新用户消费','老用户消费')
head(final.data)
final.sum <- aggregate(final.data[,2:4],by=list(final.data$log_date,final.data$label),sum)[,c(1,2,5)]
names(final.sum) <- c('月份','收入来源','销售额')
#数据到这里就捣腾完毕了,下面可视化探索使用最后的final开头的两个数据集
4. 数据可视化。
#可视化分析
(p <- ggplot(final.sum,aes(x=factor(月份),y=销售额,fill=factor(收入来源,levels = c('新用户消费','老用户消费',order=T))))+
geom_bar(width = 0.6,stat = 'identity')+
labs(x='月份',fill='收入来源'))+
scale_x_discrete(breaks=c(6,7),labels = c('6月','7月'))
这里我们发现老用户的消费情况几乎没什么变化,但是明显新用户的消费额明显少了接近一半。由此可以说我们第一部分的假设成立:确实是宣传不够导致新消费者不肯氪金。因此给的策略建议就是根据实际成本提高活动宣传,让新消费者买买买。
按理说分析到这里就结束了,但是数据分析有个好处就是你可以利用好不容易得到的数据做一些其他的事