前言
你好,这里是四川师范大学研究生公选课《数据科学中的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), r4ds这本书的第二版已于2023年6月发行。作者可是2019年8月获得考普斯总统奖(被誉为统计学的诺贝尔奖)的大神喔,点击这里可以看他照片。
关于课程
1、课程安排是这样的,每个章节研究的内容都是彼此独立的,大家可以单独阅读每章及运行代码。 每一章可能会附有作业,你可以在第 B 章参考答案。
- 基础篇
- 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中的purrr之美1
- 第 45 章介绍Tidyverse中的NA
- 第 46 章介绍Tidyverse中的dot
- 第 47 章介绍非标准性评估
- 建模篇
- tidymodels篇
- 第 63 章介绍机器学习与Tidymodels
- 贝叶斯篇
- 应用篇
- 第 78 章介绍探索性数据分析-诺奖获得者
- 第 79 章介绍探索性数据分析-奥林匹克
- 第 80 章介绍探索性数据分析-新冠疫情
- 第 81 章介绍探索性数据分析-anscombe数据集
- 第 82 章介绍探索性数据分析-身高体重
- 第 83 章介绍探索性数据分析-驯鹿迁移
- 第 84 章介绍探索性数据分析-企鹅的故事
- 第 85 章介绍探索性数据分析-大学生职业决策
- 第 86 章介绍探索性数据分析-ames房屋价格
- 第 87 章介绍探索性数据分析-哺乳动物脑量与体重的关系
- 第 88 章介绍探索性数据分析-移民缺口
- 第 89 章介绍网页爬虫
- 第 90 章介绍社会网络分析
- 第 91 章介绍文本挖掘
- 第 92 章介绍时间序列分析
- 第 93 章介绍地理数据处理
- 第 94 章介绍Tidyverse中行方向的操作
- 第 95 章介绍我收集的一些有用和有趣的宏包
- 第 96 章Pandas vs. dplyr谁是数据分析中最好用的宏包
- 第 97 章一日一练,有些题目还是很有挑战性的喔
- 第 78 章介绍探索性数据分析-诺奖获得者
- 论文复现篇
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 = TRUE)
可能用到的开发版本的宏包
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)