From f592511a2cda8c272a3eb63e55bcc38e37618e2b Mon Sep 17 00:00:00 2001 From: ming Date: Thu, 21 Mar 2024 00:18:31 +0800 Subject: [PATCH] add slides --- .gitignore | 7 + BB/localRef.bib | 0 SD/20240321_0_R实践课程/_extensions | 1 + SD/20240321_0_R实践课程/index.qmd | 155 ++++ SD/20240321_1_R语言介绍/_extensions | 1 + SD/20240321_1_R语言介绍/index.qmd | 222 +++++ SD/20240321_2_R语言语法基础/_extensions | 1 + SD/20240321_2_R语言语法基础/index.qmd | 795 ++++++++++++++++++ SD/20240321_3_Excel基础/_extensions | 1 + SD/20240321_3_Excel基础/index.qmd | 127 +++ SD/20240321_9_课后作业/_extensions | 1 + SD/20240321_9_课后作业/index.qmd | 83 ++ .../第6次课后作业_模板.qmd | 42 + SD/index.qmd | 32 + _quarto.yml | 52 ++ about.qmd | 5 + apple-touch-icon.png | Bin 0 -> 73786 bytes data/README.md | 3 + data/course_member.xlsx | Bin 0 -> 14178 bytes data/main.qmd | 23 + index.qmd | 16 + 21 files changed, 1567 insertions(+) create mode 100644 .gitignore create mode 100644 BB/localRef.bib create mode 120000 SD/20240321_0_R实践课程/_extensions create mode 100644 SD/20240321_0_R实践课程/index.qmd create mode 120000 SD/20240321_1_R语言介绍/_extensions create mode 100644 SD/20240321_1_R语言介绍/index.qmd create mode 120000 SD/20240321_2_R语言语法基础/_extensions create mode 100644 SD/20240321_2_R语言语法基础/index.qmd create mode 120000 SD/20240321_3_Excel基础/_extensions create mode 100644 SD/20240321_3_Excel基础/index.qmd create mode 120000 SD/20240321_9_课后作业/_extensions create mode 100644 SD/20240321_9_课后作业/index.qmd create mode 100644 SD/20240321_9_课后作业/第6次课后作业_模板.qmd create mode 100644 SD/index.qmd create mode 100644 _quarto.yml create mode 100644 about.qmd create mode 100644 apple-touch-icon.png create mode 100644 data/README.md create mode 100644 data/course_member.xlsx create mode 100644 data/main.qmd create mode 100644 index.qmd diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c42bc3e --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +/.quarto/ +www/ +site_libs/ +BB/Ref.bib +_variables.yml +_extensions/ +.Rproj.user/ diff --git a/BB/localRef.bib b/BB/localRef.bib new file mode 100644 index 0000000..e69de29 diff --git a/SD/20240321_0_R实践课程/_extensions b/SD/20240321_0_R实践课程/_extensions new file mode 120000 index 0000000..74119e3 --- /dev/null +++ b/SD/20240321_0_R实践课程/_extensions @@ -0,0 +1 @@ +../../_extensions \ No newline at end of file diff --git a/SD/20240321_0_R实践课程/index.qmd b/SD/20240321_0_R实践课程/index.qmd new file mode 100644 index 0000000..12c1d2b --- /dev/null +++ b/SD/20240321_0_R实践课程/index.qmd @@ -0,0 +1,155 @@ +--- +title: "〇、R语言实践前篇" +subtitle: 《区域水环境污染数据分析实践》
Data analysis practice of regional water environment pollution +author: 苏命、王为东
中国科学院大学资源与环境学院
中国科学院生态环境研究中心 +date: today +lang: zh +format: + revealjs: + theme: dark + slide-number: true + chalkboard: + buttons: true + preview-links: auto + lang: zh + toc: true + toc-depth: 1 + toc-title: 大纲 + logo: ./_extensions/inst/img/ucaslogo.png + css: ./_extensions/inst/css/revealjs.css + pointer: + key: "p" + color: "#32cd32" + pointerSize: 18 +revealjs-plugins: + - pointer +filters: + - d2 +--- + +```{r} +#| include: false +#| cache: false +lang <- "cn" +require(tidyverse) +knitr::opts_chunk$set(echo = TRUE) +``` + +## R语言实践部分课程简介 + +**接下来的课程由我来带着大家一起学习、实践基于R语言的数据分析。** + +### 自我介绍 + +- 苏命:来自中国科学院生态环境研究中心 +- 主要从事**水源水质水生态**方面的研究 + +### 课件 + +- 采用`R语言`+`quarto`完成 +- 网页公开:[https://drwater.rcees.ac.cn/course/public/RWEP/\@PUB/index.html](https://drwater.rcees.ac.cn/course/public/RWEP/@PUB/index.html) +- 课件代码:[https://drwater.rcees.ac.cn/git/course/RWEP.git](https://drwater.rcees.ac.cn/git/course/RWEP.git) + +## 如何学习接下来的内容? + +- 上课形式: + - **实践操作为主**,目的是让每一位同学都能独立开展基于R的数据分析 + - **2-3人一组**,自由分组,相互帮助 +- 准备工作: + - 个人笔记本电脑,Microsoft Windows、GNU/Linux、MacOS系统 + - 安装好**Microsoft Excel** + - 能联网 + - 如果电池不够用,建议带上插座 +- 上课规则 + - 可随时打断,**不懂就问** + - **无特殊情况不迟到**,否则操作过程容易跟不上 + +## Rstudio Server使用 + +- 服务网址:[https://drwater.rcees.ac.cn/rs1/](https://drwater.rcees.ac.cn/rs1/) +- 每位同学使用1个账号,随机生成 +- 密码:\_RWEP_2024\_ +- 后面的实践课程可在该服务器上完成 + + +## 请记住自己的账号! + +::: {layout-ncol=2} + +```{r} +#| echo: false +#| output: asis +coursememberdf <- readxl::read_xlsx("../../data/course_member.xlsx") +nmem <- nrow(coursememberdf) +set.seed <- 23 + +uiddf <- coursememberdf |> + dplyr::mutate(uid = paste0("ruser", sprintf("%02d", sample(1:nmem, nmem)))) |> + dplyr::select(uid, 姓名) |> + dplyr::arrange(uid) |> + dplyr::mutate(group = (dplyr::row_number() - 1) %/% 10 + 1) |> + tidyr::nest(gdf = -group) |> + dplyr::mutate(tab = purrr::map(gdf, ~ knitr::kable(.x))) + +uiddf$tab[[1]] +uiddf$tab[[2]] + +``` +::: + +## 请记住自己的账号! + +::: {layout-ncol=2} + +```{r} +#| echo: false +#| output: asis + +uiddf$tab[[3]] +uiddf$tab[[4]] +``` +::: + +## 课后作业 + +提交形式:`第*次作业_姓名.qmd`文件 + +模板: + +```` +--- +title: "课后作业*" +author: 姓名 +--- + + +# 第1题 + +说明 + +```{r} +# Here is the code + +``` + +# 第2题 + +说明 + +```{r} +# Here is the code + +``` + + + + +```` + + + +## 欢迎讨论!{.center} + + +`r rmdify::slideend(wechat = FALSE, type = "public", tel = FALSE, thislink = "https://drwater.rcees.ac.cn/course/public/RWEP/@PUB/SD/")` + diff --git a/SD/20240321_1_R语言介绍/_extensions b/SD/20240321_1_R语言介绍/_extensions new file mode 120000 index 0000000..74119e3 --- /dev/null +++ b/SD/20240321_1_R语言介绍/_extensions @@ -0,0 +1 @@ +../../_extensions \ No newline at end of file diff --git a/SD/20240321_1_R语言介绍/index.qmd b/SD/20240321_1_R语言介绍/index.qmd new file mode 100644 index 0000000..c55531a --- /dev/null +++ b/SD/20240321_1_R语言介绍/index.qmd @@ -0,0 +1,222 @@ +--- +title: "一、R语言介绍" +subtitle: 《区域水环境污染数据分析实践》
Data analysis practice of regional water environment pollution +author: 苏命、王为东
中国科学院大学资源与环境学院
中国科学院生态环境研究中心 +date: today +lang: zh +format: + revealjs: + theme: dark + slide-number: true + chalkboard: + buttons: true + preview-links: auto + lang: zh + toc: true + toc-depth: 1 + toc-title: 大纲 + logo: ./_extensions/inst/img/ucaslogo.png + css: ./_extensions/inst/css/revealjs.css + pointer: + key: "p" + color: "#32cd32" + pointerSize: 18 +revealjs-plugins: + - pointer +filters: + - d2 +--- + +```{r} +#| include: false +#| cache: false +lang <- "cn" +require(tidyverse) +require(learnr) +knitr::opts_chunk$set(echo = TRUE) +``` + +## R的历史 + +::: columns +::: {.column width="85%"} + +- 1976年: + - 前身是S语言,由贝尔实验室John Chambers及其同事开发 +- 1993年: + - R语言由Ross Ihaka和Robert Gentleman在奥克兰大学开发 + - R的诞生是为了提供一个强大的统计计算和图形显示的平台 + +::: +::: {.column width="15%"} + +![](https://cran.r-project.org/Rlogo.svg) + +::: +::: + + +- 1995年:R发布第一个公开版本 +- 2000年代: R语言逐渐成为统计学和数据科学领域重要工具 +- 2010年:Hadley Wickham发布了ggplot2包,数据可视化方面更强 +- 2016年:创建CRAN(Comprehensive R Archive Network),R包中央库 +- 至今 + - **R语言已成为数据科学和统计学领域最受欢迎的工具之一,被广泛用于数据分析、机器学习、数据可视化等领域** + + + +## R的特点 + +### 一般特点 + +- 免费、开源、支持各个主要计算机系统。 +- 完整的程序设计语言,基于函数和对象。 +- 支持完善的数据类型,如向量、矩阵、数据框等。 + +### 技术特点 + +- 所有存在都是对象。 +- 所有动作都是函数调用。 +- 支持函数编程和对象类。 +- 是动态类型语言,运行速度相对较慢。 + +## R的参考资料 + +### 推荐参考书 + +- Hadley Wickham and Garrett Grolemund(2022). [R for Data Science](https://r4ds.hadley.nz/) +- Hadley Wickham(2019). [Advanced R](https://adv-r.hadley.nz/) +- Hadley Wickham(2016). [ggplot2 Elegant Graphics for Data Analysis](https://ggplot2-book.org/) +- John M. Chambers(2008). [Software for Data Analysis-Programming with R](https://www.springer.com/gp/book/9780387759357) +- Venables, W. N. & Ripley, B. D.(2002). [Modern Applied Statistics with S (MASS)](https://www.springer.com/gp/book/9780387954578) + + +## R的参考资料 + +### 中文参考书 + +- 《R语言编程艺术》 +- 《R语言实战》 +- 《R语言教程与实践》 +- 《R语言数据可视化实战》 +- 《R语言从入门到精通》 + +## R的下载与安装 + +### R的下载与安装 + +- R的官方网站:[https://www.r-project.org/](https://www.r-project.org/) +- CRAN镜像网站:[http://mirror.bjtu.edu.cn/cran/](http://mirror.bjtu.edu.cn/cran/) +- 下载官方的R软件后按提示安装 + + +{{< video https://vimeo.com/203516510 width="600" height="400">}} + +## RStudio + + +### 什么是RStudio? + +- RStudio官方网站: [https://posit.co/products/open-source/rstudio/](https://posit.co/products/open-source/rstudio/) +- RStudio是一个集成开发环境(IDE),专门用于R语言编程和数据分析。 +- 它提供了一个直观的界面,使得编写、调试和运行R代码变得更加容易。 + + +## RStudio + +### RStudio的功能 + +1. **代码编辑器**:提供了语法高亮、自动补全和代码折叠等功能。 +2. **控制台**:用于直接执行R代码并查看结果。 +3. **环境和历史记录**:可以查看当前加载的数据、函数和变量,以及之前执行过的命令。 +4. **图形和可视化**:RStudio内置了绘图设备,可以方便地创建各种统计图表。 +5. **文件管理器**:可直接在RStudio中管理文件和项目。 +6. **包管理器**:方便地安装、更新和管理R包。 +7. **Markdown编辑器**:支持Markdown格式,可以创建美观的文档和报告。 + +## 如何获取RStudio? + +- RStudio可以从官方网站免费下载并安装:[RStudio官网](https://posit.co/download/rstudio-desktop/) +- RStudio是一个强大的R编程环境,为R用户提供了丰富的功能和工具。 +- 它简化了R语言的使用,提高了数据分析和可视化的效率。 + + +{{< video https://vimeo.com/203516968 width="600" height="400">}} + +## 扩展包:R package + +- R有一万多个扩展软件包,提供了各种各样的功能 +- 已安装的基本R软件伴随一些必要的扩展包,如base, stats, graphics等,这些包在启动R时会默认载入 +- 其它扩展包需要用`library(.)`函数载入运行 +- 或者采用`dplyr::filter(.)`方式 + +::: panel-tabset +### Code + +```{r} +#| echo: true +#| eval: false +#| out-width: 50% +# load a R package +library(ggplot2) + +# plot it based on the functions from `ggplot2` package +mtcars |> + dplyr::filter(cyl != 8) |> + ggplot(aes(hp, mpg, color = am)) + + geom_point() + + geom_smooth(formula = y ~ x, method = "loess") +``` + +### Output + +```{r} +#| echo: false +#| out-width: 80% +#| fig-width: 6 +#| fig-height: 3 + +library(ggplot2) +mtcars |> + dplyr::filter(cyl != 8) |> + ggplot(aes(hp, mpg, color = am)) + +geom_point() + +geom_smooth(formula = y ~ x, method = "loess") +``` +::: + + +## 安装R包 + +- 以安装sos包为例。 +- 在RStudio中调用“Tools”菜单的“Install Packages”,输入或选择sos即可安装。 +- R图形界面安装 +- 如果不用RStudio, 在R图形界面选菜单“程序包-安装程序包”进行安装。 +- 在CRAN镜像选择窗口中选择中国的镜像,如“China (Beijing 2)”,然后选择要安装的扩展软件包名称即可完成下载和安装。 +- 程序安装 + +```r +# 指定镜像网站并安装扩展包 +options(repos=c(CRAN="https://mirror.tuna.tsinghua.edu.cn/CRAN/")) +install.packages("sos") + +# 当R包不是CRAN标准包,代码放在[github](https://github.com) +if (!require(devtools)) install.packages('devtools') +devtools::install_github("kjhealy/socviz") +``` + +## 安装R包 + +{{< video https://vimeo.com/203516241 width="600" height="400">}} + + +## 结语 + +- R语言是一种强大的统计计算和数据分析工具,适用于各种领域。 +- 通过学习R语言,可以进行数据处理、统计分析和数据可视化。 + + +## 欢迎讨论!{.center} + + +`r rmdify::slideend(wechat = FALSE, type = "public", tel = FALSE, thislink = "https://drwater.rcees.ac.cn/course/public/RWEP/@PUB/SD/")` diff --git a/SD/20240321_2_R语言语法基础/_extensions b/SD/20240321_2_R语言语法基础/_extensions new file mode 120000 index 0000000..74119e3 --- /dev/null +++ b/SD/20240321_2_R语言语法基础/_extensions @@ -0,0 +1 @@ +../../_extensions \ No newline at end of file diff --git a/SD/20240321_2_R语言语法基础/index.qmd b/SD/20240321_2_R语言语法基础/index.qmd new file mode 100644 index 0000000..2bd6e9a --- /dev/null +++ b/SD/20240321_2_R语言语法基础/index.qmd @@ -0,0 +1,795 @@ +--- +title: "二、R语言语法基础" +subtitle: 《区域水环境污染数据分析实践》
Data analysis practice of regional water environment pollution +author: 苏命、王为东
中国科学院大学资源与环境学院
中国科学院生态环境研究中心 +date: today +lang: zh +format: + revealjs: + theme: dark + slide-number: true + chalkboard: + buttons: true + preview-links: auto + lang: zh + toc: true + toc-depth: 1 + toc-title: 大纲 + logo: ./_extensions/inst/img/ucaslogo.png + css: ./_extensions/inst/css/revealjs.css + pointer: + key: "p" + color: "#32cd32" + pointerSize: 18 +revealjs-plugins: + - pointer +filters: + - d2 +--- + +```{r} +#| include: false +#| cache: false +lang <- "cn" +require(tidyverse) +require(learnr) +knitr::opts_chunk$set(echo = TRUE) +``` + + +## 数据类型 + +### 数值型 + +R中的数值型数据可以是整数或浮点数。 + +```{r} +#| echo: true +(x <- 10) +(y <- 1.23e-2) +(z <- pi) +``` + +## 数据类型 + +### 字符串 + +- R 中的字符串用引号括起来,建议用**双引号**。 +- 中文编码主要有GBK编码和UTF-8编码, 可能遇到编码错误造成乱码。RStudio软件默认采用UTF-8编码,在R程序运行时字符串一般用UTF-8编码保存。 + +```{r} +#| echo: true +(str <- "Hello, World!") +(str <- 'Hello, World!') +(str <- 'He was very angry, and shouted: "Stop!"') +``` + + + +## 数据类型 + +### 逻辑 + +```{r} +c(TRUE, FALSE) + +``` + +## 特殊值 + +::: columns +::: {.column width="45%"} +- `NA`: 这是最常见的NA类型,表示缺失值 +- `NA_integer_`: 这是NA的整数类型 +- `NA_real_`: 这是NA的实数类型 +- `NA_character_`: 这是NA的字符类型 +- `NA_complex_`: 这是NA的复数类型 + +::: +::: {.column width="5%"} +::: +::: {.column width="45%"} +```{r} +#| echo: true +pi +NA +NA_character_ +Inf +``` + +::: +::: + +## 特殊值 + +在 R 中,`Inf` 代表正无穷大(positive infinity),而 `-Inf` 则代表负无穷大(negative infinity)。这些值通常出现在数学计算中,例如除以零或对负数取对数等操作可能会导致无穷大的结果。 + +```{r} +#| echo: true +# 正无穷大 +(x <- Inf) + +# 负无穷大 +(y <- -Inf) + +# 无穷大的运算 +(a <- 5 / 0) + +(b <- log(0)) +``` + + + + +## 变量赋值 + +在 R 中,可以使用 `<-` 或 `=` 运算符将值赋给变量,**建议用`<-`**。 + + +```{r} +#| echo: true +# 使用 `<-` 运算符 +(x <- 10) +(y <- "hello") + +# 使用 `=` 运算符 +(z = c(1, 2, 3)) +``` + +## 变量赋值 + +```{r} +# 向量赋值 +(vec <- c(1, 2, 3, 4, 5)) + +# 矩阵赋值 +(mat <- matrix(1:9, nrow = 3)) + +``` + +## 变量赋值 + +### 数据框赋值 + +```{r} +#| echo: true + +(df <- data.frame( + Name = c("Alice", "Bob", "Charlie"), + Age = c(25, 30, 35), + Married = c(TRUE, FALSE, TRUE) +)) +``` +## 变量赋值 + +### 列表赋值 + +```{r} + +(lst <- list( + numbers = c(1, 2, 3), + strings = c("a", "b", "c"), + matrix = matrix(1:9, nrow = 3) +)) +``` + + +## 数学函数 + +```{r} +#| echo: true +round(pi, digits = 3) +log(10) +``` +1. `abs(x)`: 返回 `x` 的绝对值 +2. `sqrt(x)`: 返回 `x` 的平方根 +3. `exp(x)`: 以e为底的指数函数值 +4. `log(x, base)`: 以指定底数的对数函数的值,默认底数为e +5. `log10(x)`: 10为底的对数值 +6. `log2(x)`: 2为底的对数值 +7. `floor(x)`: 不大于`x`的最大整数 +8. `ceiling(x)`: 不小于`x`的最小整数 + +## 数学函数 + +9. `sin(x)`, `cos(x)`, `tan(x)`: 返回 `x` 的正弦、余弦和正切值,其中 `x` 为弧度 +10. `asin(x)`, `acos(x)`, `atan(x)`: `x` 的反正弦、反余弦和反正切值,返回弧度 +11. `sinh(x)`, `cosh(x)`, `tanh(x)`: 返回 `x` 的双曲正弦、双曲余弦和双曲正切值 +12. `asinh(x)`, `acosh(x)`, `atanh(x)`: 反双曲正弦、反双曲余弦和反双曲正切值 +13. `round(x, digits)`: `x` 四舍五入,`digits`指定小数点后位数 +14. `trunc(x)`: 返回`x`截断值,即去掉小数部分 +15. `sign(x)`: 返回符号 + + +## 统计函数 + +```{r} +#| echo: true +x <- c(5, 10, 15, 20, 25) +# 计算向量的平均值 +mean(x) + +# 计算向量的中位数 +median(x) + +# 计算向量的最小值 +min(x) + +# 计算向量的最大值 +max(x) + +# 计算向量的总和 +sum(x) + +``` + +## 统计函数 + +```{r} +#| echo: true + +# 计算向量的标准差 +sd(x) + +# 计算向量的方差 +var(x) + +# 计算向量的分位数 +quantile(x, probs = c(0.25, 0.5, 0.75)) + +# 统计向量的频数 +(frequency <- table(x)) + +``` + + +## 统计函数 + + +### 执行两样本或单样本 t 检验 + +```{r} +#| echo: true +y <- c(3, 8, 13, 18, 23) +t.test(x, y) +``` + +## 统计函数 + +### Wilcoxon-Mann-Whitney检验 + +```{r} +#| echo: true + +wilcox.test(x, y) +``` + +## 统计函数 + +### 创建向量的直方图 + + +```{r} +#| fig-width: 5 +#| fig-height: 3 + +hist(x) +``` + + + + + +## 函数调用-练习 + +### 题目:设有一组数据集合 x 包含了一些整数,请编写R语言代码计算并输出以下指标: + +- 平均值(mean) +- 中位数(median) +- 最大值(maximum) +- 最小值(minimum) +- 数据集合中所有元素的和(sum) +- 数据集合的标准差(standard deviation) +- 数据集合 x 为:x <- c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100) + +**要求:使用R语言编写函数,输入参数为数据集合 x,输出为以上指标的值。** + + + + +## 控制流程 + + +### if-else 语句 + +```{r} +#| echo: true +x <- 10 + +if (x > 10) { + print("x 大于 10") +} else { + print("x 不大于 10") +} +``` + +## 控制流程 + + +### for 循环 + +```{r} +#| echo: true +for (i in 1:5) { + print(i) +} +``` + + +## 自定义函数 + +### 定义函数 + +使用 `function` 关键字定义函数,并使用 `return` 关键字返回结果。 + +```{r} +#| echo: true +my_function <- function(x, y) { + return(x + y) +} +``` + +### 调用函数 + +```{r} +#| echo: true +result <- my_function(3, 4) +print(result) +``` + +## 数据结构 + +### 向量 + +向量是一维数组,可以包含相同类型的元素。 + +```{r} +#| echo: true +(v <- c(1, 2, 3, 4, 5)) +``` + +### 列表 + +列表可以包含不同类型的元素。 + +```{r} +#| echo: true +(l <- list(a = 1, b = "hello", c = TRUE)) +``` + +## 数值型向量 + +### 什么是数值型向量? + +- 在 R 中,向量是一种基本的数据结构。 +- 数值型向量包含相同类型的数值元素。 + + +### 创建数值型向量 + + +```{r} +#| echo: true +# 使用 c() 函数创建数值型向量 +(numeric_vector <- c(1, 2, 3, 4, 5)) +``` + +## 数值型向量 + +### 向量运算 + + +```{r} +#| echo: true +# 创建两个数值型向量 +(vector1 <- c(1, 2, 3)) +(vector2 <- c(4, 5, 6)) + +# 执行向量加法 +(result <- vector1 + vector2) +# 执行向量乘法 +(result <- vector1 * vector2) +``` + +## 向量运算 + +### 向量求和 + +```{r} +#| echo: true +# 创建数值型向量 +vector <- c(1, 2, 3, 4, 5) + +# 求和 +(sum_result <- sum(vector)) +``` + +## 向量运算 + +### 向量平均值 + +```{r} +#| echo: true +# 创建数值型向量 +vector <- c(1, 2, 3, 4, 5) + +# 平均值 +(mean_result <- mean(vector)) +``` + +## 运算-数值运算 + +- a 的平方。 +- b 的立方。 +- a 除以 b 的商和余数。 + +**要求:使用R语言编写函数,输入参数为 a 和 b,输出为上述结果。** + +## 运算-逻辑运算 + +```{r} +all(c(FALSE, 2, 1:3, 3) > 1) +any(c(FALSE, 2, 1:3, 3) > 1) +(flag1 <- FALSE) +(flag2 <- (3 > 2)) +(flag3 <- TRUE * TRUE) +(flag4 <- TRUE * FALSE) +(flag5 <- TRUE & FALSE) +(flag6 <- TRUE | FALSE) +``` + + +## 运算-逻辑运算 + +- `which` + +```{r} +which(c(FALSE, TRUE, TRUE, FALSE, NA)) +which((11:15) > 12) + +``` + +- `identical` + +```{r} +identical(c(1,2,3), c(1,2,NA)) +identical(c(1L,2L,3L), c(1,2,3)) +``` + +## 运算-字符型 + +- 特殊字符 + +```{r} +c("abc", "", 'a cat', NA, '李明', "\n") +``` + +- `paste` + +```{r} +(users <- paste("ruser", 1:9)) +paste(users, collapse = ", ") +``` + + +## 运算-字符型 + +- 大小写 + +```{r} +letters[1:5] +toupper(letters[6:9]) +tolower(month.abb) +stringr::str_to_title(c("monday", "tuesday")) + +``` + + +## 运算-字符型 + +- 字符串截取 + +```{r} +substr("Monday", 1, 3) +stringr::str_sub("Monday", 1, 3) +``` + +## 运算-字符型 + +- 类型转换 + +```{r} +100 +as.character(100) + +as.numeric(c("0100", "0101")) + +sprintf('renamedfile%03d.png', c(3, 99, 100)) +``` + + +## 运算-字符型 + +- 字符串替换 + +```{r} +(mystr <- "He was wrong!") +gsub("wrong", "right", mystr) + +``` + + + +## 索引 + +### 向量 + +```{r} +# 创建一个向量 +vector <- c("apple", "banana", "cherry", "date") +# 访问第三个元素 +vector[3] +# 访问多个元素 +vector[c(2, 4)] +vector[c(2:4)] +``` + +## 索引 + +### 向量 + +```{r} +# 除了第2个元素 +vector[-2] +# 超界 +vector[100] +# 更新数据 +vector[7] <- "New Data" +vector +``` + +## 索引 + +```{r} + + +(x <- 1:10) +x[x > 6] + +x[x < 3] <- 99 +x +# which +which(x > 10) +which.max(x) +which.min(x) + +``` + +## 索引 + +### 列表 + +```{r} + + +# 创建一个列表 +my_list <- list(fruit = c("apple", "banana", "cherry"), + numbers = c(1, 2, 3, 4, 5)) + +# 访问列表中的第二个元素 +my_list[[2]] + +``` + +## 索引 + +### 数据框 + +```{r} + +# 创建一个数据框 +df <- data.frame(fruit = c("apple", "banana", "cherry"), + quantity = c(5, 7, 3)) + +# 访问数据框中的第一个元素 +df[1, 1] +# 第2-3行 +df[2:3, ] + +``` + +## 日期和时间 + +### `base` package + + +```{r} +as.Date("2024-01-01") +as.POSIXct(1) +as.Date(c("12/6/2022", "1/1/2023"), format="%m/%d/%Y") +``` + + +## 日期和时间 + +### `lubridate` package + + +```{r} +lubridate::today() + +require(lubridate) +now() +ymd(c(20200321, 240404, "20181231")) +mdy(c("3-10-1998", "01-17-2018", "Feb 3, 2024")) +ymd_hms("1998-03-16 13:15:45", tz = "Asia/Shanghai") +``` + + +## 日期和时间 + +### `lubridate` package + +```{r} +make_date(2028, 1, 30) +as_date("2000-01-01") +as_datetime("2000-01-01", tz = "Asia/Shanghai") +as_datetime("2024-02-01 8:00:00", tz = "Asia/Shanghai") +``` + +## 日期和时间 + +### `lubridate` package + +```{r} + +year(today()) +wday(today()) +hour(now()) +``` + + +## 日期和时间 + +### `lubridate` package + + +```{r} +(x <- now()) +floor_date(x, unit = "day") +floor_date(x, unit = "hour") +floor_date(x, unit = "10 minutes") +ceiling_date(x, unit = "10 minutes") + +``` + +## 因子(factor) + +### Factor是什么? + +- 在R中,Factor是用来表示分类数据的特殊数据类型。 +- 它将数据分成不同的水平(levels),每个水平代表了一个类别。 + + +## 因子(factor) + +### 创建Factor + +```{r} +# 创建一个Factor +gender <- factor(c("Male", "Female", "Female", "Male")) +# 查看Factor的水平 +levels(gender) +# 改变Factor的水平顺序 +gender <- factor(gender, levels = c("Female", "Male")) +summary(gender) # 使用Factor进行分组 +as.numeric(gender) # 因子转换为纯粹的整数值 +as.character(gender) # 转为字符 + +``` + + +## 因子(factor) + +### Label of Factor + +```{r} +(x <- factor(1:12, label = month.abb)) +factor(x, levels = month.abb[c(2:12, 1)]) +``` + +### 分组 + +```{r} +cut(1:20, breaks=c(0, 5, 10, 15, 18, 20)) +``` + + +## 矩阵 + +```{r} +1:20 +(A <- matrix(1:20, nrow = 4, byrow = TRUE)) +(B <- matrix(1:20, nrow = 4, byrow = FALSE)) +nrow(A) +ncol(B) +``` + +## 矩阵 +### 高维矩阵 + +```{r} +X <- array(1:12, dim = c(3, 2, 2)) +dim(C) +X[1, , ] +X[1, , 1] + +``` + +## 矩阵 + +### `cbind`、`rbind` + +```{r} +cbind(X[1, , ], X[2, , ], X[3, , ]) +rbind(X[1, , ], X[2, , ], X[3, , ]) + +cbind(c(1,2), c(3,4), c(5,6)) +``` + +## 数据框(data frame) + +**最主要的数据形式。** + +```{r} +# 创建数据框 +(df <- data.frame( + Name = c("Alice", "Bob", "Charlie"), + Age = c(25, 30, 35), + Married = c(TRUE, FALSE, TRUE) +)) +names(df) +colnames(df) +ncol(df); nrow(df) +``` + + +## 数据框(data frame) + +```{r} +df[1, 1] +df[2, ] +df[, 1] +df$Age +df[["Age"]] +df[, "Age"] +``` + +## 数据框(data frame) + +```{r} +X <- matrix(1:9, nrow = 3) +class(X) +(Y <- as.data.frame(X)) +names(Y) +names(Y) <- c("colA", "colB", "colC") + +``` + + + + +## 欢迎讨论!{.center} + + +`r rmdify::slideend(wechat = FALSE, type = "public", tel = FALSE, thislink = "https://drwater.rcees.ac.cn/course/public/RWEP/@PUB/SD/")` diff --git a/SD/20240321_3_Excel基础/_extensions b/SD/20240321_3_Excel基础/_extensions new file mode 120000 index 0000000..74119e3 --- /dev/null +++ b/SD/20240321_3_Excel基础/_extensions @@ -0,0 +1 @@ +../../_extensions \ No newline at end of file diff --git a/SD/20240321_3_Excel基础/index.qmd b/SD/20240321_3_Excel基础/index.qmd new file mode 100644 index 0000000..c288aad --- /dev/null +++ b/SD/20240321_3_Excel基础/index.qmd @@ -0,0 +1,127 @@ +--- +title: "三、Excel基础" +subtitle: 《区域水环境污染数据分析实践》
Data analysis practice of regional water environment pollution +author: 苏命、王为东
中国科学院大学资源与环境学院
中国科学院生态环境研究中心 +date: today +lang: zh +format: + revealjs: + theme: dark + slide-number: true + chalkboard: + buttons: true + preview-links: auto + lang: zh + toc: true + toc-depth: 1 + toc-title: 大纲 + logo: ./_extensions/inst/img/ucaslogo.png + css: ./_extensions/inst/css/revealjs.css + pointer: + key: "p" + color: "#32cd32" + pointerSize: 18 +revealjs-plugins: + - pointer +filters: + - d2 +--- + +```{r} +#| include: false +#| cache: false +lang <- "cn" +require(tidyverse) +require(learnr) +``` + +## Tidy data + +由Hadley Wickham提出,tidy data 是一种结构化数据的组织方式,使得数据分析和可视化等操作更加简单、直观和有效。它有助于减少数据的混乱和复杂性,并促进数据的整洁性和易用性。 + +- 每个变量一列 +- 每个观察一行 +- 每个表单一个表 + +## Excel主要学习内容 + +- 常用函数 +- 数据筛选/排序 +- 条件格式化 +- 数据透视表/图 + +## 常用函数 + +### 引用位置 + +- 相对引用 + - 相对引用是默认的引用类型。 + - 当公式被复制到其他单元格时,引用的单元格会相对移动。 + +``` +=A1 # 在 B1 单元格中的公式,引用了 A1 单元格的值 +=B1+C1 # 在 D1 单元格中的公式,引用了 B1 和 C1 单元格的值 +``` + +### 绝对引用 + +- 绝对引用固定了单元格的地址,不会随公式的复制而改变。 + +``` +=$A$1 # 在 B1 单元格中的公式,始终引用 A1 单元格的值 +``` + + +## 常用函数 + +- SUM:求和 +- AVERAGE:求平均值 +- MAX:求最大值 +- MIN:求最小值 + + +## 常用函数 + +- COUNT:计数非空单元格 +- COUNTA:计数非空单元格(包括文本) +- COUNTIF:根据条件计数 +- SUMIF:根据条件求和 +- AVERAGEIF:根据条件求平均值 + + +## 常用函数 + +- VLOOKUP:垂直查找 +- HLOOKUP:水平查找 +- INDEX:返回指定位置的值 +- MATCH:查找值在区域中的位置 +- IF:条件判断函数 + + +## 常用函数 + +- CONCATENATE:连接多个文本字符串 +- LEFT:提取文本左边的字符 +- RIGHT:提取文本右边的字符 +- MID:提取文本中间的字符 +- TEXT:将数值格式化为文本 + + +## 常用函数 + +- ROUND:四舍五入到指定位数 +- ROUNDUP:向上取整 +- ROUNDDOWN:向下取整 + + +## 常用函数 + +- TODAY:返回当前日期 +- NOW:返回当前日期和时间 +- DATE:返回指定年、月、日的日期 +- TIME:返回指定小时、分钟、秒的时间 + +## 欢迎讨论!{.center} + + +`r rmdify::slideend(wechat = FALSE, type = "public", tel = FALSE, thislink = "https://drwater.rcees.ac.cn/course/public/RWEP/@PUB/SD/")` diff --git a/SD/20240321_9_课后作业/_extensions b/SD/20240321_9_课后作业/_extensions new file mode 120000 index 0000000..74119e3 --- /dev/null +++ b/SD/20240321_9_课后作业/_extensions @@ -0,0 +1 @@ +../../_extensions \ No newline at end of file diff --git a/SD/20240321_9_课后作业/index.qmd b/SD/20240321_9_课后作业/index.qmd new file mode 100644 index 0000000..0114e1a --- /dev/null +++ b/SD/20240321_9_课后作业/index.qmd @@ -0,0 +1,83 @@ +--- +title: "课后作业6" +subtitle: 《区域水环境污染数据分析实践》
Data analysis practice of regional water environment pollution +author: 苏命、王为东
中国科学院大学资源与环境学院
中国科学院生态环境研究中心 +date: today +lang: zh +format: + revealjs: + theme: dark + slide-number: true + chalkboard: + buttons: true + preview-links: auto + lang: zh + toc: true + toc-depth: 1 + toc-title: 大纲 + logo: ./_extensions/inst/img/ucaslogo.png + css: ./_extensions/inst/css/revealjs.css + pointer: + key: "p" + color: "#32cd32" + pointerSize: 18 +revealjs-plugins: + - pointer +filters: + - d2 +--- + +```{r} +#| include: false +#| cache: false +lang <- "cn" +require(tidyverse) +require(learnr) +``` + +## [第6次课后作业](第6次课后作业_模板.html) + +1. 如何在 R 中将数字 10 赋值给变量 x? +2. 在 R 中,如何创建一个包含数字 1 到 5 的向量? +3. 编写一个条件语句,如果变量 age 大于等于 18,则打印 "成年人",否则打印 "未成年人"。 +4. 使用 for 循环打印从 1 到 10 的整数。 +5. 编写一个名为 addition 的函数,接受两个参数 a 和 b,返回它们的和。 +6. 创建一个列表,包含三个元素:一个数字向量、一个字符向量和一个逻辑向量。 +7. 使用 read.csv() 函数读取名为 data.csv 的 CSV 文件,并将数据存储在一个名为 data 的数据框中。 +8. 从数据框中选择前五行,并将结果存储在一个新的数据框中。 +9. 将字符串 "hello world" 转换为大写。 +10. 从数据框中选择 score 列大于等于 90 的行。 + +## **data.csv**内容 + +``` +name,age,score +Alice,25,85 +Bob,30,92 +Charlie,28,89 +David,22,95 +Eva,35,87 +Frank,27,91 +Grace,29,88 +Helen,26,93 +Ivan,31,86 +Jack,24,94 +Kelly,32,89 +Lily,28,90 +Mike,33,85 +Nancy,27,92 +Olivia,34,88 +Peter,29,93 +Queen,25,89 +Ryan,30,94 +Samantha,26,91 +Tom,31,87 + +``` + + +## 欢迎讨论!{.center} + + +`r rmdify::slideend(wechat = FALSE, type = "public", tel = FALSE, thislink = "https://drwater.rcees.ac.cn/course/public/RWEP/@PUB/SD/")` + diff --git a/SD/20240321_9_课后作业/第6次课后作业_模板.qmd b/SD/20240321_9_课后作业/第6次课后作业_模板.qmd new file mode 100644 index 0000000..fa85bac --- /dev/null +++ b/SD/20240321_9_课后作业/第6次课后作业_模板.qmd @@ -0,0 +1,42 @@ +--- +title: 课后作业6 +author: 姓名 +format: html +--- + + +# 示例问题,在R中输出`1+2+3+...+100`的结果 + +采用`for`循环完成,代码如下: + +```{r} +total <- 0 +for (i in 1:100) { + total <- total + i +} +total +``` + + +# 如何在 R 中将数字 10 赋值给变量 x? + + +# 在 R 中,如何创建一个包含数字 1 到 5 的向量? + +# 编写一个条件语句,如果变量 age 大于等于 18,则打印 "成年人",否则打印 "未成年人"。 + +# 使用 for 循环打印从 1 到 10 的整数。 + +# 编写一个名为 addition 的函数,接受两个参数 a 和 b,返回它们的和。 + +# 创建一个列表,包含三个元素:一个数字向量、一个字符向量和一个逻辑向量。 + +# 使用 read.csv() 函数读取名为 data.csv 的 CSV 文件,并将数据存储在一个名为 data 的数据框中。 + +# 从数据框中选择前五行,并将结果存储在一个新的数据框中。 + +# 将字符串 "hello world" 转换为大写。 + +# 从数据框中选择 score 列大于等于 90 的行。 + + diff --git a/SD/index.qmd b/SD/index.qmd new file mode 100644 index 0000000..f2a4ff9 --- /dev/null +++ b/SD/index.qmd @@ -0,0 +1,32 @@ +--- +subtitle: "课件" +--- + +```{r} +#| include: false +require(drwateR) +require(rmdify) +rmdify::rmd_init() +knitr::opts_chunk$set(echo = TRUE) +``` + +```{r} +#| output: asis +#| echo: false +#| message: false + +data.frame(fd = dir(".", pattern = "[-_]")) |> + dplyr::filter(!grepl("_files", fd)) |> + dplyr::mutate(fn = purrr::map_chr(fd, ~ file.path(.x, dir(.x, + pattern = "index.qmd|index.html"))[1])) |> + dplyr::transmute(htmlstr = purrr::map2_chr(fn, fd, ~ paste0("## [", .y, "](", .x, ")\n\n", + ifelse(!grepl("qmd$", .x), "", + paste0("\n\n"))))) |> + dplyr::pull(htmlstr) |> + paste(collapse = "") |> + cat() +``` diff --git a/_quarto.yml b/_quarto.yml new file mode 100644 index 0000000..656e14c --- /dev/null +++ b/_quarto.yml @@ -0,0 +1,52 @@ +project: + type: website + output-dir: www/ + render: + - "*.qmd" + - "!chp*.qmd" + - "!analysis/" + - "!*ignored.qmd" + - "!*ignored/" + + +title: "区域水环境污染数据分析实践" +lang: zh +date: today +bibliography: [BB/Ref.bib, BB/localRef.bib] + +website: + title: "Version: {{< var branch >}}" + reader-mode: true + site-url: https://drwater.rcees.ac.cn/{{< var projtype >}}/{{< var pubtype >}}/{{< var reponame >}}/@{{< var branch >}} + repo-url: https://drwater.rcees.ac.cn/git/{{< var projtype >}}/{{< var reponame >}}/src/branch/{{< var branch >}} + repo-actions: [edit, source, issue] + page-navigation: true + page-footer: "Copyright 2024, [Ming Su](https://drwater.rcees.ac.cn)" + navbar: + background: "light" + search: true + right: + - icon: house + text: "Home" + file: index.qmd + - text: "Slides" + file: SD/index.qmd + - text: "About" + file: about.qmd + - icon: git + menu: + - text: Edit + url: https://drwater.rcees.ac.cn/git/{{< var projtype >}}/{{< var reponame >}}/_edit/ + - text: Issue + url: https://drwater.rcees.ac.cn/git/{{< var projtype >}}/{{< var reponame >}}/issues + comments: + hypothesis: + theme: clean + openSidebar: false + +format: + html: + theme: cosmo + css: _extensions/inst/css/style.css + toc: true + code-link: true diff --git a/about.qmd b/about.qmd new file mode 100644 index 0000000..07c5e7f --- /dev/null +++ b/about.qmd @@ -0,0 +1,5 @@ +--- +title: "About" +--- + +About this site diff --git a/apple-touch-icon.png b/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2c096a335ba6039d7bc82f322d741daa3a3625 GIT binary patch literal 73786 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 literal 0 HcmV?d00001 diff --git a/data/README.md b/data/README.md new file mode 100644 index 0000000..3ce1b51 --- /dev/null +++ b/data/README.md @@ -0,0 +1,3 @@ +# 数据文件夹 + +存放规则 diff --git a/data/course_member.xlsx b/data/course_member.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..73f9673d750cf01cda9d432bfa6787b102ac834b GIT binary patch literal 14178 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 + collect() + airqualitydf <- tbl(conn, "airqualitydf") |> + filter(datetime > "2024-03-18") |> + filter(datetime < "2024-03-20") |> + collect() + writexl::write_xlsx(list(metadf = metadf, + airqualitydf = airqualitydf), + "../data/airquality.xlsx") +} +``` + diff --git a/index.qmd b/index.qmd new file mode 100644 index 0000000..421e0e1 --- /dev/null +++ b/index.qmd @@ -0,0 +1,16 @@ +--- +subtitle: "课程简介" +--- + + +# 基本信息 + +- 课程名称:区域水环境污染数据分析实践
Data analysis practice of regional water environment pollution +- 授课教师:王为东、苏命 +- 课程教室:教二楼-138 +- 课程时间: + - 03月21日8:30-11:20 + - 03月26日8:30-11:20 + - 03月28日8:30-11:20 + - 04月02日8:30-11:20 + - 04月09日8:30-11:20