数据采集与预处理
生态学数据采集与预处理方法指南
1 数据采集与预处理——生态学数据采集与预处理方法指南
开课时间:2027年春季学期 | 课时:32学时 | 授课对象:生态学大二本科生
1.1 这门课学什么?
简单说:怎么从真实世界里把数据收上来,然后把它们洗干净、整理好,让它们能用来回答你的科学问题。
听起来很基础对吧?但现实是,大多数研究生的第一篇论文被导师打回来重写,不是因为科学结论不对,而是因为数据管理混乱——找不到原始数据了、变量命名混乱了、三个月前做的分析步骤忘了、交给审稿人的代码跑不起来了……
这些问题在课程结束时你都能解决。
这门课会教你:
- 如何设计一套科学的采样方案(不是随便找个地方挖土)
- 如何用 R 和 Python 处理从野外采回来的”脏数据”
- 如何用版本控制管理你的分析代码(再也不会”data_final_v3_真的最终版”)
- 如何写一份能让审稿人无话可说的可重复性报告
1.2 为什么这门课重要?
1.2.1 一个真实的故事
2019 年,某生态学实验室的学生在毕业前两个月发现:服务器坏了,三个月的野外调查数据全部丢失。不是被黑客攻击了,而是硬盘老化。那个学生花了两个月重新采样,但最后论文还是延期了。
如果他们用了 3-2-1 备份原则(数据三份副本、两种介质、一份异地),这场灾难本来可以避免。
这不是个例。2016 年《Nature》调查了 1500 名科研人员,发现超过 70% 的人曾经无法重复别人的实验,超过 50% 的人甚至无法重复自己的实验(Baker, 2016, Nature, 533: 452–454)。大多数问题不是科学问题,而是数据管理问题。
1.2.2 学会这两件事,让你的研究经得起检验
第一件事:把数据管好。
好的数据管理不是”把文件存好”那么简单。它意味着:
- 原始数据永远不动,所有的清洗和转换都通过脚本完成
- 每一步分析都有记录,任何人(审稿人、合作者、三年后的你自己)都能从头复现
- 数据和代码都有版本控制,改错了随时能回退
第二件事:把数据洗好。
野外采回来的数据通常是”脏”的——有缺失值、有异常值、格式不统一、单位混乱。数据清洗就是把”原材料”变成”可用数据”的过程。听起来简单,但:
- 缺失值到底删掉还是插补?不同方法会给出截然不同的结论
- 异常值是真的异常还是测量错误?处理方式不同会改变你的主要发现
- 宽格式和长格式选哪个?决定了你用哪个 R 包、怎么绑图
这些问题没有标准答案,但这门课会教你如何做出合理的选择。
1.3 课程学习路径
这门课分六个阶段,带你从零基础走到能独立完成一个真实项目:
📦 第一阶段:基础技能(第1-2周)
│ 先把工具装好,把基本功打扎实
│
├── 0101 什么是数据采集(本章)
│ 搞清楚数据采集在科研中的位置
├── 0102 什么是数据预处理
│ 了解数据清洗和转换的核心概念
├── 0103 数据管理与研究工作流
│ 学会用正确的文件夹结构管理项目
└── 0104 环境搭建
安装 R、RStudio、Python、Git、Quarto
📊 第二阶段:R 语言基础(第3-5周)
│ R 是生态学数据分析的主流语言,必须熟练掌握
│
├── 0105 R 入门(基础语法和数据结构)
│ 从变量赋值到函数调用
├── 0106 数据处理(R tidyverse 三件套)
│ 数据清洗和转换的核心技能
└── 0107 Git 版本控制与团队协作
从"代码管理混乱"到"协作无压力"
🌍 第三阶段:数据采集方法(第6-8周)
│ 不同来源的数据有不同的采集方法
│
├── 0201 数据采集方法
│ 观测、实验、模型、公共数据
├── 0202 野外调查数据采集
│ 样方调查、传感器、自动监测
├── 0203 控制实验设计
│ 随机区组、裂区、因子设计
├── 0204 生态学建模
│ 统计模型、过程模型
├── 0205 公共数据资源
│ GBIF、WorldClim、NEON
├── 0206 参考文献管理
│ Zotero + R Markdown 写作
├── 0207 荟萃分析
│ 如何综合多研究结果
└── 0208 Python 网络数据采集
爬虫、API 调用
🧹 第四阶段:数据预处理(第9-12周)
│ 这是课程的核心部分
│
├── 0301 数据清洗
│ 缺失值、异常值、重复记录
├── 0302 特征工程
│ 数据转换、标准化、编码
├── 0303 数据质量评估
│ 完整性、一致性、准确性
├── 0304 生态学专项预处理
│ 空间数据、分类数据、时间序列
└── 0305 机器学习预处理
特征缩放、编码、Pipeline
📈 第五阶段:数据可视化(第13-14周)
│ 让数据自己说话
│
├── 0501 可视化基础
│ ggplot2 入门
└── 0502 探索性数据分析(EDA)
数据探索、模式发现
🚀 第六阶段:综合项目(第15-16周)
│ 把所有技能串起来
│
├── 0601 案例研究
│ 从头到尾走一遍完整流程
├── 0602 项目工作坊
│ 小组项目实施
└── 0603 课程总结
知识回顾、进阶资源推荐
1.4 这门课的四大特色
1.4.1 特色一:真实生态学数据,不是”学生成绩表”
大多数数据分析教程用的是”学生成绩”或”电商数据”。我们的案例全部来自真实的生态学研究:
- 马尾松混交林土壤孔隙结构调查(广西大学林学院)
- 亚热带森林生物多样性-生产力关系(基于 Cedar Creek 数据)
- 中国北方草地遥感 NDVI 时间序列分析
- 物种分布模型预测濒危植物潜在分布区
学完这门课,你带走的技能可以直接用在你的研究里。
1.4.2 特色二:从采样到报告,全流程覆盖
很多课程只教数据分析,但忽略了上游的采样设计和下游的报告撰写。我们覆盖完整链条:
采样设计 → 数据采集 → 数据录入 → 数据清洗 → 分析建模 → 可视化 → 报告撰写
↑ ↓
←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←
这意味着你学完这门课,就知道一个完整的研究项目数据部分应该怎么做。
1.4.3 特色三:小班协作,模拟真实科研场景
课程项目需要 3-5 人小组完成,模拟真实的科研协作场景:
- 每个人负责不同的部分(采样、数据清洗、分析、可视化)
- 用 GitHub 管理代码协作(你改的代码和别人的不冲突)
- 最终以 Quarto 报告形式呈现,所有代码和数据公开可查
这和你未来研究生阶段的科研协作方式完全一致。
1.4.4 特色四:学完能用,不只是”懂了”
课程设计强调可操作性和即时反馈:
- 每节课都有配套的练习数据和代码框架
- 小组项目有明确的目标和验收标准
- 老师提供即时反馈,不让错误累积
1.5 先修知识:零基础可以选吗?
可以。 这门课假设你是零基础。
但”零基础”也分不同情况,以下是我们对你的实际预期:
1.5.1 预期一:会用电脑,会用 Excel
你不需要会编程,但你需要:
- 能熟练操作文件夹(创建、复制、移动、重命名)
- 能在 Excel 中录入数据、保存为 CSV 格式
- 能下载和安装软件(会有详细图文教程)
如果这些你都不会,先花一天熟悉 Windows 基本操作。
1.5.2 预期二:能看懂基础英语
课程主要教材:
- 《R for Data Science》(免费在线阅读,全英文但文字简单)
- 课件和讲义全部中文
你不需要能写英文,但你需要能借助翻译工具看懂英文技术文档。如果这让你不舒服,开学前列一张常用生态学词汇的中英文对照表,几次之后就习惯了。
1.5.3 预期三:愿意动手敲代码
这门课有大量编程练习。如果你一想到要写代码就头疼,选课前三思。
好消息是:R 入门比大多数人想象的简单。跟着课程走,两三周后你就能写出有实际作用的代码了。
1.5.4 预期四:知道什么是”生态学”
如果你学过《生态学》或《普通生物学》的基础课程,会更容易理解课程中的案例。但不是必须的——案例中的生态学概念老师会解释,你也可以随时查阅。
1.6 评分方式:怎么才算”学会了”?
课程采用项目制评分,没有期末考试:
| 组成部分 | 占比 | 说明 |
|---|---|---|
| 课后练习 | 30% | 每章配套练习,检验基本概念和技能 |
| 课堂参与 | 10% | 提问、讨论、同伴评审 |
| 小组项目 | 50% | 从数据采集到报告的完整项目 |
| 个人反思 | 10% | 学习日志,记录成长和困惑 |
小组项目是最重要的部分。 项目要求:
- 有真实数据:来自你自己的研究或课程提供的模拟数据
- 有完整流程:采样→采集→清洗→分析→可视化→报告,每步都要有
- 代码可运行:所有代码在 GitHub 上公开,运行一次出结果
- 报告可重复:用 Quarto 撰写,点击一下从数据到 PDF 报告
评分标准不是”结论对不对”,而是”流程规不规范、数据可不可信、代码能不能跑”。
1.7 开课前你需要准备什么
1.7.1 必须安装的软件(免费)
这些软件在第一次上课前必须安装好。我们会在第一周提供详细的安装教程。
| 软件 | 版本 | 安装地址 | 备注 |
|---|---|---|---|
| R | ≥4.3.0 | https://cran.r-project.org/ | Windows/Mac/Linux |
| RStudio | ≥2023.12 | https://posit.co/download/rstudio-desktop/ | R 的 IDE,必装 |
| Python | ≥3.10 | https://www.python.org/downloads/ | 数据科学套装 |
| Git | 最新版 | https://git-scm.com/downloads | 版本控制 |
| Quarto | 最新版 | https://quarto.org/docs/download/ | 报告撰写工具 |
1.7.2 推荐准备的硬件
- 自己的笔记本电脑(至少 8GB 内存,16GB 更好)
- 一个 500GB 以上的移动硬盘或大 U 盘(用于数据备份)
- 学校邮箱(用于注册 GitHub Education,享受私有仓库免费额度)
1.7.3 推荐提前阅读(选读)
如果你想在开课前先热热身,推荐阅读:
- 《R for Data Science》的前六章(https://r4ds.had.co.nz/intro.html)
- 《The Art of Data Science》的前三章
- 这门课的 GitHub 仓库 README
1.8 优秀学长项目展示
这些是往届研究生的课程项目(已获授权),展示课程技能在真实研究中的应用:
1.8.1 项目一:土壤呼吸数据标准化流程 ⭐
团队:2019级生态学硕士组(3人)
背景:在三个自然保护区开展了为期一年的土壤呼吸监测,积累了 5000+ 条手动测量记录和配套气象数据。
项目内容:开发了一套从野外纸质记录→数据录入→异常值检测→格式转换的自动化流程。
核心成果:将原来需要 2天 的月度数据整理工作缩短至 2小时。
技术栈:
# 用 R Markdown 生成了可重复的质量报告
rmarkdown::render("soil_respiration_report.Rmd")
# 自动检测异常值(超过均值±3SD的记录)
outliers <- soil_data |>
group_by(site, month) |>
filter(abs(value - mean(value)) > 3 * sd(value))
# 一键生成质量诊断图
ggplot(outliers, aes(x = date, y = value, color = site)) +
geom_point(size = 3) +
geom_hline(aes(yintercept = upper_bound), linetype = "dashed")链接:https://github.com/Data-collection-and-preprocessing/soil-respiration-pipeline
1.8.2 项目二:鸟类多样性公开数据荟萃分析 🦅
团队:2021级生态学硕士组(4人)
背景:想研究广西北部湾沿海湿地的鸟类群落动态,但没有时间和经费做自己的调查。
项目内容:整合 GBIF 和 eBird 的公开数据,处理了超过 15万条 观测记录。
核心成果:建立了广西沿海湿地鸟类多样性数据库,并分析了十年间的群落动态变化。
技术栈:
# 从 GBIF API 批量下载物种分布数据
library(rgbif)
occ_download(
pred("country", "CN"),
pred(" genus", "Ciconia"),
format = "SIMPLE_CSV"
)
# 物种名称标准化(解决同义词问题)
library(taxadb)
species_clean <- taxa |>
filter_name匹配(gbif_backbone)
# 计算多样性指数
library(vegan)
diversity_result <- diversity(species_matrix, index = "shannon")链接:https://github.com/Data-collection-and-preprocessing/bird-diversity-metaanalysis
1.8.3 项目三:植物功能性状数据库 📚
团队:2020级林业硕士组(4人)
背景:课题组近五年采集了大量植物叶片功能性状数据,但散落在 Excel 文件夹、纸质记录本和合作实验室的邮件附件里。
项目内容:构建了一个规范化的 SQLite 数据库,实现多源数据的统一存储、查询和导出。
核心成果:把课题组五年积累的 2000+ 条植物功能性状记录从”找不着”变成”随时查”。
技术栈:
# 用 R Shiny 做了数据录入界面
library(shiny)
shinyApp(
ui = fluidPage(
textInput("species", "物种名"),
numericInput("leaf_area", "叶面积 (cm²)", value = NA),
numericInput("SLA", "比叶面积 (m²/kg)", value = NA),
actionButton("submit", "提交记录")
),
server = function(input, output) {
observeEvent(input$submit, {
dbExecute(con, "INSERT INTO leaf_traits VALUES (?, ?, ?)",
list(input$species, input$leaf_area, input$SLA))
})
}
)链接:https://github.com/Data-collection-and-preprocessing/plant-trait-database
1.9 常见问题(FAQ)
1.9.1 Q1:课程需要多少时间?会不会太重?
A:这门课每周有 2 学时课堂讲授 + 2 学时上机实践,外加每周约 2-4 小时的课外练习时间。
如果你认真跟着走,不会太重。但如果你等到最后一周才赶作业,会非常痛苦。
课程强调”细水长流”,而不是”期末突击”。建议每周按时完成练习,不要堆积。
1.9.2 Q2:选这门课需要自带数据吗?
A:不需要。 课程会提供模拟数据集供练习使用。
但如果你有自己正在采集或已经采集好的数据,可以把小组项目基于自己的数据来做——这样你课程结束时就同时完成了课程作业和自己的数据预处理工作,一举两得。
1.9.3 Q3:R 和 Python 要同时学吗?
A:不用同时学,以 R 为主。
课程设计以 R 为核心,因为 tidyverse 生态让数据操作非常直观,而且 R 在生态学统计建模领域包最全(vegan、lme4、brms 等)。
Python 在机器学习和大数据场景更强,会在 0305(机器学习预处理)和 0208(Python 网络采集)章节用到。如果你对 Python 感兴趣,可以额外学习;如果不感兴趣,只掌握 R 也完全够用。
1.9.4 Q4:小组项目可以自己做吗?
A:不建议。 小组协作本身就是课程要培养的核心能力之一。
在科研中,很少有项目是完全独立完成的——你需要和导师、合作者、数据管理员沟通协调。小组项目提供了一个安全的练习环境,犯了错也不会有严重后果。
当然,团队协作需要磨合。如果你的小组内部出现问题,及时联系老师,我们会帮你协调。
1.9.5 Q5:课程内容和我的研究方向不匹配怎么办?
A:很可能没那么不匹配。
数据采集和预处理是所有生态学研究的基础技能。无论你是做植物、动物、土壤、气候还是生态系统,你都需要采集数据、清洗数据、分析数据。
如果你真的觉得课程内容完全不符合你的研究方向,联系老师,我们可以帮你定制一个基于你自己数据的练习项目。
1.9.6 Q6:课程结束后,我应该继续学什么?
A:三个推荐方向:
方向一:统计建模——如果你想深入数据分析,学好线性模型(lm)、广义线性模型(glm)、混合效应模型(lme4)。推荐《Statistical Rethinking》和《Generalized Additive Models》。
方向二:空间分析——如果你做遥感或 GIS,学 QGIS、sf 包和terra包。推荐《Geocomputation with R》。
方向三:机器学习——如果你对预测建模感兴趣,学 tidymodels 和 caret。推荐《Hands-On Machine Learning with R》。
1.10 如何获取帮助
1.10.1 遇到问题时的正确顺序
不要一遇到问题就去找老师。按这个顺序来:
- 自己解决(5-10 分钟):仔细读报错信息,搜索引擎查一下
- 课程群提问:附上可复现的代码(不是截图,是代码文本),老师或同学帮你看
- GitHub Issue:如果是课程资料本身的问题(错误、缺失、过时),提 Issue
- 找老师:以上都没解决的情况
1.10.2 联系老师
- 邮箱:huaqingliu@gxu.edu.cn(最好用学校邮箱)
- 办公地点:广西大学林学院 XXX 室
- 答疑时间:每周三下午 14:00-17:00(请提前邮件预约)
1.10.3 课程资源
| 资源 | 地址 |
|---|---|
| 课程 GitHub 仓库 | https://github.com/Data-collection-and-preprocessing/Data-collection-and-preprocessing-2027-Spring |
| 课程课件 | 同上仓库的 docs/ 目录 |
| 数据下载 | 同上仓库的 data/ 目录 |
| 讨论区 | GitHub Issues |
1.11 课后练习:开课前准备检查清单
在第一次上课之前,请完成以下任务:
1.11.1 ✅ 第一步:安装软件(预计 2-3 小时)
安装清单:
验证安装成功:打开 RStudio,在控制台输入 sessionInfo(),回车,看到 R 版本信息即成功。
1.11.2 ✅ 第二步:注册账号(预计 30 分钟)
1.11.3 ✅ 第三步:试运行第一个 R 脚本(预计 1 小时)
在 RStudio 中新建一个 R Script,输入以下代码并运行:
# 安装课程需要的包(需要几分钟)
install.packages("tidyverse")
# 加载包
library(tidyverse)
# 运行一个简单的数据分析
iris |>
group_by(Species) |>
summarise(
mean_sepal_length = mean(Sepal.Length),
sd_sepal_length = sd(Sepal.Length),
n = n()
) |>
ggplot(aes(x = Species, y = mean_sepal_length)) +
geom_col(fill = "steelblue") +
geom_errorbar(
aes(ymin = mean_sepal_length - sd_sepal_length,
ymax = mean_sepal_length + sd_sepal_length),
width = 0.3
) +
labs(
title = "Iris 花瓣长度按物种分组统计",
x = "物种",
y = "平均花瓣长度 (cm)"
) +
theme_minimal()如果你看到了图表,恭喜你,环境搭建成功!🎉
1.11.4 ✅ 第四步:阅读课程材料(预计 2 小时)
1.11.5 ✅ 第五步:准备数据(可选,但强烈推荐)
如果你有正在做或计划做的研究,问自己几个问题:
- 我要采集/已经采集了什么数据?
- 这些数据的变量是什么?单位是什么?
- 数据现在存在哪里?格式是什么(Excel?纸质记录本?)?
- 我预计会遇到什么数据质量问题(缺失值?异常值?)?
在第一堂课前把这些想清楚,能让你的小组项目更有针对性。
准备好之后,我们第一堂课见!👋
课程教师:刘华清 广西大学林学院 huaqingliu@gxu.edu.cn