很高兴和你相遇
这里正在记录我的所思所学
订阅免费邮件通讯接收最新内容
首页 归档 想法 通讯 播客 工具 简历 关于

给初学者的 R 语言介绍

几点说明:

  1. 文档由 R Markdown[1] 写成。
  1. 下文是我暂时能想到的一些内容,水平有限,供大家了解,大牛小神都可以出门右拐不用看哈。

  2. 写作初衷:目前在水中科院上海分院这边生物统计学助教,本文及后续一段时间里的 R 相关内容主要是为了供这门课的同学参考,同时也是自我总结的过程。

数据科学重要性

摩尔定律 [2] 告诉我们计算机的计算能力每两年就会翻一倍,这使得数以百万计的计算机生成了大规模数据集。

海量的数据如何处理成了各行各业都需要面对和解决的问题;如何从海量信息中提取有效信息并总结出一般性的规律也值得我们去思考。

数据驱动下产生的这门学科,被我们称为数据科学(Data science),其中涉及到数据的收集、处理、分析和呈现四大方面。

2012 年,哈佛商业评论将** Data Scientist **定义为 21 世纪最性感的职业 ^3

数据科学和我们每个人都不遥远

  • 如何高效准确地从各种各样的 paper 中找到自己需要的信息。

  • 如何快速地将各种信息进行整理并且提炼出自己的看法,以便和老板 talk 的时候侃侃而谈。

  • 如何让自己的实验数据更具有说服力。

  • 如何处理自己辛苦搬砖产生的大量实验数据。


生物统计学重要性

数据科学家是不是 21 世纪最性感的职业我们在这里先不做评论,但是从小你我就都听过:

21 世纪是生命科学的世纪

很多人也是因为这句话而走上了一条不归路。

学生物的人,在属于你们的世纪里从事这个世纪最性感的职业,走上人生巅峰一定指日而待。当然,就算是在生物领域里多接触学习一些和数据科学相关的知识,看起来也是一件很炫酷的事情。

而生物统计学这门课,就是所有实验狗窥探程序猿或者数据科学家生活最简单的一条途径。

学习生物统计学课程

  • 如果稍微长点心,就算不能入门一门编程语言,最起码也可以看见那扇门

  • 如果稍微用点心,以后看到文献中复杂的统计学方法或者炫酷的数据展示方式,也能大概知道它是怎么来的。

  • 如果再多用点心,很可能今后进行大量的实验数据处理时也可以独当一面,放弃用了很多年(其实还是不会用)的 Excel

  • 如果你突然发现自己在数据分析方面很有天赋,那就是前途无量了。


怎样入门数据科学

这里的标题用了数据科学没有用生物统计学,是想说在这门课上接触到的东西,绝不仅仅只能用来分析你手上那些生物学数据。另一方面,标题里用了入门而非掌握或者精通,是想说通过短短的一学期课程,你几乎不可能学好或者掌握一门复杂的学科,最多也就是入门。

至于之后的事情,是从入门到精通还是从入门到放弃,并不在我们目前的讨论范围。

如果想入门数据科学或者在实际工作中运用一些数据科学的知识,你最起码需要从以下几个方面入手。其中,生物统计学这门课给你提供的更多是基础的统计学知识如何正确地处理数据,而我们即将接触的一门编程语言,则完全可以帮助你做好以下很多方面的工作,比如方便快捷地获取数据,正确地处理数据和恰当的展示你的数据。

数学和统计知识

这门课程会从介绍最基本的统计学概念开始,随后会涉及到多种常见的统计学模型和假设检验。
你要做的,就是努力回忆残存的高中和大学数学与统计知识,争取理解各种常见的统计学名词和概念究竟是什么意思。

了解自己的研究领域

没有背景的数据分析是没有意义的,生物学尤其如此。一定不要做了一堆实验得到一堆数据然后分析一通发现不知道自己要说什么。充分了解自己的研究领域是必要的。

合理地获取数据

