说明:文章内容截选自实验楼教程【R 语言基础入门】~
前言:本课程主要讲解包括 R 语言的基本数据结构 , tidyverse 生态 , 以及一些用R解决实际问题的案例。属于 R 语言小白入门基础课程,难度简单。十分适合想要学习 R 语言的同学进行入门学习。
本教程一共分为【基础数据结构】和【tidyverse生态链两篇】,请有需要的朋友mark下来方便完整学习。如果你的电脑并未安装R编程环境,可以直接移步实验楼【R 语言基础入门】,无需下载,在线实验环境操作更轻松。
一、实验介绍
1.1 实验知识点
tidyverse 生态链概述
ggplot 与可视化
dplyr 与数据转换
1.3 实验环境
R 3.4.1
Rstudio
二、实验步骤
2.1 tidyverse 生态链概述
技术的进化衍生出新的生产工具 ,而新的生产工具改变我们的工作方式和认知结构 。 蒸汽机 ,计算机 ,互联网等等发明对社会造成了深远的影响 。 人们总是认为这些伟大发明的来源是 Eureka 式从天而降的 , 但我们去深入挖掘一下就可以知道 , 任何发明都不是凭空而来的 , 而是在先前的理论与技术的基础上 , 发现新的需求或者新的原理 , 组合它们创造出来的。
今天我们实验的对象就是一组从原始 R 进化出来的工具链 Tidyverse , 它是由 Hadley Wickham 主导开发的一系列 R 包的集合。 Tidyverse 继承了R语言进行快速统计分析的优势 , 并实现了一些新的理念 , 例如 magrittr 包中的管道操作 , 让线性嵌套的函数组合变得更加清晰易懂;可视化方面中的 ggplot ,使绘图变成搭积木式的图层叠加。
这样的小发明有的改变了分析的运作方式 , 有的改变了使用者的认知方式 , 聚在一起形成了一种新的数据分析的生态链 。具体来看 , Tidyverse 有如下核心组件:
- readr : 读取数据
- tidyr : 整理数据
- dplyr : 数据转换
- ggplot : 可视化
- purrr : 函数式编程
这些组件与一些其他工具配合 , 形成了一套完整的数据分析流程 , 如下图所示:
从图中可以看到 , 整个流程包括读取数据,整洁数据,数据探索和交流部分。经过前两部分, 我们可以得到一个整理好的数据 , 它的每一行都是一个样本 , 每一列是一个变量。
然后我们就可以进入最核心的数据探索部分。数据探索包括数据转换 ,可视化, 建模三部分。数据转换的内容包括构建新的变量 , 选出子集 , 对数据进行分组并获取统计量 。 进而可以通过可视化把变量或变量之间关系用图形表示出来 ;在对数据有大体上的认知后 , 可以尝试用精确的数学语言来对数据进行建模 。 模型的结果会给我们一些新的洞察和知识 , 驱动我们去提出新的问题 , 构成一个反馈循环。
数据探索完成后我们要把所做的工作借助文章清晰地表达出来 ,从而与其他人沟通。
下面我们就用一个简单的例子来看一看如何做数据探索。
2.2 分析汽车排放数据集
首先载入 tidyverse 包 , 并观察 mpg 数据的头部:
mpg 数据集是刻画不同汽车的排放状况的一个数据集, 总过有 234 个样本 , 11 个变量 。 这 11 个变量分别是:
- manufacture: 制造商
- model: 车型
- dispel: 汽车排放量
- year: 制造年度
- cyl: 排气管数量
- trans: 排放类型
- drv: 驱动方式
- cty: 每公里耗油量(城市道路)
- hwy: 每公里耗油量(高速路)
- fl: 油的种类
- class: 车的类型
更多数据相关信息可以通过 help(mpg) 指令获取。
可视化:ggplot
先提出一个问题 , 汽车排放量和高速路上的每公里耗油量有什么关系? 这两个变量都是数值变量 , 可以先用散点图的形式将它们的关系展示出来:
这是我们第一次接触 ggplot 的语法 , 这行代码虽然很短, 却已经包含几个绘图的核心要素:
数据 : ggplot 的数据集必须是一个数据框 , 这里我们的数据是 mpg
图形属性映射 : 将数据变量映射到图形中 , 我们这里使用 aes(x = displ, y = hwy) 把 x 坐标映射到排气量 , y 坐标映射到每公里耗油量。
几何对象 : geom 代表几何对象 , 比如我们这里想画散点图 , 就用 geom_point 来生成散点图。
从这张图我们可以发现排气量与耗油成反向关系 , 排气量越大 , 耗油越少 , 它们的关系 大致是线性的 , 但也有一些例外 , 比如左上和右上的一些点 。 很容易想到 , 耗油量不仅 与排气量有关 , 还与车的类型有关 , 我们可以尝试把车型的信息加入到图中:
在属性映射中加入 color=class 参数后 , 我们可以看到每个点的汽车对应的类型被用 不同颜色表现了出来 , 对于散点图 , 还有 size(大小) , shape(形状) 等等参数 可以用于确定点的属性。
这样我们就成功地在一个二维的图形上展示了三个变量之间的关系 , 可以看到排气量较大 但耗油量也大的大多属于 2seater (2 个座位的跑车)这一类型 , 类型与耗油确实有很大关系。
为了进一步地分析类型与耗油的关系 , 我们会想到把不同的类型的车的数据分离开来 , 而不是 画在一张图上 , 我们可以使用 facet_wrap 把他们分离开来:简单的一句话就将不同类型分离开来 , ggplot 的绘画能力真是令人惊叹。
现在我们回到最初的地方 , 分析排气量和耗油量的关系 , 来看一看不同的图层是 如何叠加的。 从原来的图上我们可以看到一种强烈的线性关系 , 能不能拟合一条曲线 并把它画到图上呢?上面拟合所用的方法是 loess , 翻译成中文就是近邻多项式回归 , 是一种 非参数方法 , 所以由于几种跑车的存在 , 曲线右边翘了起来 。 曲线的阴影部分是置信区间的上下界。
如果我们想拟合普通的线性回归 ,我们可以改变 method 参数:在这个语句中 , 我们把数据映射写到了第一个括号里 , 意思是后面的所有的几何对象都共享 这一映射 , 这样代码得到了简化 。
通过上面的一系列的分析 , 我们基本掌握了 ggplot 的核心思想 。 如果想了解更多的几何对象 , 可以参考 ggplot 的 cheatsheet[1] , 如果要进一步了解 ggplot 背后的图层理论,可以参考[2]。
数据转换:dplyr
管道操作
在介绍 dplyr 前 , 首先应了解管道操作 %>% 的含义 , 管道由是由 Stefan Milton Bache 制作的 magrittr 包介绍的。 主要作用在于简化多次线性操作。
例如我们有一个多层嵌套的操作
func_3(func_2(func_1(data, arg1 = haha),arg2 = huhu), arg3 = hoho)
这样书写看起来一团糟 , 而且容易弄混 , 如果我们用管道操作 , 可以表达为
data %>% func_1(arg1 = haha) %>% func_2(arg2 = huhu) %>% func_3(arg3 = hoho)
逻辑链条变得清晰易懂。
filter:筛选行
filter 是一个用于筛选行的函数 ,例如我们想筛出排量大于等于 5 , 高速路每公里耗油小于 20 的车:arrange:排序
得到了这些排量较大 , 耗油较小的车 , 我们想按照生产日期降序排列 , 耗油量升序排列。select:选择列
这 11 个变量太多 , 我们只关心车型 , 那么可以通过 select 函数把这一个变量单独提出来mutate:生成新列
我们回到原来的 mpg 数据集 , 按照常识 , 排气管越多 , 排量越大 , 我们想生成一个新变量来看一看每根排气管的平均排气量是不是很接近。可以发现我们的猜想大致正确 , 大多数车的平均排气量都在 0.5 到 0.7 之间 , 计算出来的方差也非常小。
group_by 按群分组
有的时候我们不想看单个样本 , 而是想按照某个标准把数据分成几组 , 再来分别看这些组的统计特征有什么差异 , 那么我们可以先用 group_by 按照条件分组 , 再用 summarise 算出每组组内的统计特征。
例如我们想看不同车型的平均排气量和平均耗油量上面的几个函数是 dplyr 包的核心函数 , 如果要进一步了解 dplyr 的其他函数可以参考 dplyr 的 cheatsheet[3]。
总结
今天的实验围绕 ggplot 和 dplyr 两个工具对mpg数据集进行了简单的分析 , 我们看到了 ggplot 强大的表现力以及 dplyr 链式表达的简洁 , 熟练掌握这两个工具使得分析中的可视化和数据转换变得轻松愉快。
tidyverse 中的其他工具大多上手容易或使用面较少 , 有兴趣的同学可以阅读[4]做进一步地了解。
最后:
文章选自实验楼教程【R 语言基础入门】第二节主要内容,如果你想体验完整学习环境,点击【R 语言基础入门】即可。
传送门:
往期回顾: 【R语言入门:基础数据结构】
本期:【R语言入门:tidyverse 生态链】
网友评论