上一篇我重点写了秦路老师在七周数据分析师系列课程中MySQL模块的实战作业SQL语法,对比了自己的冗余思路与老师的最佳思路。
这一篇,仍然是相同的六个业务问题,我尝试着R语言、Python复盘一遍,这样你可以对比同样的业务逻辑,使用不同工具处理之间的效率、逻辑的差异,以及各自的优缺点。在R语言代码部分,适当位置酌情做了注释,Python部分未做注释,请谨慎参考!
首先大致介绍这两份数据:
1 | 复制代码userinfo 客户信息表 |
以上两个表格是本次分析的主要对象,其中匹配字段是userId。
本次分析的五个问题:
1 | 复制代码1、统计不同月份的下单人数; |
R语言版:
1 | 复制代码library("magrittr") |
1、统计不同月份的下单人数;
1 | 复制代码orderinfo %>% filter(isPaid == '已支付') %>% |
2、统计用户三月份回购率和复购率
复购率计算:
1 | 复制代码1- (orderinfo %>% filter(isPaid == '已支付' & month(paidTime) == 3) %>% .[!duplicated(.$userId),] %>% nrow())/ |
回购率计算:
1 | 复制代码#计算四月购买的消费者 |
3、统计男女用户消费频次是否有差异
1 | 复制代码newdate <- left_join(userinfo,orderinfo,by="userId") |
4、统计多次消费的用户,第一次和最后一次消费间隔时间是多少?
1 | 复制代码newdata1 <- orderinfo %>% filter(isPaid=='已支付') %>% |
5、统计不同年龄段用户消费金额是否有差异
1 | 复制代码date1 <-c('1960-01-01','1969-12-31','1979-12-31','1989-12-31','1999-12-31','2009-12-31','2017-12-07') |
6、统计消费的二八法则,消费的top20%用户,贡献了多少额度?
1 | 复制代码data6 <- newdate %>% filter(isPaid == '已支付' & gender != '') %>% |
Python版:
1 | 复制代码import pandas as pd |
1、统计不同月份的下单人数;
1 | 复制代码userinfo1 = userinfo.dropna() |
发现在转化日期时,有几个日期时非法日期,这可能是日期字段中存在着脏数据,直接删除掉即可。
1 | 复制代码errortime = [] |
2、统计用户三月份回购率和复购率
复购率计算:
1 | 复制代码nodup = orderinfo1.loc[(orderinfo1['isPaid']== '已支付') & (orderinfo1['date_month'] == '2016-03'),'userId'].duplicated().sum() |
回购率计算:
1 | 复制代码#计算四月购买的消费者 |
3、统计男女用户消费频次是否有差异
1 | 复制代码newdate = userinfo1.merge(orderinfo1,on='userId') |
4、统计多次消费的用户,第一次和最后一次消费间隔是多少?
1 | 复制代码newdata1 = orderinfo1.loc[orderinfo1.isPaid=='已支付',['userId','paidTime']] |
5、统计不同年龄段用户消费金额是否有差异
1 | 复制代码date1 = ['1960-01-01','1969-12-31','1979-12-31','1989-12-31','1999-12-31','2009-12-31','2017-12-07'] |
6、统计消费的二八法则,消费的top20%用户,贡献了多少额度?
1 | 复制代码data6 = newdate.loc[(newdate.isPaid =='已支付' ) & (newdate.gender != ''),].groupby('userId')['price'].\ |
本文转载自: 掘金