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 的 BeautifulSoupScrapy 库进行抓取。但需注意遵守网站的 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 接口。

# 安装(仅需运行一次)
install.packages("rgbif")
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()
ImportantGBIF 数据使用须知
  • 下载大量数据时需要注册 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)
Tip数据保存建议

下载的公共数据建议保存到项目的 data/ 目录下,并在 README 中注明数据来源和下载日期:

# 保存处理后的数据
write_csv(egret_climate, "data/egret_climate_data.csv")

这样既方便团队协作,也满足科研可重复性的要求。

11.7 总结

公共数据采集方法是现代生态学家的必备技能。它不仅降低了数据获取的成本,更促进了科学研究的透明度与可重复性。通过将公共数据与自己的观测或实验数据相结合,研究者能够以更广阔的视角审视自然界的复杂过程。