前言

你好,这里是四川师范大学研究生公选课《数据科学中的R语言》的课程内容。R语言是统计编程的第一语言,近几年Tidyverse的推出大大降低了R语言的学习难度。Tidyverse是一系列R包的集合,包含了dplyr、ggplot2、tidyr、stringr等,从数据导入预处理,再到高级转化、可视化、建模和展示。因为其代码清晰可读的编程风格,得到越来越多人的喜爱。考虑到大家来自不同的学院,有着不同的学科背景,因此讲授的内容不会太深奥(要有信心喔)。

比如在课程中以下内容就不会出现

\[ f(x)=\frac{1}{\sqrt{2 \pi}} e^{-\frac{1}{2} x^{2}} \]

而出现更多的是

library(tidyverse)
summary_monthly_temp <- weather %>% 
  group_by(month) %>% 
  summarize(mean = mean(temp), 
            std_dev = sd(temp))

书中大量使用形象化的比喻,从计算机科学的角度来讲,这些比喻是不严谨的,但是可以帮助大家理解其中概念,激励动手操作,提升信心。因为我们的目的,不是把大家培养成程序员,而是让大家不害怕编程。

这里分享一个我的小故事吧。工作以后,早上起来都很匆忙,早餐一般不会亲自动手,大多是头一天买好的面包和牛奶。有时也会回想小时候妈妈做的早饭的味道,决定自己煮个荷包蛋,但我每次把蛋放入水中的时候,蛋就散了,尝试把火开小点,或者水放多点,几次努力都不成功,最后都变成了蛋花汤了,我逐渐也就没有了兴趣。后来,有一次出差,在路边吃早餐,发现早餐摊有卖荷包蛋,我就去问老板娘,怎么样煮,荷包蛋不散呢。老板娘告诉我,先在水里放点糖,然后再把蛋放进去。我回家后尝试,真的成功了…

联想到我们的学习,困扰我们很久的东西,或许并不复杂,可能只需要一个小小的技巧,就解决了,只是我们还没遇到教我们煮荷包蛋的人,可能大神 Hadley Wickham 就是教我们煮荷包蛋的人吧。

言归正传,在跟进本课程的同时,我强烈推荐大家阅读Hadley Wickham的 r4ds这本书 (Grolemund and Wickham 2017)。作者可是2019年8月刚刚获得考普斯总统奖(被誉为统计学的诺贝尔奖)的大神喔,点击这里可以看他照片。

关于课程