通过哪些途径和手段可以获取已有的公共数据是你需要考虑的问题。其实,很多时候我们都是在做重复的工作,大量的公共数据很有可能就足够回答你的问题。但是,你并不知道它在哪或者该怎么用。
学会如何合理地设计自己的实验也非常重要。实验盲目做太多,数据重复没意义而且关键是累;实验设计的不合理,数据再怎么分析也没意义。

正确地处理数据

你要的数据需要用什么实验来做,得到的数据又应该用什么方法来处理。你的数据背景是否干净,你的实验数据是否需要进行预处理,你用的统计模型是否合适。有时候万年 t-test 很难有太强的说服力。

恰当地展示数据

如果你有了类似于 DNA 双螺旋的发现,你的实验结果再怎么展示问题都不大。但更多时候,你的实验结果并不能让所有人兴奋或者信服。这时,如何把自己的实验数据更好地展示给别人,从而让别人更容易理解进而愿意接受你的观点就显得非常重要了。

同样的一套数据,有时候用不同的方法展示效果会有巨大的差别。保证数据真实性的情况下,让你的图看起来更加漂亮总没有坏处。毕竟,我们对任何东西的第一印象永远是颜值。


数据科学常用语言

这一部分,我会罗列若干种非自然语言,每一个在数据科学中都有广泛的应用。这里所谓的语言,很多也是开发环境或者软件,你只需要有个印象。我的目的是想在后面说为什么从学 R 开始。更具体的内容可以参考这篇文章 《数据科学家的成长之路 [译]》

Excel

没错,我把 Excel 作为一门语言放在这里了,你发现自己竟然掌握了一门数据科学常用语言,而且用了那么多年。

你可能会按列求和、查找替换、求方差标准差,甚至还会分列。但是,你会用几个 Excel 常用函数呢,比如最基本的 VLOOKUP/SUMIF/COUNTIF;你能熟练的使用透视表么。我们就不提宏和 VBA 了,其实这也是把 Excel 算做一门语言的原因。

MATLAB

MATLAB 是一款鼎鼎大名的数据分析软件,如果你偶尔听说过各种类型的建模比赛,那么多数少不了 MATLAB 的身影。如果你日常的工作涉及到图像处理或者各种信号处理,学它是没错的。除此以外,如果你打开过 MATLAB 的软件,你会发现它类似于 Excel 可视化的交互可以让人很容易上手而无需面对看起来吓人的命令行。作为一款商业数据分析软件,它最大的特点就是贵。

Python

Python 是一门非常强大且用途极其广泛的编程语言,在数据科学界也受到很多人的喜爱。各种各样的库可以满足数据科学不同方面的各种需求:对于神经网络,有 Theano 和 Tensorflow;面向机器学习有 scikit-learn;面向数据分析有 NumPy 和 Pandas。而且,据绝大多数人反馈,他可能是最容易入门的语言之一,而且它是免费的开源语言。你不需要因为使用它而支付任何费用。

如果你是一个井井有条的强迫症患者,Python 很适合你,它会强制使用者在代码中留出正确的空白和缩进。另外,如果你第一眼就知道 Python 该怎么读,说明你们有缘,不妨去多了解一下。

SQL

谈到数据库的时候,基本上是逃不掉 SQL 的。不过,如果不做数据库或者网站开发,它对你基本也没太大用处。而且学术届或者说生物圈的人,其实很少在日常中使用 SQL 对数据进行增删改查和统计。而其他大多数和大数据相关的领域和行业,学会 SQL 是必须的。

R

记住,R 语言是统计学家为了统计学家进行统计学工作而开发的一种语言。这看起来和程序猿没什么关系,是不是瞬间亲切了很多。

和 Python 一样,R 也是免费开源的。类似于 Python 中的库,R 里各种各样的包则可以满足你对于统计学的一切幻想。和 Python 相比,它还有一个很大的优点,就是你不会读错它的名字。


为什么要学习 R

