# 安装(仅需运行一次)
install.packages("rgbif")11 生态学公共数据采集数据方法
11.1 引言
在“大数据”时代,生态学研究正从单一的样地调查转向全球尺度的整合分析。公共数据(Public Data)是指由政府机构、科研项目、国际组织或公民科学家公开发布的数据资源。利用这些现成的数据,研究者可以跨越时空限制,探索宏观生态学规律,或为自己的野外调查提供背景支撑。
11.2 公共数据的主要类型
生态学领域拥有丰富的开放获取数据库,主要包括以下几类:
11.2.1 1. 生物多样性与分布数据
- GBIF (Global Biodiversity Information Facility):全球最大的生物多样性数据网络,提供数以亿计的物种出现记录。
- eBird / iNaturalist:典型的公民科学数据,由全球志愿者提交的鸟类观测或生物鉴定照片组成。
11.2.2 2. 遥感与地理信息数据
- Landsat / Sentinel:提供长序列、高分辨率的地表覆盖和植被指数数据。
- Google Earth Engine (GEE):云端地理信息处理平台,集成了海量的遥感数据集。
11.2.3 3. 气象与环境监测数据
- WorldClim:提供全球高分辨率的历史、当前及未来气候预测数据。
- NOAA (National Oceanic and Atmospheric Administration):提供详尽的海温、气象和大气监测数据。
11.2.4 4. 分子生态学数据
- NCBI (GenBank):全球最权威的 DNA 序列数据库。
- BOLD (Barcode of Life Data System):专门用于物种条形码鉴定的数据库。
11.3 获取公共数据的主要途径
11.3.1 1. 数据门户手动下载
大多数数据库(如 GBIF)都提供直观的 Web 界面,用户可以通过筛选物种、区域和时间段,直接下载 CSV 或 Darwin Core 格式的数据。
11.3.2 2. API 接口与编程获取
对于大规模数据采集,编程获取是更高效的选择: * R 语言生态:利用 rgbif 库连接 GBIF,利用 rnoaa 获取气象数据。 * Python 生态:利用 pygbif 或直接调用 RESTful API。
11.3.3 3. 网络爬虫 (Web Scraping)
当数据分散在没有提供 API 的网页上时,可以使用 Python 的 BeautifulSoup 或 Scrapy 库进行抓取。但需注意遵守网站的 robots.txt 协议。
11.4 公共数据的使用规范与伦理
- 数据引用:公共数据并非“无主之地”。在使用数据时,必须引用原始数据集的 DOI 或按照数据库要求的格式进行致谢。
- 理解协议:注意数据遵循的 CC 协议(如 CC BY 4.0 或 CC0)。某些数据可能禁止商业用途。
11.5 公共数据的挑战与质量控制
公共数据虽然强大,但也存在“陷阱”: * 分类学偏差:某些明星物种(如大熊猫、鸟类)的数据远多于隐秘物种。 * 空间偏差:交通便利地区或发达国家的数据记录往往更密集。 * 标准化问题:不同来源的数据格式不一。建议遵循 Darwin Core (DwC) 等国际标准进行数据清洗和整合。
11.6 R 代码示例:从公共数据库下载生态数据
下面演示如何用 R 从两个常用的公共数据库获取数据:GBIF(物种分布数据)和 WorldClim(全球气候数据)。
11.6.1 从 GBIF 下载物种分布数据
GBIF 是全球最大的生物多样性数据平台。R 的 rgbif 包提供了便捷的 API 接口。
library(rgbif)
library(tibble)
# 搜索物种:以白鹭 (Egretta garzetta) 为例
# 先查找物种的 GBIF 分类编号
species_key <- name_backbone(name = "Egretta garzetta")$usageKey
species_key
# 下载中国范围内的观测记录(限制 500 条)
egret_data <- occ_search(
taxonKey = species_key,
country = "CN", # 国家代码:中国
limit = 500, # 最多返回 500 条
hasCoordinate = TRUE # 仅保留有经纬度的记录
)
# 提取数据表
egret_df <- as_tibble(egret_data$data)
# 查看关键列
egret_df[, c("species", "decimalLatitude", "decimalLongitude",
"eventDate", "stateProvince")]# 简单可视化:在地图上展示分布点
library(ggplot2)
ggplot(egret_df, aes(x = decimalLongitude, y = decimalLatitude)) +
borders("world", regions = "China", fill = "grey90", colour = "grey70") +
geom_point(color = "forestgreen", alpha = 0.5, size = 1.5) +
coord_quickmap(xlim = c(73, 135), ylim = c(18, 54)) +
labs(
title = "白鹭 (Egretta garzetta) 在中国的 GBIF 记录",
x = "经度", y = "纬度"
) +
theme_minimal()- 下载大量数据时需要注册 GBIF 账号,并使用
occ_download()提交异步下载请求 - 发表论文时必须引用 GBIF 数据集的 DOI
- 公民科学数据可能存在空间偏差(城市和道路附近记录更多),分析时需注意
11.6.2 从 WorldClim 下载气候数据
WorldClim 提供全球高分辨率的气候栅格数据。R 的 geodata 包可以直接下载。
# 安装(仅需运行一次)
install.packages("geodata")library(geodata)
library(terra)
# 下载全球生物气候变量(分辨率 10 分,约 18 km)
# 数据会缓存到本地 path 目录,下次无需重复下载
bioclim <- worldclim_global(
var = "bio", # 19 个生物气候变量
res = 10, # 分辨率:10 arc-minutes
path = "data" # 本地保存路径
)
# 查看数据基本信息
bioclim# 提取中国区域的年均温(BIO1)和年降水量(BIO12)
china_extent <- ext(73, 135, 18, 54) # 中国大致经纬度范围
bio1 <- crop(bioclim[[1]], china_extent) # BIO1: 年均温 (°C × 10)
bio12 <- crop(bioclim[[12]], china_extent) # BIO12: 年降水量 (mm)
# 可视化年均温
plot(bio1, main = "中国年均温 (BIO1, °C × 10)")# 提取物种分布点对应的气候数据
# 将白鹭的经纬度转为空间点,提取对应的气候值
library(dplyr)
egret_coords <- egret_df |>
filter(!is.na(decimalLongitude), !is.na(decimalLatitude)) |>
select(decimalLongitude, decimalLatitude)
# 创建空间向量并提取气候值
egret_points <- vect(egret_coords, geom = c("decimalLongitude", "decimalLatitude"))
climate_values <- extract(bioclim, egret_points)
# 合并物种数据与气候数据
egret_climate <- bind_cols(egret_coords, as_tibble(climate_values))
head(egret_climate)下载的公共数据建议保存到项目的 data/ 目录下,并在 README 中注明数据来源和下载日期:
# 保存处理后的数据
write_csv(egret_climate, "data/egret_climate_data.csv")这样既方便团队协作,也满足科研可重复性的要求。
11.7 总结
公共数据采集方法是现代生态学家的必备技能。它不仅降低了数据获取的成本,更促进了科学研究的透明度与可重复性。通过将公共数据与自己的观测或实验数据相结合,研究者能够以更广阔的视角审视自然界的复杂过程。