vlambda博客
学习文章列表

R语言数据科学程序包:tidyverse介绍

 1. R语言简介


R语言是用于统计计算和绘图的免费软件。它可以在Windows, Unix以及MacOS等系统下运行。用户可以从网上免费下载R语言。



R语言的起源可以追溯到80年代,那时候的AT&T贝尔实验室(也就是现在的朗讯科技)开发了S语言进行数据挖掘、统计分析和绘图。S语言后来演变成为了商业软件S-Plus。后来有一些志愿者将S-Plus改进成为免费的R语言。R语言的统计功能强大,包括线性和非线性模型,经典统计检验、时间序列分析、聚类分析等等。

 

R语言不但免费,而且开发源代码,是一种自由软件。另外,R语言的编程简单易学。你可以自己写函数,将最新的统计方法应用到R语言中去。R语言的函数和数据集都保存在程序包里面。当我们需要访问这些函数和数据时,需要下载相关的程序包。

 

2. 数据科学简介

 

数据科学是一门利用科学的模型、算法和系统,从有结构(Structured)和无结构(Unstructured)的数据中提取信息的学科。数据科学同数据挖掘和大数据密切相关,并将统计学、数据分析、机器学习等方法相结合,利用数据解释和分析问题。信息技术的发展导致大量数据的产生,这就促进了数据科学的发展。从发展过程来看,数据科学经历了经验、理论、计算、数据驱动这4个阶段。


R语言数据科学程序包:tidyverse介绍

 

尽管在过去几十年里,数据科学在不断发展,但是直到1992年在法国召开的一次统计学会议上,才有人提出了数据科学这个名词。到了1996年,数据科学才出现在学术会议的名称中。

 

数据科学和统计学之间的关系可谓是“剪不断,理还乱”。1997年,就有人开始讨论统计学是不是等同于数据科学。这是因为统计学就是搜集和整理数据,建模并且分析数据,然后得出结论的学科。这似乎和数据科学区别不大。到了2001年,有人提出数据科学和统计学不一样,因为数据科学更加跨学科。2012年,哈佛商业评论刊登了“数据科学家:21世纪最性感的工作”的文章。这篇文章认为数据科学是一个崭新的学科。但是在美国统计学协会的会议上,有统计学家认为数据科学是统计学进化以后的学科。2014年,华尔街日报又登出文章,还是认为数据科学的面更宽,和统计学不一样。有关数据科学和统计学之间的争论还在继续,暂时没有明确的结果。

 

3.Tidyverse简介

 

Tidyverse是R语言的一个程序包。Tidy的意思是干净、整洁。Verse的意思是诗歌、歌曲。那么Tidyverse的意思就是干净整洁的语句。


R语言数据科学程序包:tidyverse介绍

 

Tidyverse可以大大简化数据处理和分析,其核心包括ggplot2, dplyr,tidyr和readr,等程序包。它们可以用来转换数据,建立模型,实现数据可视化。因此,Tidyverse是R语言中下载量排名靠前的程序包。其中,ggplot2用来可视化数据。dplyr用来解决数据处理问题,tidyr用来清理数据,readr读入表格数据。

 

类似Python中的pip install,我们可以用下面的语句安装Tidyverse:

 

install.packages("tidyverse")

 

经过一系列复杂的安装,就成功了。


R语言数据科学程序包:tidyverse介绍


类似Python中的import,R语言用library()调用程序包:


library(tidyverse)


R语言数据科学程序包:tidyverse介绍


“万事具备,只欠数据!”本文利用R语言中自带的iris数据介绍Tidyverse。首先来介绍一下iris。iris的意思鸢尾花,所以iris是一个关于花花草草的多重变量数据集。它是由大统计学家和遗传学家R.A. Fisher在1936收集整理的数据。


Fisher是统计学的开山鼻祖之一,在1840年左右提出了著名的方差分析 (Analysis of Variance, 简称ANOVA) 。统计学上还有一个概念叫费雪信息(Fisher Information)。虽然Fisher在统计学界地位很高,但是其本人确实在研究遗传学的问题。他还有一个“最伟大的达尔文继承者”的称号。这里就不多讲了。

 

这个iris数据集包含150个数据样本。它可以分为3品种(Setosa,Versicolour,Virginica),每类50个数据,每个数据包含4个属性:花萼(Sepal)长度,花萼宽度,花瓣(Petal)长度,花瓣宽度。


接下来我们就来调用iris数据集


library(datasets)#调入程序包datasets

install.packages("gapminder")#安装程序包gapmidner

library(gapminder)#调用程序包gapmidner

attach(iris)#使用鸢(读渊)尾花数据

 

我们可以看出,iris包括5列:Sepal.Length, Sepal.Width, Petal.Length, Petal.Width, Species


R语言数据科学程序包:tidyverse介绍

 

我们来分析一下iris的数据。比方说,我们想知道每个品种花萼长度的平均值、标准差。

 

如果不用tidyverse,我们需要单独计算每个品种花萼长度的平均值:

 

setosa.mean <- mean(iris$Sepal.Length[iris$Species =="setosa"])

versicolor.mean <- mean(iris$Sepal.Length[iris$Species =="versicolor"])

virginica.mean <- mean(iris$Sepal.Length[iris$Species =="virginica"])

 

输出的结果如下:


R语言数据科学程序包:tidyverse介绍


对于3个平均值,这样做是可以的。但是如果有几十个甚至几百个品种,这样就有点麻烦,甚至无法实现了。

 

我们可以用tidyverse中的两个命令group_by和summarize。第一个group_by命令可以将数据分类。例如,我们可以将iris的数据按照品种分类:


iris.grouped <- group_by(iris, Species)

 

输出结果如下:



这个输出结果和iris数据有些类似,但是又不完全一样。我们得到了一个tibble。它是tidyverse中的新鲜事物,用来替代R语言中传统的data.frame数据结构。我们现在可以先不管它,主要是要看到Groups:Species [3]。这说明已经按照品种分类了。列名称下面的<dbl>和<fct>分别表示数字(numbers)和要素(factors)的数据类型。

 

接下来,我们就要用到神奇的summarize函数了。故名思意,它会输出数据的小结。


iris.means <- summarise(iris.grouped, SL.mean =mean(Sepal.Length))

iris.means



注意:我们并没有让summarize函数分别计算每一个品种。但是tidyverse的神奇之处就在于此,summarize自己知道该如何处理分类数据。


(时间关系,今天先写到这里)