R 的诞生

1992 年,肉丝(Ross Ihaka)和萝卜特(Robert Gentleman)两个人在 S 语言(贝尔实验室开发的一种统计用编程语言)的基础上开始构思一种新的用于统计学分析的开源语言,直到 1995 年第一个版本正式发布(和各位年龄相仿)[3]。因为他们名字的第一个字母都是 R,所以这门语言就被叫做 R。这两个人都是统计学教授出身,再加上 R 语言的生父 S 语言,所以** R 语言在统计学方面有着纯正的血统**!

如果你平时的工作会涉及到统计学,那么接触 R 语言实在是太正常不过了。

另外,关于 R 语言的开发者,看名字(Ross 和 Robert)部分人以为是伉俪,其实就是两个大老爷们。如图所示

R 的发展

作为开源软件的 R 能够迅速发展,很大程度上取决于其活跃的社区。学习 R,很大程度上也是学习各种 R 包的使用。截止目前(2017 年 2 月 25 日),CRAN(Comprehensive R Archive Network)[4] 上已经有 10162 个可以获取的 R 扩展包,内容涉及各行各业,可以适用于各种复杂的统计。各地的 CRAN 镜像都是 R 网站的备份文件,内容完全一样,你可以选择离自己最近的去访问。

R 的特长

在 R 官网有这样几句介绍

R provides a wide variety of statistical (linear and nonlinear modelling, classical statistical tests, time-series analysis, classification, clustering, …) and graphical techniques, and is highly extensible.

One of R’s strengths is the ease with which well-designed publication-quality plots can be produced, including mathematical symbols and formulae where needed.

  • 因为 R 语言本身为统计而生,所以你能想到的所有统计相关的工作,R 都可以非常简洁的用几行命令(甚至 1 行命令)帮你完成。

  • R 高度的可扩展性正是体现在它那 1 万多个包上,你想做的几乎所有事情都可以用现有的 R 包来辅助完成(当然,有些工作即便能完成但也不适合)。

  • R 另一个杀手锏就是其强大的绘图功能,正如上面的英文介绍所言,R 可以画图,画各种各样的图,画各种各样高逼格的图,画各种各样高逼格可以直接出版的图。

  • 完善的统计学功能再加上强大的绘图功能,就是你学习的最大理由。

  • 对于生物相关的工作者而言,他们还有一个巨大的福利就是 Bioconductor[5],这里面的一千多个 R 包都是用来解决生物(信息)问题的。


R 应用示例

在这一部分,仅仅是给展示几个用 R 可以轻松完成的相对有趣的工作。
安装对应包后应该可以直接运行

示例 1 ggplot2 画图

#第一次使用,需要安装相应的包
#以后只需要调用即可
#install.packages("ggplot2")
library("ggplot2")
theta <- seq(0,24*pi, len=2000)
radius <- exp(cos(theta)) - 2*cos(4*theta) + sin(theta/12)^5
dd <- data.frame(x=radius*sin(theta), y=radius*cos(theta))
ggplot(dd, aes(x, y))+geom_path()+xlab("")+ylab("")

效果展示

示例 2 词频分析及词云

# install.packages("wordcloud2")
library(wordcloud2)
wordcloud2(demoFreqC, size = 0.7, shape = 'diamond')

效果展示

示例 3 查看我国各地空气质量 [6]

#install.packages("rvest")
#install.packages("leafletCN")
#install.packages("rgeos")
Sys.setlocale("LC_CTYPE", "eng")
library(rvest)
library(leafletCN)
library(rgeos)
doc = read_html("http://www.pm25s.com/cn/rank/")
cities = doc %>% html_nodes(".cityrank a") %>%
  html_text()
cities = iconv(cities, "UTF-8", "UTF-8")
AQI = doc %>% html_nodes("span[class^='lv']") %>%
  html_text() %>% .[c(F,F,T)] %>% as.numeric
