完整的数据分析流程
- 定义研究问题,定义理想数据集,确定能够获取什么数据,获取数据,清理数据
- 探索性分析,统计分析/建模(机器学习)等
- 解释/交流结果(数据可视化),挑战结果,书写报告(Reproducible原则)
假设驱动
数据驱动
了解数据特征
数据基础
观测,变量,数据矩阵
行叫做一次观测,列叫做一个变量值
- 变量的类型
- 数值(连续, 离散)
- 分类(无序, 有序)
- 变量间的关系(对应不同的可视化方法和统计分析方法)
- 通过考虑变量的类型,去选取不同的方法
- 特征和可视化
- 数据集中趋势的测量
- 均值,中位数,众数
- 数据分散趋势的测量
- 值域,方差,标准差,四分位距
- mean(x),median(x),var(x)方差,sd(x)标准差,summary(x)求取所有
- 稳健统计量
- 是:中位数,四分位差(受极端值影响小)
- 否:均值,标准差,值域(受极端值影响大,不稳定)
- 单个变量的可视化
- 柱状图,点图
- 箱图(中位数,分位点,极端值),可以用于界限极端值
- 两个变量的关系的可视化
- 散点图: 方向,形状,强度,极端值
- 分类变量的特征和可视化
- 单个变量的可视化
- 频率表,条形图
- 两个分类变量的关系及可视化
- 关联表, 相对频率表(按列来看)
- 分段条形图, 相对频率分段条形图
- 马赛克图
- 一个分类变量,一个数值变量的关系
- 并排箱图
- 单个变量的可视化
- 数据集中趋势的测量
R的绘图系统
- 基本绘图系统
- 始于空白帆布,需要事先规划
- 分两步,画图+修饰/添加,实质是执行一系列函数
- 适合二维变量
- Lattice绘图系统
- 一次成图,一次函数调用
- 适合观测变量间的交互:在变量z的不同水平,y如何随x变化
- ggplot2绘图系统
- 用语法作图
- 数据映射到几何客体(point/line/bar)的美学属性(color/shape/size)
- 可视为: 基本绘图+Lattice,可以自动处理标题/文字说明/空间等,但不允许通过添加注释进行修改
1.基本绘图系统
- 绘图函数(graphics包)
- 调用函数会启用一个图形设备,在设备上绘图
- 基本绘图系统+屏幕设备
- plot(x,y,…)
- 重要参数: xlab/ylab/lwd/lty/pch(点的类型)/col(color)
par()
- 设置全局参数(作用于R中所有plot绘图)
- 重要参数: bg/mar(margin)/las(xlab的排版方式)/mfrow(按行填充)/mfcol
- 这些参数可以在每次plot之前进行修改
实例
``` par("bg") # "white" par("col") # "black" par("mar") # b l t r par("mfrow") # 1 row 1 col ```
- hist(x) 柱状图
- boxplot() 箱图
- boxplot(Wind~Month,airquality) 并排箱图
plot(airquality$Wind, airquality$Temp)
散点图- with(airquality, plot(Wind, Temp)) 借助with函数进行统一定制
- with(subset(airquality, Month == 9), points(Wind, Temp, col = “red”) )
- with(subset(airquality, Month %in% c(6,7,8)), points(Wind, Temp, col = “black”))
- title(main = “sjming”) 添加标题到上图
fit <- lm(Temp~Wind, airquality) //拟合
abline(fit, lwd = 2) //加线legend("topright", pch = 1, //添加图例
col = c("red", "blue", "black"),
legend = c("Sep", "May", "Other"))
2.lattice绘图系统(lattic包)
- xyplot 散点图
- xyplot(y~x|f*g, data)
- bwplot
- histogram 柱状图
- stripplot
- dotplot 点图
- splom
- levelplot
- contourplot
panel 用于控制每个面板内的绘图
lattice与base的区别
- base绘图函数直接在图形设备上绘图
- lattice绘图函数返回trellise类信息
- 打印函数真正执行了在设备上绘图
- 命令执行时,trellis类对象会被自动打印,所以看起来就像是lattice函数直接完成了绘图
grid包
- 实现独立于base的绘图系统,lattice包是基于lattic创建的,很少直接从grid包调用函数
实例
``` library(lattice) xyplot(Temp~Ozone, data = airquality) airquality$Month <- factor(airquality$Month) xyplot(Temp~Ozone | Month, data = airquality, layout = c(5, 1)) q <- xyplot(Temp~Wind, data = airquality) # use the variable, the result won't auto print print(q) set.seed(1) x <- rnorm(100) f <- rep(0:1, each = 50) y <- x + f - f*x + rnorm(100, sd = 0.5) f <- factor(f, labels = c("Group1", "Group2")) xyplot(y~x|f, layout = c(2,1)) xyplot(y~x|f, panel = function(x,y) { panel.xyplot(x, y) panel.abline(v = mean(x), h=mean(y), lty = 2) panel.lmline(x, y, col = "red") }) ```
3.ggplot2
- 层(layer)
- Data, 感兴趣的变量
- Aesthetics, x-axis, y-axis, color, fill
- Geometries, point,line,histogram //几何客体
- Facets, columns, rows //面
- facet_grid(.~Month)
- Statistics
- Coordinates
- Themes, non-data ink
- theme_classis() //经典主题
绘图函数
qplot() 类似base的plot
实例
“`
library(ggplot2)
qplot(wind, Temp, data = airquality, color = Month)
airquality Month=factor(airquality Month) # transform to Categorical variable
qplot(wind, Temp, data = airquality, color = Month)
# shape = Month, size = I(10)
# color = “red”qplot(wind, Temp, data = airquality,
geom = c(“point”, “smooth”)) # geom means 几何客体qplot(wind, Temp, data = airquality,
facets = Month ~.)
“`
ggplot()
- 调用ggplot()并不能绘图, 需要添加各种层
实例
``` ggplot(airquality, aes(Wind, Temp)) + geom_point(aes(color = factor(Month)), alpha = 0.4, size =5) //数据层+美学层+几何客体 //通过客体添加统计信息 stat_smooth() //控制颜色 library(RColorBrewer) myColors <- c(brewer.pal(5, "Dark2"), "black") display.brewer.par(5, "Dark2") ```
4.R语言颜色
RColorBrewer包
- 三类调色板, sequential(连续)/ diverging qualitative(颜色鲜明,分类变量)
- 调色板信息可与colorRamp/colorRampPalette结合使用
实例
``` # colorRamp par <- colorRamp(c("red", "blue")) par(0) # red par(1) # blue par(0.5) par(seq(0, 1, len = 10)) # colorRampPalette pal <- colorRampPalette(c("red", "yellow")) # 16 base-int pal(1) # "#FF0000" library(RColorBrewer) brewer.pal.info ```
5.R支持的图形设备
- 屏幕设备
文件设备
- 向量格式, pdf
- 位图, png
- grDevices包, 包含了实现各种图形设备的代码
文件设备绘图无法在屏幕上看到
可同事打开多个设备, 但一次只能在一个设备上绘图
dev.cur() dev.set()
dev.copy(png, file = “”)
dev.off()
6.使用markdown制作文档