2. 海洋环境数据获取途径

做海洋环境数据分析,第一步永远不是打开代码,而是先搞清楚“数据从哪里来、长什么样、能不能用”。海洋数据不像电商数据那样随手可得,它往往由各国海洋机构、卫星计划、浮标阵列和科考航次长期积累,再通过公开平台对外发布。本节围绕三个最常用的公开数据平台——美国国家海洋和大气管理局(NOAA)、欧洲哥白尼计划(Copernicus)和中国海洋数据中心(CODC)——讲清楚它们各自提供什么、怎么下载、下载下来是什么格式,以及如何读懂随数据附带的元数据。

一、三个平台的分工与定位

NOAA 是覆盖最广的“老牌仓库”,旗下有 NCEI(国家环境信息中心)、NODC、NDBC 浮标系统等,提供海表温度、盐度、海流、潮位、风场、卫星高度计等多种产品,很多数据以 NetCDF 或 CSV 形式发布,适合做长时间序列分析。Copernicus 由欧盟运营,其海洋服务(CMEMS)以再分析产品(如 GLORYS、ORAS5)和卫星观测(海色、海温、海面高度)见长,产品网格规整、时间连续,是做区域海洋建模和气候分析的重要来源。中国海洋数据中心(CODC)由国家海洋信息中心建设,提供中国近海及全球部分海域的观测与再分析数据,对国内研究者而言,中文界面和本地化数据产品是它的优势。

选择平台时,先问自己三个问题:研究区域在哪里?需要的是观测还是再分析?时间分辨率和空间分辨率要求多少?例如研究中国近海表层温度的年际变化,CODC 和 Copernicus 的再分析产品可能更合适;研究某次台风过程的海面风场,NOAA 的卫星和浮标数据更直接。

三大公开海洋数据平台:定位、产品与获取路径 NOAA(美国) • NCEI / NDBC 浮标 / 卫星 • 海温、盐度、海流、潮位、风场 • 格式:NetCDF、CSV、GRIB • 特点:覆盖广、时间序列长 • 入口:ncei.noaa.gov • 适合:长时序、多要素观测 Copernicus(欧盟) • CMEMS 海洋服务 • 再分析:GLORYS、ORAS5 • 卫星:海色、海温、海面高度 • 格式:NetCDF(CF 规范) • 入口:marine.copernicus.eu • 适合:规整网格、建模分析 CODC(中国) • 国家海洋信息中心建设 • 中国近海观测与再分析 • 温盐、海流、水位、气象 • 格式:NetCDF、CSV、TXT • 入口:mds.nmdis.org.cn • 适合:国内近海、中文支持 统一获取流程 注册账号 → 检索数据集 → 选择时空范围与变量 → 提交下载 → 校验文件 → 读取元数据 常见数据格式 NetCDF:多维网格,自带变量与坐标 CSV / TXT:表格,适合站点观测 GRIB:气象海洋预报常用压缩格式 元数据必读字段 变量名、单位、坐标轴方向与范围 时间基准、缺测值(_FillValue) 数据来源、版本、引用与许可

二、下载流程:以 Copernicus 为例的实际操作

三个平台的下载逻辑大同小异,但 Copernicus 的流程最规范,适合作为入门范例。首先在 marine.copernicus.eu 注册账号,进入 Copernicus Marine Data Store,用产品目录按“变量—区域—时间”筛选。例如要获取 2015—2020 年南海 0—200 米深度的月平均温度,可在目录中定位到 GLORYS12V1 再分析产品,选择变量 thetao(位温),设定经度 105°E—120°E、纬度 5°N—22°N、深度 0—200 m、时间 2015-01 至 2020-12、时间分辨率 monthly。

提交后平台会生成下载任务,通常提供两种方式:网页直接下载 NetCDF 文件,或使用命令行工具 copernicusmarine 批量拉取。后者更适合大数据量场景,示例命令如下:

copernicusmarine subset \
  --dataset-id cmems_mod_glo_phy-thetao_anfc_0.083deg_P1M-m \
  --variable thetao \
  --minimum-longitude 105 --maximum-longitude 120 \
  --minimum-latitude 5 --maximum-latitude 22 \
  --minimum-depth 0 --maximum-depth 200 \
  --start-datetime 2015-01-01 --end-datetime 2020-12-31 \
  --output-directory ./data

下载完成后不要急着写分析代码,先做两件事:一是检查文件大小和变量数量是否与订单一致,二是用 ncdump -h 或 Python 的 xarray 打开文件查看结构。NOAA 和 CODC 的流程类似,只是检索界面和数据集命名不同;CODC 部分数据需要实名申请,审核通过后才能下载,这一点在规划研究进度时要提前考虑。

三、数据格式:NetCDF 为什么是海洋数据的主流

海洋数据大多是“多维网格”:经度、纬度、深度、时间四个维度,每个格点上存放温度、盐度、流速等变量。NetCDF 正是为这种结构设计的自描述格式,一个文件里既有数据数组,也有坐标轴定义、变量属性和全局属性。用 Python 读取非常直接:

import xarray as xr
ds = xr.open_dataset("thetao_2015_2020.nc")
print(ds)
# 典型输出包含 Dimensions: (time, depth, latitude, longitude)
# 以及变量 thetao(time, depth, latitude, longitude)

CSV 和 TXT 则多用于站点观测,比如某个浮标逐小时的海表温度记录,每行一个时间点,列分别是时间、经度、纬度、温度、质量标记。GRIB 常见于数值预报产品,压缩率高但需要专门库(如 cfgrib)读取。判断格式是否合适,关键看数据结构:规则网格优先 NetCDF,离散站点优先 CSV。

四、元数据解读:决定数据能不能用的关键

元数据是数据的“说明书”,读不懂元数据,后面的分析很可能建立在错误假设上。打开一个 NetCDF 文件,至少要确认以下几项:

  • 变量名与单位:thetao 是位温,单位通常是摄氏度;so 是盐度,单位可能是 1e-3 或 PSU,不同产品不一致,必须核对。
  • 坐标轴方向与范围:纬度是从南到北递增还是递减?经度是 0—360 还是 -180—180?这直接影响切片和绘图是否正确。
  • 时间基准:NetCDF 的时间常以“某参考时刻起的天数或小时数”存储,属性 units 会写明,如 days since 1950-01-01。忽略它就会把 2015 年读成 1950 年之后的某个数。
  • 缺测值:_FillValue 或 missing_value 标记无效格点,陆地和冰区常被填充为大数(如 9.969e36),分析前必须屏蔽。
  • 数据来源与版本:global attributes 中的 source、institution、version 决定引用方式和可复现性。
实用习惯:每下载一个数据集,先在笔记里记录“平台—产品名—版本—变量—时空范围—下载日期—文件校验值”,这份记录在论文方法和复现实验时非常有用。

五、一个完整的入门练习

建议用一个小任务把本节内容串起来:从 Copernicus 下载南海 2018 年 1 月表层温度月平均数据,用 xarray 打开,检查维度顺序和单位,把经度统一到 -180—180 区间,屏蔽缺测值,计算区域平均温度并画一张简单分布图。过程中如果发现温度值异常(比如出现 300 以上),大概率是单位或缺测值没处理;如果时间轴对不上,回头检查 units 属性。这个练习不需要复杂算法,但能让你真正走通“找数据—下数据—读数据—验数据”的完整链路,为后续分析打下可靠基础。