简介
我之前预告过的 R 语言新书,起名为《R语言编程—基于tidyverse》,本书的目的是为了在国内推广 R 语言和 R 语言最新技术。本书非常适合新手 R 语言入门,老手 R 知识汰旧换新。
本书的 Github[1]、 Gitee[2] 地址(暂时只上传部分已完成的 pdf 版,可前去下载)。
R
语言是专业的统计编程语言,具有顶尖水准的绘图功能,且开源免费有着丰富的扩展包和活跃的社区。R语言这些优质的特性,使得它始终在数据统计分析领域的 SAS、Stata、SPSS、Python、Matlab
等同类软件中占据领先地位。
R
语言曾经最为人们津津乐道的是Hadley大神开发的 ggplot2
包,泛函式图层化语法赋予了绘图一种“优雅” 美。近年来,R
语言在国外蓬勃发展,ggplot2
这个“点”在2016年以来,已被Hadley 大神“连成线、张成面、形成体(系)”,这就是 tidyverse
包,集
数据导入—数据清洗— 数据操作— 数据可视化—数据建模—可重现与交互报告
整个数据科学流程于一身,而且是以“现代的”、“优雅的” 方式,以管道式、泛函式编程技术实现。不夸张地说,tidyverse
操作数据比 pandas
更加好用、易用!再加上可视化本来就是 R
所擅长,可以说 R
在数据科学领域好于 Python
。
这种整洁、优雅的 tidy-
流,又带动了 R
语言在很多研究领域涌现出了一系列tidy-
风格的包:tidymodels
(统计与机器学习)、mlr3verse
(机器学习)、rstatix
(应用统计) 、tidybayes
(贝叶斯模型)、tidyquant
(金融) 、fpp3
(时间序列)、tidytext
(文本挖掘)、tidygraph
(网络图)、sf
(空间数据分析)、tidybulk
(生信)、sparklyr
(大数据)等。
其中机器学习/数据挖掘领域,曾经的 R
靠单打独斗的包,如今也正在从整合技术上迎头赶上 Python
,出现了 tidy-
风格的 tidymodels
包,以及真正最新理念、最新技术、最新一代的机器学习 mlr3verse
包,它比 sklearn
还先进,基于 R6
类面向对象,data.table
神速数据底层,开创性的 Graph-
流模式(图/网络流,区别于通常的线性流)。
然而,我发现这些近几年出现的 R
语言新技术,在国内很少有人问津,绝大多数 R
语言的教师、教材、博客文章、R
学习者仍在沿用那些过时的、晦涩的 R
语法,对 R
语言的印象停留在 5 年前:语法晦涩难懂、速度慢,做统计分析和绘图还行,机器学习只有单独算法的包,做不了深度学习、大数据、工业部署……
有感于此,我想写一本用最新 R
技术,方便新手真正快速入门 R
语言编程的书,来为 R
语言正名,以在国内推广已如此优秀好用的 R
语言。
我是一名大学数学教师,热爱编程、热爱R
语言,奉行终生学习理念,一直喜欢跟踪和学习新知识、新技能。我对编程和 R
语言有一些独到的理解体会,因为我觉得数学语言与编程语言是相通的,都是用语法元素来表达和解决问题,我想把这些理解体会用符合国人的语言习惯表达出来。
希望我这本书,如果有幸进入了您的法眼,能让您学到正确的编程思想,学到最新的 R
语言编程知识和编程思维,能真正让您完成 R
语言入门或 R
知识汰旧换新。
R
语言基础,想要系统地学习 R
语言编程,特别是想要用最新 R
技术入门 R
R
语言基础,想升级 R
语言编程技术到最新R
作为工具,将来从事统计分析、数据挖掘、机器学习,特别是想使用最新机器学习包:tidymodels
, mlr3verse
R
语言及相关课程的学生、教师、科研人员,特别是将来想要在时间序列、金融、空间数据分析等领域,使用最新包 fpp3
, tidyquant
, sf
等1. 新
本书绝大部分内容都是参阅最新版本R包的相关文档,很少参阅书籍(而且尽量参阅最新的在线版本)。本书全面采用最新的R语言技术编写,特别是 tidyverse
“整洁流、管道流、泛函流”数据科学。
2. 真正融入编程思维
很多国内 R
语言编程书只是罗列堆砌编程语法,国外有不少优秀的 R
语言编程书,但翻译版往往就只是 “直译”,只把表面意思用生硬的汉语表达出来,很难让初学者学透它们。解决办法就是真正融入编程思维:编程思想引导,编程语法到底是怎么回事,应该用于何处、怎么使用。本书前言和第一章融入向量化编程与函数式编程思维;第二章主要融入数据思维。
我写东西的特点就是,每个知识点都搜集很多相关最新资料,自己先学得透彻明白,再把自己的理解用最通俗易懂语言表达出来。看过我知乎专栏文章的人,应当对此有所体会。
3. 精心准备实例
编程语法讲透彻还不够,必须配以合适的实例来演示,所以也请读者一定要将编程语法讲解与配套实例结合起来阅读,比起实例代码调试通过,更重要的是借助实例代码理解透彻该编程语法,所包含的编程思维。本书后半部分是R语言在应用统计、探索性数据分析、文档沟通方面的应用,所配案例力求能让读者上手使用。
4. 程序代码优雅、简洁、高效
本书程序代码都是基于最新的 tidyverse
,自然就很优雅;简洁高效是能用向量化编程就不用逐元素,能用泛函式编程,就不用 for
循环。
可以说,读者如果用我这本书入门 R
语言,或者更新您的 R
知识,就会自动跳过写低级啰嗦代码的阶段,直接进入写让别人羡慕的 “高手级” 代码的行列。
本书的结构是围绕如何学习 R
语言编程来展开的,全书共分为 6 章。
冯国双老师在《白话统计》序言中写道:
一本书如果没有作者自己的观点,而只是知识的堆叠,那么这类书是没有太大价值的.
尤其在当前网络发达的时代,几乎任何概念和知识点都可以从网络上查到。但有一点您很难查到,对于编程书来说,那就是编程思维。本书最大的特点之一就是无论是讲编程思想还是讲编程语法知识点,都把编程思维融入进去。
很多人学编程始终难以真正入门:自己写代码;学习编程语言在其编程思想的指导下才能事半功倍。本书的前言就先来谈编程思维,包括如何理解编程语言,用数学建模的思维引领读者跨越如何从实际问题到自己写代码解决问题,以及R
语言的编程思想:面向函数、面向对象、面向向量。
第一:讲述 R
语言编程的基本语法
同时渗透向量化编程、函数式编程思维。这些语法在其它编程语言中也是相通的,包括搭建 R
语言环境,常用数据结构(存放数据的容器) :向量、矩阵、数据框、因子、字符串(及正则表达式) 、日期时间,分支结构,循环结构,自定义函数。这些基本语法是您写 R
代码的基本元素,学透它们非常重要,只有学透它们才能将其任意组合、恰当使用,以写出各种各样的解决具体问题的 R
代码。同样是讲 R
基本语法,本书不同之处在于,用tidyverse
中更一致、更好用的相应包加以代替:用tibble
代替data.frame
、用forcats
包处理因子,用stringr
讲字符串 (及正则表达式)、用lubridate
包讲日期时间、循环结构中用purrr
包的map_*
函数代替apply
系列函数,其中特别讲到编程技术:泛函式编程。
第二章:正式进入tidyverse
核心部分:数据操作,侧重讲解数据思维
先简单介绍 tidyverse
包以及编程技术之管道操作,接着围绕各种常用数据操作展开,包括数据读写(各种常见数据文件的读写及批量读写、R
连接数据库、中文编码问题及解决办法),数据连接(数据按行/列拼接、SQL
数据库连接),数据重塑 (“脏”数据变“整洁”数据,长宽表转换、拆分与合并列),数据操作 (选择列、筛选行、对行排序、修改列、分组汇总)、其它数据操作 (按行汇总、窗口函数、滑窗迭代、整洁计算),以及data.table
基本使用 (常用数据操作的dplyr
语法与data.table
语法对照)。tidyverse
最大的优势就是以“管道流”、“整洁语法”操作数据,这些语法真正让数据操作从R base
的晦涩难记难用,到tidyverse
的“一致”、“整洁”好记好用,比Python
的 pandas
还好用!关键是用一次就能记住!为了最大程度地降低理解负担,本书特意选用中文的学生成绩数据作为演示数据,让读者只关心语法就好。另外,tidyverse
的这些数据操作,实际上已经在语法层面涵盖了日常Excel
数据操作、SQL
数据库操作,活用tidyverse
上述数据操作语法已经可以胜任这些工作。
第三章:可视化与建模技术
可视化只介绍最流行的可视化包ggplot2
,先从 ggplot2
的图层化绘图语法开始,依次介绍ggplot2
的九大部件:数据、映射、几何对象、标度、统计变换、坐标系、分面、主题、输出;接着介绍图形从功能上的分类:类别比较图、数据关系图、数据分布图、时间序列图、局部整体图、地理空间图,对每一类图形分别选择其中代表性的用实例加以演示。建模技术包括三个内容:
(1) 用broom
包提取统计模型结果为整洁数据框,方便后续访问和使用;
(2) modelr
包中一些有用的辅助建模函数;
(3) 批量建模技术,比如要对全世界 170 多个国家的数据分别建立模型、提取模型结果,当然这可以用for
循环实现,但这里采用更加优雅的map_*
实现,以及“行化迭代”实现。
第四章,应用统计
R语言是专业的统计分析软件,广泛应用于统计分析与计算。本章将从四个方面展开:
(1) 描述性统计,介绍适合描述不同数据的统计量、统计图、列联表;
(2) 参数估计,主要介绍点估计与区间估计,包括Bootstrap
法估计置信区间,以及常用的参数估计方法:最小二乘估计、最大似然估计;
(3) 假设检验,将介绍假设检验原理,基于理论的假设检验:以方差分析、卡方检验为例,并用整洁的rstatix
包实现,以及基于重排的假设检验:以 t 检验为例,用最新的infer
包实现;
(4) 回归分析,从线性回归原理、回归诊断,借助具体实例讲解多元线性回归的整个过程,并介绍广泛应用于机器学习的梯度下降法,以及广义线性模型原理。
第五章,探索性数据分析
主要讨论三方面内容:
(1) 数据清洗,包括缺失值探索与处理、异常值识别与处理;
(2) 特征工程,包括特征缩放(标准化/归一化/行规范化/数据平滑)、特征变换(非线性特征/正态性变换/连续变量离散化)、基于PCA
的特征降维;
(3) 探索变量间的关系,包括分类变量之间、分类变量与连续变量、连续变量之间的关系。
第六章,文档沟通
将讨论如何进行可重复研究,用R markdown
家族生成各种文档,介绍 R markdown
的基本使用,R
与 Latex
交互编写期刊论文/幻灯片/书籍、R
与Git/Github
交互进行版本控制、用R Shiny
轻松制作交互网络应用程序(Web app)以及开发和发布R
包的最新工作流程。
附录
部分是正文内容的补充和扩展,将分别介绍R6
类面向对象编程、实现Excel
中的VLOOKUP
与透视表、R
网络爬虫、R
高性能计算、R
最新机器学习框架:mlr3verse, tidymodels
.
大家可以根据自己的需求选择阅读侧重点,不过我还是希望您能够按照顺序完整地阅读,这样才能让您彻底地更新一遍您的
R
知识,避免R base
与tidyverse
混着用,因为二者在写R
代码上不是一个思维,强行搭在一起处处透着别扭,且事倍功半。
本书使用最新版本的R语言4.1.1
和RStudio 1.4
,主要使用的R
包是tidyverse 1.3.1
系列。
第01篇 前言Ⅰ—谈如何学习编程语言[3]
第02篇 前言Ⅱ—R语言简介[4]
第03篇 前言Ⅲ—R语言编程思想[5]
第04篇 1.1 搭建 R 环境及常用操作[6]
第05篇 1.2 数据结构Ⅰ:向量、矩阵、多维数组[7]
第06篇 1.3 数据结构Ⅱ:列表、数据框、因子[8]
第07篇 1.4 数据结构Ⅲ:字符串、日期时间[9]
第08篇 1.5 正则表达式[10]
第09篇 1.6 控制结构[11]
第10篇 1.7 自定义函数[12]
第11篇 2.1 tidyverse简介与管道[13]
第12篇 2.2 数据读写[14]
第13篇 2.3 数据连接[15]
第14篇 2.4 数据重塑[16]
第15 篇 2.5 数据操作[17]
第16篇 2.6 其它数据操作[18]
第17篇 2.7 数据处理神器:data.table包[19]
第18篇 3.1 ggplot2 基础语法[20]
第19篇 3.2 ggplot2 图形示例[21]
第20篇 3.3 统计建模技术[22]
本书已与人民邮电出版社签订出版合同,有纸质书、电子书,预计 2021 年年底能与读者见面。也因此,后续内容不再全文更新,出版环境使然,请大家理解!
本文转自知乎「《R语言编程—基于tidyverse》新书信息汇总」——张敬信[23]
[1]
Github: https://link.zhihu.com/?target=https%3A//github.com/zhjx19/introR
[2]
Gitee: https://link.zhihu.com/?target=https%3A//github.com/zhjx19/introR
[3]
前言Ⅰ—谈如何学习编程语言: https://zhuanlan.zhihu.com/p/198196432
[4]
前言Ⅱ—R语言简介: https://zhuanlan.zhihu.com/p/198860434
[5]
前言Ⅲ—R语言编程思想: https://zhuanlan.zhihu.com/p/198869563
[6]
1.1 搭建 R 环境及常用操作: https://zhuanlan.zhihu.com/p/201425580
[7]
1.2 数据结构Ⅰ:向量、矩阵、多维数组: https://zhuanlan.zhihu.com/p/201474611
[8]
1.3 数据结构Ⅱ:列表、数据框、因子: https://zhuanlan.zhihu.com/p/203738481
[9]
1.4 数据结构Ⅲ:字符串、日期时间: https://zhuanlan.zhihu.com/p/203775397
[10]
1.5 正则表达式: https://zhuanlan.zhihu.com/p/219681623
[11]
1.6 控制结构: https://zhuanlan.zhihu.com/p/226118031
[12]
1.7 自定义函数: https://zhuanlan.zhihu.com/p/226165409
[13]
2.1 tidyverse简介与管道: https://zhuanlan.zhihu.com/p/243376822
[14]
2.2 数据读写: https://zhuanlan.zhihu.com/p/256284851
[15]
2.3 数据连接: https://zhuanlan.zhihu.com/p/259314045
[16]
2.4 数据重塑: https://zhuanlan.zhihu.com/p/262051689
[17]
2.5 数据操作: https://zhuanlan.zhihu.com/p/262230298
[18]
2.6 其它数据操作: https://zhuanlan.zhihu.com/p/268515699
[19]
2.7 数据处理神器:data.table包: https://zhuanlan.zhihu.com/p/343113981
[20]
3.1 ggplot2 基础语法: https://zhuanlan.zhihu.com/p/344267245
[21]
3.2 ggplot2 图形示例: https://zhuanlan.zhihu.com/p/346084004
[22]
3.3 统计建模技术: https://zhuanlan.zhihu.com/p/346700620
[23]
知乎「《R语言编程—基于tidyverse》新书信息汇总」——张敬信: https://zhuanlan.zhihu.com/p/198185888?utm_source=wechat_session&utm_medium=social&utm_oi=814968884565282816