《数据分析实战》--用R做交叉列表
《数据分析实战》–用R做交叉列表
本文参考的是《数据分析实战》第四章。
背景:针对某公司的产品,发现当月的用户使用量减少了很多,但是和上月相比,本月的商业宣传和月度活动并无大的变化,需查明用户数量减少的原因。
现状:同上月相比用户数减少。
预期:恢复到与上月相同的用户数。
明确问题:根据用户的不同属性来发现某个用户群出现问题。
读取数据
dau <- read.csv('section4-dau.csv',header = T,stringsAsFactors = F)
user_info <- read.csv('section4-user_info.csv',header = T,stringsAsFactors = F)
其中,dau数据如下:
> head(dau)
log_date app_name user_id
1 2013-08-01 game-01 33754
2 2013-08-01 game-01 28598
3 2013-08-01 game-01 30306
4 2013-08-01 game-01 117
5 2013-08-01 game-01 6605
6 2013-08-01 game-01 346
user_info数据如下:
> head(user_info)install_date app_name user_id gender generation device_type
1 2013-04-15 game-01 1 M 40 iOS
2 2013-04-15 game-01 2 M 10 Android
3 2013-04-15 game-01 3 F 40 iOS
4 2013-04-15 game-01 4 M 10 Android
5 2013-04-15 game-01 5 M 40 iOS
6 2013-04-15 game-01 6 M 40 iOS
处理数据
将两张表合并在一起,用系统自带的merge函数,合并之后数据如下:
> dau_user_info <- merge(dau,user_info,by=c('user_id','app_name'),all.x = T)
> head(dau_user_info)user_id app_name log_date install_date gender generation device_type
1 1 game-01 2013-09-06 2013-04-15 M 40 iOS
2 1 game-01 2013-09-05 2013-04-15 M 40 iOS
3 1 game-01 2013-09-28 2013-04-15 M 40 iOS
4 1 game-01 2013-09-12 2013-04-15 M 40 iOS
5 1 game-01 2013-09-11 2013-04-15 M 40 iOS
6 1 game-01 2013-09-08 2013-04-15 M 40 iOS
同时增加月份的统计列:
> dau_user_info$log_month <- substr(dau_user_info$log_date,1,7)
> head(dau_user_info)user_id app_name log_date install_date gender generation device_type log_month
1 1 game-01 2013-09-06 2013-04-15 M 40 iOS 2013-09
2 1 game-01 2013-09-05 2013-04-15 M 40 iOS 2013-09
3 1 game-01 2013-09-28 2013-04-15 M 40 iOS 2013-09
4 1 game-01 2013-09-12 2013-04-15 M 40 iOS 2013-09
5 1 game-01 2013-09-11 2013-04-15 M 40 iOS 2013-09
6 1 game-01 2013-09-08 2013-04-15 M 40 iOS 2013-09
数据分析
对上面的dau_user_info表进行统计:
1.首先我们考虑的性别方面有没有较大的变化,用系统自带的table函数进行统计:
使用方法:
输入table(AAA[,c(“XX”,”YY”)]),将AAA 数据的属性XX 和YY进行交叉列表统计并输出。
交叉列表统计就是计算各个属性下有多少样本数,是数据分析中最初级的一种分析。
> table(dau_user_info[,c("log_month","gender")])gender
log_month F M2013-08 47343 468422013-09 38027 38148
可以看出,通过比较2013 年8月和9 月男女用户的数量,可以看出两个用户群的数量都下降了,但各自的构成比例却大体上没有发生变化,所以性别这个属性对现在的问题影响不大。
2.考虑是不是年龄段会有较大的变化:
> table(dau_user_info[,c("log_month","generation")])generation
log_month 10 20 30 40 502013-08 18785 33671 28072 8828 48292013-09 15391 27229 22226 7494 3835
这里也是比较上下两行的数值,可以看出在8 月和9 月,无论哪个年龄段的用户,所占总用户的比例大体上都没有变化,没有发现哪个年龄段的用户数大量减少了。
3.对用户分群(按性别× 年龄段统计)
对数据进行n重交叉列表统计,需要使用reshape2的包,使用该包里面的dcast函数:
使用方法:
输入dcast(AAA,XX~YY+ZZ,value.var=”CCC”,length),对数据AAA 中的XX(纵轴)和YY×ZZ(横轴)进行交叉列表统计。后面的value.var=”CCC”,length 表示这个交叉列表中的数值为相应的CCC的个数。(不去重)
> library(reshape2)
> dcast(dau_user_info,log_month~gender+generation,value.var = 'user_id',length)log_month F_10 F_20 F_30 F_40 F_50 M_10 M_20 M_30 M_40 M_50
1 2013-08 9091 17181 14217 4597 2257 9694 16490 13855 4231 2572
2 2013-09 7316 13616 11458 3856 1781 8075 13613 10768 3638 2054
通过观察上述结果可以看到,上面的分析是以性别和年龄段的交叉属性作为分析轴的。通过“gender + generation”这样的方式来指定性别和年龄段的结合,将这两种属性通过“_”连接起来,并生成了分析轴。
通过观察统计的数据,可以看出这里每个用户群的用户数量都减少了,所占的比例也大体没有变,并没有发现哪个用户群的人数大量减少了。
4.通过移动设备来统计用户群体:
> table(dau_user_info[,c("log_month","device_type")])device_type
log_month Android iOS2013-08 46974 472112013-09 29647 46528
结果我们发现,9 月的iOS 用户数相比8 月下降幅度很小,然而Android 用户数却极大地减少了,因此问题很可能就出自这个用户群了。
数据可视化
按照日期和设备类型计算用户数,同时变化日期类型,因为要画时间序列的图:
> dau_user_info_device_summary <- ddply(dau_user_info,
+ .(log_date,device_type),
+ summarise,
+ dau=length(user_id))
> dau_user_info_device_summary$log_date <- as.Date(dau_user_info_device_summary$log_date)
> head(dau_user_info_device_summary)
log_date device_type dau
1 2013-08-01 Android 1784
2 2013-08-01 iOS 1805
3 2013-08-02 Android 1386
4 2013-08-02 iOS 1451
5 2013-08-03 Android 1295
6 2013-08-03 iOS 1351
画出时间序列的图:
> limits <- c(0,max(dau_user_info_device_summary$dau))
> ggplot(dau_user_info_device_summary,
+ aes(x=log_date,y=dau,col=device_type,lty=device_type,shape=device_type))+
+ geom_line(lwd=1)+
+ geom_point(size=4)+
+ scale_y_continuous(labels = comma,limits = limits)
这里注意,加号“+”要写在行后面,要不然会报错!!
结果图如下:
从上图可以看出,之前iOS 和Android 的用户数大体相当,但是从9 月的第2 周开始,Android 用户数急剧减少。
至此,数据分析结束~
《数据分析实战》--用R做交叉列表相关推荐
- 【R语言与数据分析实战】R软件编程
目录 1.流程控制 (1) if语句 (2) 循环语句 2.运算 (1) 数值运算 (2) 向量运算 (3) NA处理 3.定义函数 (1) 可变长函数 (2) 嵌套函数 4.作用域 5.对象的不变性 ...
- 数据分析实战项目3-用Excel做RFM模型用户分层模型分析
本文数据集来源:忘记了,私聊发数据源 本次目的是将一份用户订单表做RFM模型分析,做好8个维度的用户分层,可以方便运营和销售有目的去跟进重点和非重点客户. 数据源字段如图所示,但本次是订单表,客户有重 ...
- 看书标记【R语言 商务数据分析实战9】
看书标记--关于R语言 chapter 9 9.2 任务实现 [R语言 商务数据分析实战9] chapter 9 餐饮企业综合分析 统计分析>>ARIMA预测销售额>>协同过滤 ...
- 大数据分析实战-信用卡欺诈检测(二)-下采样方案和交叉验证
第一部分已经写到这里了,看完第一部分再看这一部分:大数据分析实战-信用卡欺诈检测 文章目录 下采样方案 交叉验证 下采样方案 下采样方案的实现过程比较简单,只需要对正常样本进行采样,得到与异常样本一样 ...
- 《数据分析实战》--用R做多元回归分析
<数据分析实战>--用R做多元回归分析 本文参考的是<数据分析实战>的第六章. 背景:针对某公司对产品的不同广告平台投放,基于过去的新增用户数据和投放数据,希望获得更好的广告投 ...
- 【R语言与数据分析实战】绘图
目录 1.散点图 2.图像选项 2.1 坐标轴名称 2.2 图形标题 2.3 点的类型 2.4 点的大小 2.5 颜色 2.6 坐标轴的取值范围 2.7 图像类型 2.8 线型 2.9 图形排列 2. ...
- 【R语言与数据分析实战】数据操作(一):基于向量的处理与外部数据处理
目录 1.R中的常用数据集 2.读写CSV文件 (1) 读写CSV文件 (2) 读写对象文件 3.合并数据框的行与列 4.apply系数函数 (1) apply (2) lapply (3) sapp ...
- R语言explore包进行探索性数据分析实战(EDA、exploratory data analysis):基于iris数据集
R语言explore包进行探索性数据分析实战(EDA.exploratory data analysis):基于iris数据集 目录
- r语言数据变量分段_R数据分析:用R语言做meta分析
这里以我的一篇meta分析为例,详细描述meta分析的一般步骤,该例子实现的是效应量β的合并 R包:metafor或meta包,第一个例子以metafor包为例. 1.准备数据集 2.异质性检验 in ...
最新文章
- bootstrap Table API和一些简单使用方法
- Java实现简单的RPC框架
- eureka java_spring cloud 入门系列二:使用Eureka 进行服务治理
- 每输入四个字符添加一个中划线
- Struts2框架使用(十)之struts2的上传和下载
- 前端学习(3123):react-hello-react之props的基本使用
- redis——Java整合
- 洛谷P2014【树形dp】
- 如何为你的数据选择最佳图表?
- python 新浪博客_Python实现新浪博客备份的方法
- C语言基础四(敲打键盘、寻找资料,循环语句)请一个个字读,助于您的学会机率...
- 驰为 hi12 linux,驰为Hi12 最适合入手的手写平板 真的可以试试
- python之单例模式
- 切换IE浏览器的版本
- 数字逻辑课上如何制作FPGA游戏?
- 怎样做一个拥有全局观的人
- 计算机相关专业学历重要么?
- 有梦想的闲鱼之团队介绍
- 小白学Python ——day7
- STM32CubeMX学习笔记(16)——电源管理(PWR)低功耗停止模式
热门文章
- 威联通TS-453Bmini NAS加装内存,轻松玩转虚拟机安装win10系统
- 轻量级的双向绑定工具 —— ukulelejs
- 存储-对象存储、文件存储和块存储
- excel 表头合并 和拆分的例子
- matlab 写netcdf,写入 netCDF 属性
- Cartopy 0.20 最新功能 —— Cartopy 装不上别慌,内附解决方案
- 微信小程序云函数服务器,微信小程序云函数使用的几点说明
- 从项目的一个 panic 说起:Go 中 Sync 包的分析应用
- 阿里系App抓包详细分析
- git报错the remote end hung up unexpectedlyMiB解决方法