1、课程安排是这样的,每个章节研究的内容都是彼此独立的,大家可以单独阅读每章及运行代码。 每一章可能会附有作业,你可以在第 B 章参考答案。

  • 基础篇
    • 1 章介绍数据科学基础
    • 2 章介绍安装与环境配置
    • 3 章介绍R语言中一切都是对象
    • 4 章介绍向量
    • 5 章介绍R语言数据结构
    • 6 章介绍运算符及向量运算
    • 7 章介绍R语言中的函数
    • 8 章介绍函数的应用
    • 9 章介绍R语言中的子集选取
  • tidyverse篇
    • 10 章介绍可重复性文档
    • 11 章介绍数据读入
    • 12 章介绍数据处理
    • 13 章介绍dplyr的应用
    • 14 章介绍数据可视化
    • 15 章介绍数据规整1
    • 16 章介绍数据规整2
    • 17 章介绍字符串处理
    • 18 章介绍因子类型数据
    • 19 章介绍简单数据框
    • 20 章介绍函数式编程1
    • 21 章介绍函数式编程2
    • 22 章ggplot2几何形状
    • 23 章ggplot2的标度
    • 24 章ggplot2的主题
    • 25 章ggplot2的图例
    • 26 章ggplot2扩展内容
    • 27 章ggplot2统计图层
    • 28 章ggplot2从图层到几何形状
    • 29 章ggplot2数据可视化中的配色
    • 30 章ggplot2如何控制图例的外观
    • 31 章ggplot2中的延迟映射
    • 32 章介绍科研数据可视化中的统计分布图
    • 33 章让你的数据骚动起来
    • 34 章ggplot2中传递函数作为参数值
    • 35 章回望Tidyverse之旅
    • 36 章介绍Tidyverse常用技巧
    • 37 章介绍Tidyverse进阶技巧
    • 38 章介绍Tidyverse代码书写规范
    • 39 章介绍数据框的列方向和行方向
    • 40 章介绍Tidyverse中的across()之美1
    • 41 章介绍Tidyverse中的across()之美2
    • 42 章介绍Tidyverse中的across()之美3
    • 43 章介绍Tidyverse中的across()之美4
    • 44 章介绍Tidyverse中的NA
    • 45 章介绍Tidyverse中的dot
    • 46 章介绍非标准性评估
  • 建模篇
    • 47 章介绍模拟与抽样1
    • 48 章介绍模拟与抽样2
    • 49 章介绍模拟与抽样3
    • 50 章介绍线性模型
    • 51 章介绍模型输出结果的规整
    • 52 章介绍双样本t检验
    • 53 章介绍t检验、方差分析和重复测量的方差分析等基础统计检验方法
    • 54 章介绍统计检验与线性模型的等价性
    • 55 章介绍统计推断
    • 56 章介绍多层线性模型
    • 57 章介绍广义线性模型中的泊松回归
    • 58 章介绍logistic回归模型
    • 59 章介绍有序logistic回归模型
    • 60 章介绍模型的边际效应
  • tidymodels篇
    • 61 章介绍机器学习与Tidymodels
  • 贝叶斯篇
    • 62 章介绍贝叶斯推断
    • 63 章介绍Stan入门
    • 64 章介绍贝叶斯线性模型
    • 65 章介绍贝叶斯之假设检验
    • 66 章介绍贝叶斯广义线性模型
    • 67 章介绍贝叶斯logistic-binomial模型
    • 68 章介绍贝叶斯层级模型
    • 69 章介绍贝叶斯混合模型
    • 70 章介绍贝叶斯分类模型
    • 71 章介绍贝叶斯工作流程
    • 72 章介绍抽样数据的规整与可视化
    • 73 章贝叶斯案例-新冠疫苗有效率的计算
    • 74 章贝叶斯案例-预测奥运会男子100米短跑成绩
    • 75 章贝叶斯案例Logistic multilevel growth model
  • 应用篇
    • 76 章介绍探索性数据分析-诺奖获得者
    • 77 章介绍探索性数据分析-奥林匹克
    • 78 章介绍探索性数据分析-新冠疫情
    • 79 章介绍探索性数据分析-anscombe数据集
    • 80 章介绍探索性数据分析-身高体重
    • 81 章介绍探索性数据分析-驯鹿迁移
    • 82 章介绍探索性数据分析-企鹅的故事
    • 83 章介绍探索性数据分析-大学生职业决策
    • 84 章介绍探索性数据分析-ames房屋价格
    • 85 章介绍探索性数据分析-哺乳动物脑量与体重的关系
    • 86 章介绍探索性数据分析-移民缺口
    • 87 章介绍网页爬虫
    • 88 章介绍社会网络分析
    • 89 章介绍文本挖掘
    • 90 章介绍时间序列分析
    • 91 章介绍地理数据处理
    • 92 章介绍Tidyverse中行方向的操作
    • 93 章介绍我收集的一些有用和有趣的宏包
    • 94 章Pandas vs. dplyr谁是数据分析中最好用的宏包
    • 95 章一日一练,有些题目还是很有挑战性的喔

2、课件源代码和数据

我将持续改进课件,所以欢迎大家提出建议

3、关于课程目标

大家可能看过《本杰明巴顿奇事》电影,讲了一个逆生长的奇事。我发现这种逆向思维挺棒。教大家写代码也有类似的情形,正常顺序是,拿到问题,然后拼凑代码,最后实现。但感觉这样效率很低,初学者容易受挫。因此,我尝试采用code first教学,先放出代码,让大家看到结果,然后大家自己探索代码解决了什么问题,可能更容易获得信心。一旦明白代码的含义,接下来,就可以模仿和创新了。学R最大的挑战是如何建立信心。

  • 课程目标: 熟悉数据科学流程,掌握统计编程技能,能运用探索性分析方法,解决基本的实际应用问题,做到学以致用,不是 learning R,而是 learning with R

  • 授课方式:

    • 边写代码边讲
    • 通过案例式、问题式的方法,增强参与感和目标感
  • 课堂要求

    • 自带电脑,配好运行环境
    • 光看李小龙的电影,是学不会功夫的
  • 科学脚手架

    • 科学脚手架,我个人比较喜欢这个比喻(我微信公众号就使用了这个名字)。在教育中,各种知识或技巧就好比建房子用的脚手架,它帮助我们加深理解,逐渐获得独立自主学习的能力。

4、关于如何提问

有的同学,这样一上来就问:老师,我的代码怎么运行不出来呢?或者图省事,干脆手机拍个照片一发。

  • 要想获得快速的帮助,在问问题之前,请先告诉对方三个信息:
    • 想解决的问题是什么?
    • 代码是什么?
    • 报错信息是什么?

课件中用到的宏包

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", "COVID19", "flipbookr", "binb", "xaringan", "ggdag", "ggnewscale", "MetBrewer")
install.packages(my_packages, repos = "http://cran.rstudio.com", dependencies = T)

可能用到的开发版本的宏包

devtools::install_github("easystats/report")
devtools::install_github("kassambara/navdata")
devtools::install_github('Mikata-Project/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")
devtools::install_github("EvaMaeRey/ggcalendar")
devtools::install_github("gadenbuie/xaringanExtra")
remotes::install_github("jhelvy/xaringanBuilder", dependencies = TRUE)

RYouWithMe

致谢

非常感谢川师研究生院的信任,有了您的支持,才会有更多的川师学子了解R的美!

王敏杰
于 川师图书馆某角落