随着日常生活中数据应用变得越来越普遍,我们需要新的和更好的工具来应对这个趋势。在传统情况下,处理数据的方式一般有两种:一是简单轻便的,使用像Excel或SPSS这样的工具做定量分析;二是复杂繁重的,利用C++这样的工具进行高性能分析。随着个人计算机性能的提高,产生了一种既交互又强健有效的折中方法。个人在自己的计算机上以探索性的方式所做的分析,很快就会转变为传递到支撑高级业务流程的服务器的工作。这便是R、Python和其他脚本语言的领域。
R语言是由奥克兰大学的Robert Gentleman教授和Ross Ihaka教授于1993年开发的,它源于贝尔实验室John Chambers所开发的S语言。这是一种高级语言,最初的目的是进行交互式运算,即使用者输入一个命令得到一个结果,然后再输入下一个命令。现在它已经发展成为一种可以嵌入系统和解决复杂问题的语言。
除了转换数据和分析数据之外,R语言还能很方便地产生令人惊喜的图形和报告。它现在已经成为一个完整的体系,可以用于数据分析、提取和转换、模型拟合、描述推断、预测,绘图以及给出报告结果。
自21世纪头10年后期以来,R语言的普及就像飞升的火箭一路飙升,它已经走出学术界,进入了银行业、销售业、制药业、政界、基因组学等其他许多领域。R语言的很多新用户以前都使用一些低级编译语言程序,比如C++和其他的统计包(例如SAS或SPSS),还有一些用户之前使用“800磅重的大猩猩”—Excel。这时期扩展软件包的数量飙升,这些软件包是预先写好的代码库,用于扩展R的功能。
尽管R有时会让初学者感到畏惧,特别是那些没有编程经验的人,但是我发现用编程分析来代替鼠标操作,学习过程很快就变得容易很多,而且更方便、更可靠。这正是我的目标:让学习变得更快、更容易。
本书内容的安排和布局是按照我在研究生院学习R时希望能够被教导的方式来设计的。综合来说,本书的内容是结合我在哥伦比亚大学所教的一门数据科学课程所形成的。这并不意味着覆盖R的每一个细枝末节,而在于用20%的功能去完成80%的工作。
第2版更新了许多第1版出版之后开发的工具。主要新增加的有:Tidyverse中做数据处理的包dplyr、tidyr和purrr,模型拟合中的boosted tree,以及模型参数调优的caret包。knitr章节拆分成两章,分别介绍knitr包和LaTeX、RMarkdown。它们在过去几年得到了显著的改进,包括创建允许JavaScript和文档混用的htmlwidgets。接着用整章介绍Shiny,它被开发用来在R语言中创建交互式Web dashboard。编写R语言包的章节更新了代码测试部分。读取数据的章节更新了部分读取数据的新方法,包括readr、readxl和jsonlite包。这些更新的内容都是R语言社区实践的结果。本书的内容包括如下章节。
第1章涉及从哪里下载R,如何安装不同的操作系统以及32位和64位版本的问题。该章还给出了安装R的路径的一些建议。
第2章涵盖如何整合RStudio和Git,比如RStudio的个人定制和导航。
第3章讲解如何定位、安装和加载R语言包。
第4章介绍R处理数学问题:变量类型(如numeric、character、Date)、向量、调用函数等,也介绍了函数调用和查看函数文档。
第5章涵盖常用数据结构,数据框(dataframe)、矩阵和列表。
第6章涉及读取数据到R中。在分析数据之前,需要先将数据读取到R中,有多种方式可以获取数据,包括从CSV和数据库读取。
第7章介绍直观的统计图形。图形是数据分析和交流结果的关键部分。R语言能用来绘制漂亮的图形。该章将详细介绍基本图形和ggplot2。
第8章涉及通过用户自定义函数使可重复分析变得更容易。该章讨论了结构、参数和返回规则。
第9章介绍流程控制,包括if、ifelse和复杂的控制流程。
第10章介绍R语言的循环迭代,包括for和while循环。通常推荐使用这些结构,所以需要了解清楚。
第11章介绍一种比循环更好的方式:向量化。向量化并没有去循环遍历数据,而是一次性操作所有元素。这种高效的操作方式被用在plyr包和apply函数中。
第12章涉及高效的分组操作:dplyr,介绍下一代分组操作。这些新包已通过dataframes进行了优化,并从用于使高效代码更易读的管道获益。
第13章介绍数据迭代,用purrr包来迭代列表和向量。
第14章介绍数据集组合,通过叠加或者连接(join)的方式合并多个数据集,改变数据的形状。除了像rbind、cbind和merge函数这些基本工具外,plyr和reshape2包提供了很好的函数来完成这些功能。
第15章介绍使用dplyr和tidyr包代替plyr和reshape2包做数据组合、重塑和连接。
第16章介绍字符串操作。大部分人不会把字符数据和统计相联系,但它是一种重要的数据形式。R语言提供各种工具来处理字符串,包括将它们进行组合以提取信息。该章还详细介绍了正则表达式。
第17章涵盖概率分布,包括正态分布、二项分布和泊松分布。
第18章介绍统计学的一些基本知识,比如均值、标准差和t检验。
第19章讲解线性模型。线性模型是统计中最强大和最常用的工具。
第20章涉及广义线性模型,包括线性模型的扩展:逻辑回归和泊松回归。该章还覆盖了生存分析。
第21章讲解评估模型质量和变量选择的方法,比如残差、AIC准则、交叉验证、bootst