forked from perlatex/R_for_Data_Science
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.Rmd
281 lines (216 loc) · 14.6 KB
/
index.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
---
title: "数据科学中的 R 语言"
author: "王敏杰"
date: "`r Sys.Date()`"
site: bookdown::bookdown_site
knit: bookdown::render_book
output: bookdown::bs4_book
documentclass: book
bibliography: [references.bib]
biblio-style: apalike
link-citations: yes
github-repo: perlatex/R4DS-book
url: "https://bookdown.org/wangminjie/R4DS/"
#cover-image: images/cover.jpg
description: "This book is an overview of how practitioners can acquire, wrangle, visualize, and model data with the R and Stan."
---
```{r setup, include=FALSE}
options(digits = 4,
dplyr.print_min = 6,
dplyr.print_max = 6,
htmltools.dir.version = FALSE,
formatR.indent = 2,
width = 55
)
knitr::opts_chunk$set(
echo = TRUE,
warning = FALSE,
message = FALSE,
fig.width = 6,
fig.height = 4,
fig.showtext = TRUE
)
```
# 前言 {.unnumbered}
你好,这里是四川师范大学研究生公选课《数据科学中的R语言》的课程内容。R语言是统计编程的第一语言,近几年Tidyverse的推出大大降低了R语言的学习难度。Tidyverse是一系列R包的集合,包含了dplyr、ggplot2、tidyr、stringr等,从数据导入预处理,再到高级转化、可视化、建模和展示。因为其代码清晰可读的编程风格,得到越来越多人的喜爱。考虑到大家来自不同的学院,有着不同的学科背景,因此讲授的内容不会太深奥(要有信心喔)。
比如在课程中以下内容就不会出现
$$
f(x)=\frac{1}{\sqrt{2 \pi}} e^{-\frac{1}{2} x^{2}}
$$
而出现更多的是
```{r index-1, eval = FALSE}
library(tidyverse)
summary_monthly_temp <- weather %>%
group_by(month) %>%
summarize(mean = mean(temp),
std_dev = sd(temp))
```
书中大量使用形象化的比喻,从计算机科学的角度来讲,这些比喻是不严谨的,但是可以帮助大家理解其中概念,激励动手操作,提升信心。因为我们的目的,不是把大家培养成程序员,而是让大家不害怕编程。
这里分享一个我的小故事吧。工作以后,早上起来都很匆忙,早餐一般不会亲自动手,大多是头一天买好的面包和牛奶。有时也会回想小时候妈妈做的早饭的味道,决定自己煮个荷包蛋,但我每次把蛋放入水中的时候,蛋就散了,尝试把火开小点,或者水放多点,几次努力都不成功,最后都变成了蛋花汤了,我逐渐也就没有了兴趣。后来,有一次出差,在路边吃早餐,发现早餐摊有卖荷包蛋,我就去问老板娘,怎么样煮,荷包蛋不散呢。老板娘告诉我,先在水里放点糖,然后再把蛋放进去。我回家后尝试,真的成功了...
联想到我们的学习,困扰我们很久的东西,或许并不复杂,可能只需要一个小小的技巧,就解决了,只是我们还没遇到教我们煮荷包蛋的人,可能大神 Hadley Wickham 就是教我们煮荷包蛋的人吧。
言归正传,在**跟进**本课程的同时,我强烈推荐大家阅读Hadley Wickham的
[r4ds](https://r4ds.had.co.nz/)这本书 [@Wickham2017]。作者可是2019年8月刚刚获得考普斯总统奖(被誉为统计学的诺贝尔奖)的大神喔,点击[这里](http://hadley.nz/)可以看他照片。
```{r index-2, echo = FALSE, out.width = "35%"}
knitr::include_graphics("images/rbook1.png")
```
## 关于课程 {-}
1、课程安排是这样的,每个章节研究的内容都是彼此独立的,大家可以单独阅读每章及运行代码。 每一章可能会附有作业,你可以在第 \@ref(answers) 章参考答案。
- 基础篇
- 第 \@ref(baseR-intro-ds) 章介绍数据科学基础
- 第 \@ref(baseR-install) 章介绍安装与环境配置
- 第 \@ref(baseR-objects) 章介绍R语言中一切都是对象
- 第 \@ref(baseR-vectors) 章介绍向量
- 第 \@ref(baseR-data-structure) 章介绍R语言数据结构
- 第 \@ref(baseR-operators) 章介绍运算符及向量运算
- 第 \@ref(baseR-functions) 章介绍R语言中的函数
- 第 \@ref(baseR-functions-adv) 章介绍函数的应用
- 第 \@ref(baseR-subsetting) 章介绍R语言中的子集选取
- tidyverse篇
- 第 \@ref(tidyverse-rmarkdown) 章介绍可重复性文档
- 第 \@ref(tidyverse-readr) 章介绍数据读入
- 第 \@ref(tidyverse-dplyr) 章介绍数据处理
- 第 \@ref(tidyverse-dplyr-apply) 章介绍dplyr的应用
- 第 \@ref(tidyverse-ggplot2-aes) 章介绍数据可视化
- 第 \@ref(tidyverse-tidyr) 章介绍数据规整1
- 第 \@ref(tidyverse-tidyr2) 章介绍数据规整2
- 第 \@ref(tidyverse-stringr) 章介绍字符串处理
- 第 \@ref(tidyverse-forcats) 章介绍因子类型数据
- 第 \@ref(tidyverse-tibble) 章介绍简单数据框
- 第 \@ref(tidyverse-purrr) 章介绍函数式编程1
- 第 \@ref(tidyverse-purrr-adv) 章介绍函数式编程2
- 第 \@ref(tidyverse-ggplot2-geom) 章ggplot2几何形状
- 第 \@ref(tidyverse-ggplot2-scales) 章ggplot2的标度
- 第 \@ref(tidyverse-ggplot2-theme) 章ggplot2的主题
- 第 \@ref(tidyverse-ggplot2-guides) 章ggplot2的图例
- 第 \@ref(tidyverse-ggplot2-customize) 章ggplot2扩展内容
- 第 \@ref(tidyverse-ggplot2-stat-layer) 章ggplot2统计图层
- 第 \@ref(tidyverse-ggplot2-from-layer-to-geom) 章ggplot2从图层到几何形状
- 第 \@ref(tidyverse-ggplot2-colors) 章ggplot2数据可视化中的配色
- 第 \@ref(tidyverse-ggplot2-override-aes) 章ggplot2如何控制图例的外观
- 第 \@ref(tidyverse-ggplot2-aes-eval) 章ggplot2中的延迟映射
- 第 \@ref(tidyverse-ggplot2-academic) 章介绍科研数据可视化中的统计分布图
- 第 \@ref(tidyverse-ggplot2-gganimate) 章让你的数据骚动起来
- 第 \@ref(tidyverse-ggplot2-pass-function-as-parameters) 章ggplot2中传递函数作为参数值
- 第 \@ref(tidyverse-workflow) 章回望Tidyverse之旅
- 第 \@ref(tidyverse-tips) 章介绍Tidyverse常用技巧
- 第 \@ref(tidyverse-dplyr-adv) 章介绍Tidyverse进阶技巧
- 第 \@ref(tidyverse-styler) 章介绍Tidyverse代码书写规范
- 第 \@ref(tidyverse-colwise) 章介绍数据框的列方向和行方向
- 第 \@ref(tidyverse-beauty-of-across1) 章介绍Tidyverse中的across()之美1
- 第 \@ref(tidyverse-beauty-of-across2) 章介绍Tidyverse中的across()之美2
- 第 \@ref(tidyverse-beauty-of-across3) 章介绍Tidyverse中的across()之美3
- 第 \@ref(tidyverse-beauty-of-across4) 章介绍Tidyverse中的across()之美4
- 第 \@ref(tidyverse-NA) 章介绍Tidyverse中的NA
- 第 \@ref(tidyverse-dot) 章介绍Tidyverse中的dot
- 第 \@ref(tidyverse-tidyeval) 章介绍非标准性评估
- 建模篇
- 第 \@ref(tidystats-sampling) 章介绍模拟与抽样1
- 第 \@ref(tidystats-sampling-permute) 章介绍模拟与抽样2
- 第 \@ref(tidystats-sampling-bootstrap) 章介绍模拟与抽样3
- 第 \@ref(tidystats-lm) 章介绍线性模型
- 第 \@ref(tidystats-broom) 章介绍模型输出结果的规整
- 第 \@ref(tidystats-t-test) 章介绍双样本t检验
- 第 \@ref(tidystats-aov) 章介绍t检验、方差分析和重复测量的方差分析等基础统计检验方法
- 第 \@ref(tidystats-tests-as-linear) 章介绍统计检验与线性模型的等价性
- 第 \@ref(tidystats-infer) 章介绍统计推断
- 第 \@ref(tidystats-lmm) 章介绍多层线性模型
- 第 \@ref(tidystats-poisson-regression) 章介绍广义线性模型中的泊松回归
- 第 \@ref(tidystats-logistic-regression) 章介绍logistic回归模型
- 第 \@ref(tidystats-ordinal) 章介绍有序logistic回归模型
- 第 \@ref(tidystats-marginaleffects) 章介绍模型的边际效应
- tidymodels篇
- 第 \@ref(tidymodels-intro) 章介绍机器学习与Tidymodels
- 贝叶斯篇
- 第 \@ref(bayesian-inference) 章介绍贝叶斯推断
- 第 \@ref(bayesian-intro-stan) 章介绍Stan入门
- 第 \@ref(bayesian-lm) 章介绍贝叶斯线性模型
- 第 \@ref(bayesian-t-test) 章介绍贝叶斯之假设检验
- 第 \@ref(bayesian-glm) 章介绍贝叶斯广义线性模型
- 第 \@ref(bayesian-glm-logistic-binomial) 章介绍贝叶斯logistic-binomial模型
- 第 \@ref(bayesian-hierarchical) 章介绍贝叶斯层级模型
- 第 \@ref(bayesian-mixtures) 章介绍贝叶斯混合模型
- 第 \@ref(bayesian-categorical) 章介绍贝叶斯分类模型
- 第 \@ref(bayesian-workflow) 章介绍贝叶斯工作流程
- 第 \@ref(bayesian-tidybayes) 章介绍抽样数据的规整与可视化
- 第 \@ref(bayesian-vaccine-effectiveness) 章贝叶斯案例-新冠疫苗有效率的计算
- 第 \@ref(bayesian-tokyo-olympics-100m) 章贝叶斯案例-预测奥运会男子100米短跑成绩
- 第 \@ref(bayesian-glmm) 章贝叶斯案例Logistic multilevel growth model
- 应用篇
- 第 \@ref(eda-nobel) 章介绍探索性数据分析-诺奖获得者
- 第 \@ref(eda-olympics) 章介绍探索性数据分析-奥林匹克
- 第 \@ref(eda-covid2019) 章介绍探索性数据分析-新冠疫情
- 第 \@ref(eda-anscombe) 章介绍探索性数据分析-anscombe数据集
- 第 \@ref(eda-height) 章介绍探索性数据分析-身高体重
- 第 \@ref(eda-caribou) 章介绍探索性数据分析-驯鹿迁移
- 第 \@ref(eda-penguins) 章介绍探索性数据分析-企鹅的故事
- 第 \@ref(eda-career-decision) 章介绍探索性数据分析-大学生职业决策
- 第 \@ref(eda-ames-houseprice) 章介绍探索性数据分析-ames房屋价格
- 第 \@ref(eda-mammal-species) 章介绍探索性数据分析-哺乳动物脑量与体重的关系
- 第 \@ref(eda-migration) 章介绍探索性数据分析-移民缺口
- 第 \@ref(eda-rvest) 章介绍网页爬虫
- 第 \@ref(eda-tidygraph) 章介绍社会网络分析
- 第 \@ref(eda-tidytext) 章介绍文本挖掘
- 第 \@ref(eda-tibbletime) 章介绍时间序列分析
- 第 \@ref(eda-stars) 章介绍地理数据处理
- 第 \@ref(eda-rowwise) 章介绍Tidyverse中行方向的操作
- 第 \@ref(eda-lazyman) 章介绍我收集的一些有用和有趣的宏包
- 第 \@ref(eda-pandas-vs-dplyr) 章Pandas vs. dplyr谁是数据分析中最好用的宏包
- 第 \@ref(eda-practice) 章一日一练,有些题目还是很有挑战性的喔
2、**课件源代码和数据**
我将持续改进课件,所以欢迎大家提出建议
- <https://github.com/perlatex/R_for_Data_Science>
<!-- 3、课程视频 -->
<!-- - 部分课程视频放在[bilibili](https://space.bilibili.com/627373342/video)网站 -->
3、**关于课程目标**
大家可能看过《本杰明巴顿奇事》电影,讲了一个逆生长的奇事。我发现这种逆向思维挺棒。教大家写代码也有类似的情形,正常顺序是,拿到问题,然后拼凑代码,最后实现。但感觉这样效率很低,初学者容易受挫。因此,我尝试采用`code first`教学,先放出代码,让大家看到结果,然后大家自己探索代码解决了什么问题,可能更容易获得信心。一旦明白代码的含义,接下来,就可以模仿和创新了。学R最大的挑战是如何建立信心。
- 课程目标: 熟悉数据科学流程,掌握统计编程技能,能运用探索性分析方法,解决基本的实际应用问题,做到学以致用,**不是 learning R,而是 learning with R**
- 授课方式:
- 边写**代码**边讲
- 通过案例式、问题式的方法,增强参与感和目标感
- 课堂要求
- 自带电脑,配好运行环境
- 光看李小龙的电影,是学不会功夫的
- 科学脚手架
- 科学脚手架,我个人比较喜欢这个比喻(我微信公众号就使用了这个名字)。在教育中,各种知识或技巧就好比建房子用的脚手架,它帮助我们加深理解,逐渐获得独立自主学习的能力。
4、**关于如何提问**
有的同学,这样一上来就问:**老师,我的代码怎么运行不出来呢?**或者图省事,干脆手机拍个照片一发。
- 要想获得快速的帮助,在问问题之前,请先告诉对方三个信息:
- 想解决的问题是什么?
- 代码是什么?
- 报错信息是什么?
## 课件中用到的宏包 {-}
```{r index-3, eval = FALSE}
my_packages <-
c("brms", "broom", "broom.mixed", "clock", "colorspace", "corrr", "countrycode", "cowplot", "cranlogs", "datapasta", "datasauRus", "devtools", "dplyr", "equatiomatic", "forcats", "gapminder", "geomtextpath", "geoshpere", "gganimate", "ggbeeswarm", "ggdist", "ggeffects", "ggforce", "ggfx", "gghighlight", "ggimage", "ggplot2", "ggpubr", "ggraph", "ggrepel", "ggridges", "ggstatsplot", "ggtext", "ggthemes", "gt", "gtsummary", "haven", "here", "infer", "janitor", "knitr", "latex2exp", "lme4", "lubridate", "maps", "marginaleffects", "margins", "MASS", "modelr", "namer", "naniar", "nycflights13", "ordinal", "pacman", "paletteer", "palmerpenguins", "patchwork", "performance", "purrr", "ragg", "readr", "readxl", "remotes", "reprex", "reticulate", "rlang", "rmarkdown", "rnaturalearth", "rstan", "rstatix", "rvest", "scales", "see", "sf", "shadowtext", "showtext", "slider", "stars", "statsExpressions", "stringr", "styler", "tibble", "tibbletime", "tidybayes", "tidygraph", "tidymodels", "tidyr", "tidytext", "tidyverse", "tinytex", "viridis", "visdat")
```
```{r index-4, eval = FALSE}
install.packages(my_packages, repos = "http://cran.rstudio.com", dependencies = T)
```
可能用到的开发版本的宏包
```{r index-5, eval = FALSE}
devtools::install_github("easystats/report")
devtools::install_github("kassambara/navdata")
devtools::install_github('cttobin/ggthemr')
remotes::install_github("daranzolin/inferregex")
devtools::install_github("EmilHvitfeldt/gganonymize")
remotes::install_github("ThinkR-open/remedy")
remotes::install_git("https://git.rud.is/hrbrmstr/hrbraddins.git")
devtools::install_github("hadley/emo")
remotes::install_github("romainfrancois/lay")
remotes::install_github("kjhealy/covdata")
devtools::install_github("kbodwin/flair")
devtools::install_github("seasmith/AlignAssign")
devtools::install_github("sharlagelfand/ggkeyboard", ref = "main")
devtools::install_github("gadenbuie/grkstyle")
remotes::install_github("r-lib/downlit")
```
## RYouWithMe {-}
```{r index-6, echo = FALSE, out.width = "30%"}
knitr::include_graphics("images/QQgroup.png")
```
## 致谢 {-}
非常感谢川师研究生院的信任,有了您的支持,才会有更多的川师学子了解R的美!
```{block2 index-7, type='flushright', html.tag='p'}
王敏杰
于 川师图书馆某角落
```