dat = data.frame(city = cities, AQI = AQI)
geojsonMap(dat, "city",
           popup =  paste0(dat$city,":",dat$AQI),
           palette = "Reds", legendTitle = "AQI")

效果展示


如何尝试入门 R 语言

一开始这一部分的标题是 如何学好 R 语言,但是写这部分东西需要很强的功底,我知道自己根本谈不上学好。
后来又打算叫 如何入门 R 语言,但是每个人能付出的精力和能力又各不相同,而且因为平时我用 R 的地方不太多,只是最近担任助教才又开始继续学习。为了避免看了文章却没入门的朋友来吐槽,机智如我,干脆就叫如何尝试入门 R 语言

学习路线

看到这篇文章的一部分人很可能是我担任助教这门课(生物统计学)的同学,而另一部分人很可能与生物信息学相关。

为了通过考试

如果你是前者而且仅仅是为了通过最后的考试,我建议你只需要在每节理论课后认真理解老师上课的内容,在每节讨论课后拿出两三天消化我们作业题中用到的 R 语言知识点就可以了。

  • 大致了解一下 R 语言是什么,能干什么用(看完这篇文章,这部分就可以了)。
  • 学习如何在 R 的官网下载 R,如何在自己的电脑安装 R 并成功运行。
  • 学习如何安装 Rstudio,并且了解其基本的用法(这步可省略)。
  • 学习如何查看 R 帮助文档(这步很重要)。
  • 学习如何将作业中的数据(作业中通常是 txt 或者 csv 格式)正确地导入 R。
  • 了解 R 语言中的常见变量。
  • 学习 R 语言一些最基本的命令,如安装包、调用包、读入写入文件、构造矩阵和基础绘图等。
  • 学习在 R 中如何使用(课上提到的)统计学相关函数,了解其参数的含义。
  • 能够独立完成最后几次作业和上一年的期末考试题。

生物信息学相关

  • 了解 R 语言在生物信息学领域的应用。
  • 理解 R 语言中的各种变量。
  • 学习如何创建数据集、清洗数据和使用常见的统计分析方法。
  • 能够对数据进行高级操作,对数据进行转换。
  • 学习 R 语言的中高级绘图方法,能够使用 ggplot2。
  • 学习 R 中高级统计分析方法,如聚类、主成分分析和线性回归等。
  • 学习并熟练使用自己研究领域相关的 R 包(通过 bioconductor)。

个人感觉,如果能完成上述几条学习路线,那么 R 语言就算入门了。

入门的标准是什么呢?我想就是给你一份数据让你处理,你脑子里的第一反应是可不可用 R 做;如果给你一个任务,你能上手尝试用 R 去解决。

参考资料

这里罗列部分在尝试入门的过程中,可能会有用的资料。

在线资料

R 语言官网
R 语言官方文档
RStudio 官网
Bioconductor 官网
R 语言资料库
R 函数和包的在线帮助文档
统计之都社区

中文书籍

《R 语言编程艺术》
《R 语言实战》
《统计建模与 R 软件》
《ggplot2: 数据分析与图形艺术》


本文作者:思考问题的熊

版权声明:本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。

如果你对这篇文章感兴趣,欢迎通过邮箱或者微信订阅我的 「熊言熊语」会员通讯,我将第一时间与你分享肿瘤生物医药领域最新行业研究进展和我的所思所学所想点此链接即可进行免费订阅。


  1. R markdown 官网网站 http://rmarkdown.rstudio.com ↩︎

  2. 摩尔定律 https://en.wikipedia.org/wiki/Moore%27s_law ↩︎

  3. R language https://wiki2.org/en/R_(programming_language) ↩︎

  4. CRAN 官网 https://cran.r-project.org/ ↩︎

  5. Bioconductor 官网 https://www.bioconductor.org/ ↩︎

  6. 示例 3 来源:http://langdawei.com/2017/01/07/aqi.html ↩︎


· 分享链接 https://kaopubear.top/blog/2017-03-06-rintro2sibs/