信息速览
IBTrACS 是全球热带气旋的合并档案。它不是一家机构的产品,而是把美国、日本、中国、印度、法国、澳大利亚、斐济、新西兰等地的官方最佳路径收进同一张表,一场风暴一行一时刻地摊开。截止 2026 年 10 月的版本是 v04r01,覆盖 1841 年至今,共 174 列。
它最容易被误读的地方,也是最值得写的地方:同一场风暴在表里有很多个强度。美国那一列说 115 节,日本那一列说 924 百帕、风速 110 节,中国那一列说 145 节——三个数都「对」,因为它们分别属于三家机构各自的档案。IBTrACS 做的事是并列,不是裁决。
这份条目写给要用风暴路径做训练、做统计、做致灾评估的人。全篇只关心三件事:它的规模到底有多大、一列一列的数据是怎么组织的、以及在哪里会踩空。
| 项目 | 数值 | 来源 |
|---|---|---|
| 官方全名 | International Best Track Archive for Climate Stewardship | 产品页标题 |
| 当前版本 | v04r01(2024 年 6 月发布,滚动更新) | 产品页 Current Version |
| 主持机构 | NOAA NCEI,与 WMO 各 RSMC/TCWC 协作 | 产品页首段 |
| 时间覆盖(官方口径) | 1841 年至今 | 技术文档 Coverage |
| 空间覆盖 | 70°N 至 70°S,180°W 至 180°E | 技术文档 Coverage |
| 列数 | 174(计数文档逐条编号 1–174) | 列文档 |
| 时间分辨率(插值后) | 3 小时 | 技术文档 6.6 |
| 位置分辨率 | 0.1°(约 10 公里) | 技术文档 3.1 |
| 机构字段组 | 11 组前缀 + 4 份静态历史源 | 列文档 |
| 全量 CSV 体积 | 333,131,682 字节 | HTTP 响应头(2026-10-29) |
| 风暴/轨迹计数 | 官方未公布;抽样外推约 72 万行 | 抽样推算,非官方 |
| 更新频率 | 每周三次(周日/周二/周四) | 产品页 Update Schedule |
| 许可 | WDC 开放政策 + WMO 第 40 号决议 | 产品页数据使用政策 |
| DOI | 10.25921/82ty-9e16 | 产品页 Dataset Identifiers |
| 访问门槛 | 无,直下;用户注册为可选 | 产品页 Data Access |
§1 速览:它是什么,也不是什么
§1.1 一句话定义
IBTrACS 是一份以风暴为单位、以时点为行的全球热带气旋档案。每一行是说:某场编号为 SID 的风暴,在某个 UTC 时刻,位于某个经纬度,而在这个位置上,十一家机构分别认为它有多强。
这三个「分别」,是理解整份数据的钥匙。它不是一张「风暴强度表」,而是十一家机构档案的并排副本,被时间轴和地理位置缝合在一起。
§1.2 读者最常带着的三种处境
第一种:要做一个全球或西太的风暴强度识别模型。 训练集需要大风级样本,翻开源数据发现同一个台风在五个列里都有「最大风速」,且互相不等。此时需要判断的不是「哪个对」,而是「训练标签从哪一列取、如何声明」。这件事在 §3 展开。
第二种:要做历史致灾事件的回溯或灾损统计。 需要把风暴路径与人口、基础设施叠加,关心的是位置、登陆点、风圈半径。此时强度多口径反而不是最大的障碍,障碍在 §4 讲的位置与登陆字段口径。
第三种:要做气候尺度的强度趋势研究。 这类工作最容易出错,因为 1841 年以来的记录本身是不同时代、不同观测手段、不同机构责任范围拼起来的,任何不加限定的长期拟合都会被记录制度的变迁污染。§5 专门处理这一层。
把三种处境与它能给出的东西对照一下,就是一张决策卡:
| 你的处境 | 它能给你 | 它给不了你,需要另找 |
|---|---|---|
| 训练风暴强度识别模型 | 十一家机构的强度标签、风圈半径、统一的 3 小时时点 | 一个权威的单一强度标签,得自己选列 |
| 历史致灾回溯与灾损比对 | 风暴中心路径、登陆标志、离岸距离 | 登陆点的精确经纬度、地面仪器读数 |
| 气候尺度的趋势研究 | 完整的事件清单与机构判读沿革 | 一条同质的长时间序列,得自己划窗 |
| 实时告警与大屏 | 最近 7 天活动风暴的轻量子集 | 预报,它只记已发生的路径 |
这张表最后一行值得多说一句:IBTrACS 是事后档案,不是预报产品。它记录的风暴都已经在事实层面发生过,即使最新一年的轨迹还在「实时」状态,那也是对已发生过程的记录,不是对未来的预测。
§1.3 它和「再分析」不是一回事
这是最重要的概念区分。再分析(如 ERA5)是把观测同化进数值模式,产出的是同一套物理定律下的连续场;IBTrACS 是把各家机构人工判读后定稿的路径收集起来,产出的是权威意见的合订本。
由此推出两处日常后果。其一,IBTrACS 没有格点场,不能像再分析那样给出一片海域的完整风场,只能给出风暴中心的点序列和风圈半径。其二,它能提供再分析做不到的东西——权威机构当年到底是怎么说的。做灾后责任认定、做保险理赔参照、做历史台风复盘,需要的正是这个「原话」,而不是一套模式再算出来的近似值。
§1.4 不适合谁
不适合要一片海域完整风场的人。 这是轨迹档案,不是格点产品。想要某经纬度上逐小时的 10 米风速,应转向再分析或卫星散射计。
不适合想把「真实强度」直接拿去训练的人。 表里没有一个叫「真实强度」的列。任何把 WMO 列当作地面真值、把机构列之间的差异当作噪声的做法,都在误读这份数据的设计意图。
不适合需要 1950 年前南印度洋精确风暴数的人。 官方在产品页与技术文档里都点出了这个问题:早年的旁支被拆成多条轨迹,风暴数虚高。
不适合需要逐小时强度曲线的人。 3 小时是插值后的统一节拍,原始上报多为 6 小时,中间的点是算出来的。
§1.5 贯穿本文的案例:1951 年的台风 RUTH
为了让「多口径」这件事落到具体数字上,全文用同一场风暴贯穿。它出现在 1951 年西太平洋,SID 为 1951281N11147,名称 RUTH。
选它有三个理由。它在数据里是完整的主轨(TRACK_TYPE 为 main),没有旁支争议;它的生命史里同时有美国、日本、中国三方给出风速,且三方数值在本站可核对的时点上并列存在;它的峰值时段出现在 10 月中旬,正好落在三方都开始系统记录强度之后,不是三方都空白的早期时段。
后面 §3 会用它讲清楚「同一时刻三个峰值」是怎么排列在列里的,§4 会用它讲 1951 年这场风暴的强度差异有多大、为什么不能简单取平均,§5 会用它说明为什么 1950 年代之前的强度比较要格外小心。下文凡提「§1.5 的案例」,指的都是这场风暴。
§2 规模与结构:174 列是怎么长出来的
§2.1 官方没有给出风暴总数,这是有意的
先说清楚一件事:IBTrACS 的产品页与技术文档里,都没有一个「共 N 场风暴」的确切数字。技术文档第 5.3 节标题就叫「风暴计数的不确定性」,开篇一句是提醒使用者在数风暴时务必小心,随后逐条列出造成不确定的原因。这不是文档偷懒,而是这个数据集的性质决定的——它的行是按「时点」组织的,风暴数需要使用者自己按轨迹类型过滤后去重。
能核到的是文件层面的硬数字。2026 年 10 月 29 日对全量 CSV 发起请求,响应头声明的文件长度为 333,131,682 字节,Last-Modified 是 2026 年 10 月 27 日。列文档对每一列编号,最后一条是第 174 列 STORM_DIR。这两个数字都是可以直接复现的。
行数只能估。全量文件下载在常规网络条件下会超时,可行的办法是取多个不相邻的片段,从每个片段里数换行符。在文件 0.9%、9%、18%、36%、45%、54%、63%、72%、81%、90%、96%、99% 处各取约 300 KB,逐段数有效行,得到每段 619 至 697 行、平均约 652 行。按体积线性外推,全量约 72 万行。
这个「约 72 万」是估算,必须这样标注。它和官方任何一个数字都不等同,也不能当成官方的计数对外引用。若要用在论文里,正确写法是「按文件体积与多点抽样外推」。
§2.2 十一组机构前缀,是怎么排布的
列的顺序不是随意的,它反映了档案的层级。开头的十几列是全球层面:
| 列组 | 列 | 含义 |
|---|---|---|
| 身份 | SID、SEASON、NUMBER | 编号、年份、当年序号 |
| 位置 | BASIN、SUBBASIN、NAME、ISO_TIME、NATURE、LAT、LON | 海区、次海区、名字、时点、性质、经纬度 |
| 权威口径 | WMO_WIND、WMO_PRES、WMO_AGENCY | 该位置负责机构的强度与名字 |
| 质量标记 | TRACK_TYPE、DIST2LAND、LANDFALL、IFLAG | 轨迹类型、离岸距离、登陆标志、插值标记 |
之后是按机构分块的字段,每块结构相似:位置、类别/等级、风速、气压,有风圈能力的机构再加四象限半径。顺序是 USA(第 18–42 列)、TOKYO(43–54)、CMA(55–59)、HKO(60–64)、KMA(65–75)、NEWDELHI(76–83)、REUNION(84–103)、BOM(104–128)、NADI(129–133)、WELLINGTON(134–137)。
再往后是四份不再更新的静态历史源:DS824(138–142)、TD9636(143–147)、TD9635(148–152)、Neumann 南半球(153–157),以及一份 19 世纪北大西洋抢救资料(158–162)。最后是阵风、海浪、移速移向等派生列(163–174)。
这 174 列的分块方式本身就在说一件事:这份档案是先按机构组织,再按时间缝合的。理解这一点,就不会把 USA_WIND 与 WMO_WIND 当成两个「观察角度」,而会知道它们是两条独立档案线上的两个点。
§2.3 一行到底长什么样
以 1842 年第一条记录为例。SID 是 1842298N11080,年份 1842,海区 NI(北印度),次海区 BB(孟加拉湾),名字 UNNAMED,时点 1842-10-25 03:00,性质 NR(未报告),位置 10.9°N、80.3°E,轨迹类型 main,离岸距离 43 公里,登陆标志 0。此后所有机构列都是空格,唯一非空的是 TD9636 的位置与移速移向。IFLAG 是 15 个字符的标记串,只有第 12 位是 O,其余是下划线——意思是这一行只有 TD9636 这一家有原始上报,其余十四家都没有。
这行数据把整份档案的性质说得非常清楚:一个 1842 年的风暴,没有风速、没有气压、没有名字,只有一条由 1980 年代抢救整理的轨迹。它在表里占一行,但它和 2026 年一场有卫星微波扫描、有飞机下投探空的风暴,信息量相差几个数量级。
§2.4 体积的分布是不均匀的
把十个 CSV 子集的文件头逐个取下来,能看到体积的分布:
| 子集 | 字节数 | 说明 |
|---|---|---|
| ALL | 333,131,682 | 全量 |
| since1980 | 145,228,727 | 卫星时代,约 44% |
| WP | 114,683,518 | 西太平洋,单一海区最大 |
| SI | 77,968,128 | 南印度洋 |
| NA | 57,593,323 | 北大西洋 |
| EP | 47,265,183 | 东太平洋 |
| SP | 35,675,043 | 南太平洋 |
| NI | 27,890,516 | 北印度洋 |
| last3years | 11,709,686 | 近三年 |
| SA | 56,442 | 南大西洋 |
有两点值得记住。第一,1980 年以后的记录占了近一半体积。这意味着若只做现代气候研究,下载 since1980 子集能省掉一半以上流量,而信息密度反而更高。第二,七个海区子集加起来远超 ALL,因为官方明确说明:海区子集收录的是「在该海区至少有一个位置」的风暴,一场跨越海区的风暴会同时出现在两个子集里,不同海区文件不能相加。
北印度洋的 27.9 MB 与南大西洋的 56 KB 形成了一个有意思的对照。后者几乎是空的,因为南大西洋在气候上极少生成热带气旋,档案里只有零星几条。
§2.5 三个格式装的是同一份东西
官方提供 CSV、netCDF、Shapefile 三条路。技术文档第 8.1 节的原话是各格式风暴数据完全一致,唯一差别是 netCDF 带了更多溯源信息。体积差异极大:全量 CSV 是 333 MB,全量 netCDF 只有 23.5 MB——原因是 CSV 用空格表示缺失,每一行仍然要写满 174 个字段的逗号,而 netCDF 用二进制的填充值,还能压缩。
这个体量差异直接影响使用策略:做批量计算用 netCDF,做人工核对和小样本通读用 CSV。CSV 的好处是可以用最朴素的方式看——前两行是列名和单位,第三行开始是数据,肉眼就能读。这一点在排查「某个机构某一年为什么全空」时特别有用。
§3 多口径:同一场风暴的十一种说法
§3.1 设计意图:并列,而非裁决
产品页首段对 IBTrACS 的定义是:把多家机构的近期与历史热带气旋数据合并,形成一份统一的、可公开获取的最佳路径数据集,以改善机构间比较。注意最后半句——这份数据集存在的理由之一,就是让人能比较不同机构的说法。
技术文档 6.3 节说得更直白:WMO 那一列给出的是负责机构的报告,而在机构程序差异较大的边界处会出现很大差异,最典型的是 180° 以西,也就是美国机构与日本气象厅的分界处。
因此,「同一场风暴有很多个强度」不是数据质量问题,是这份档案的核心内容。把这一点当成噪声去平均、去取中位数、去用某一列覆盖其他列,都是在消解它存在的理由。
§3.2 平均时长不统一,官方明确不换算
这是最容易被忽略、后果最大的一条。列文档在 WMO_WIND 项下写得很清楚:风速不做平均时长调整,并列出了各家的口径——美国方面是 1 分钟,东京 10 分钟,新德里 3 分钟,留尼汪 10 分钟,澳大利亚气象局 10 分钟,纳迪 10 分钟,惠灵顿 10 分钟。技术文档表 3 补全了其余:中国气象局 2 分钟,香港天文台 10 分钟,韩国气象厅 10 分钟。
技术文档还给出了一个粗换算的经验值:10 分钟峰值换算到 1 分钟峰值大约高 12%。但它随即声明,各家程序不同、可用观测也不同,两个因素叠加之后,跨海区的热带气旋比较就成了一个棘手问题。
更进一步,6.2 节有一句很重的话:不同机构之间风速值不可换算,因为差异中有一些已经被描述清楚,另一些则未知,所以不存在简单的换算法。
这句话的含义是:不要试图把中国列的 2 分钟风速换算成美国列的 1 分钟风速再放在一个表里比较。若非要比较,正确做法是固定取一列、只在该列内部纵向比较,并在方法里声明。
§3.3 用 §1.5 的案例:RUTH 的三个峰值
回到 1951 年的那场风暴。在它 10 月中旬的几个时点上,三家的读数并列在同一行里:
| 时点(UTC) | 东京(10 分钟) | 北京 CMA(2 分钟) | 美国(1 分钟) | 气压 |
|---|---|---|---|---|
| 10-10 12:00 | 965 百帕 / 未列风速 | 77 节 | 100 节 | 965 |
| 10-11 06:00 | 948 百帕 | 106 节 | 105 节 | 948 |
| 10-12 00:00 | 928 百帕 | 126 节 | 115 节 | 928 |
| 10-12 18:00 | 924 百帕 | 145 节 | 110 节 | 924 |
三个现象值得注意。
第一,气压高度一致,风速高度不一致。 这条轨迹在四个时点上的中心气压,三家给出的值完全相同(965、948、928、924),而风速差最多 35 节。这一点在理解整个档案时很有用:气压是单点物理量,各家判读趋同;风速是分布量,与平均时长和判读方法关系更大。
第二,相对高低在峰值处发生了反转。 10 月 12 日零时,北京列 126 节高于美国列 115 节;18 小时后的下一个时点,北京列 145 节远高于美国列 110 节。若有一份研究取美国列作为强度标签,这场风暴会被归为 4 级;若取北京列,它超过 137 节,会被归为 5 级。同一场风暴,换个列就是换个等级。
第三,日本这一时段的风速列并非全程有值,气压列却几乎连续。 这解释了为什么很多历史台风研究用气压而不是风速做强度指标——气压的跨机构一致性要好得多。
§1.5 的案例到这里已经足够说明:取哪一列不是技术细节,而是结论本身。
§3.4 用 §1.5 的案例之外的对照:2001 年的 KONG-REY
再换一个年代近些的例子,把口径问题放到有更多机构的场景里。2001 年西太平洋台风 KONG-REY,SID 2001202N23152,109 个时点,其中 WMO 列有值 32 个、美国列 65 个、东京列 55 个、中国列 67 个、香港列 63 个。
在它 7 月 27 日 00 时的行里,五家读数分别是:WMO 70 节、东京 70 节、中国 68 节、香港 70 节、美国 85 节。前三家几乎重合,美国列高出 15 节。到了 7 月 23 日,分歧更大:东京 40 节、中国 38 节、香港 45 节、美国 60 节——美国列比东京列高出整整 50%。
再看它的生命史:美国列在 7 月 24 日就给出 75 节,东京列当天的等级仍是 4 级(强热带风暴),到 7 月 26 日才升到 5 级(台风)。升级的时点差了两天。 对做登陆预警复盘的人来说,这 48 小时比任何绝对数值都重要。
§3.5 列多不代表每行都有值
KONG-REY 那 109 个时点里,WMO 列只有 32 个有风速值,美国列 65 个,东京列 55 个。也就是说,同一场风暴里,哪一列有值、哪一列是空,随行而变。
原因有三。其一,各机构的记录起止时间不同,风暴在某个机构责任区之外时该列自然为空。其二,WMO 列只在与负责机构对应的位置上填值,跨过责任区边界就换人填。其三,官方明确说过,WMO 的风速气压不做插值,因为它们是官方信息;而其他机构的列在 3 小时化过程中做了插值与填充,因此有值率更高。
这意味着:若直接用某列非空的行数去数「有效样本量」,得到的结果混合了记录制度和插值规则两层因素,不是纯物理意义上的观测数。
§3.6 IFLAG:判断一个值是不是原始上报的唯一依据
174 列里有一列专门用来回答「这个数值是怎么来的」,就是 IFLAG。它是 15 个字符的串,每个位置对应一家机构,取值五种:下划线表示该机构没有报告,O 表示原始上报,P 表示位置与强度全部由插值填充,I 表示位置是原值但强度被插值,V 表示位置与强度是原值但其他字段被插值。
15 个位置依次对应:美国、东京、中国、香港、韩国、新德里、留尼汪、澳大利亚、纳迪、惠灵顿、DS824、TD9636、TD9635、Neumann、Chenoweth。
以 §1.5 的案例为例,1951 年 RUTH 在某一行上的标记是第 1 位为 O、第 12 位为 O,其余为下划线——表示这一行只有美国和 TD9636 两家给了原始上报。而相邻的 3 小时间隔行,第 1 位变成 P,表示那个时点的风速是美国列的插值结果。
这条规则的实际用法是:凡是要说「机构 X 在此时刻报告了 Y」,先查 IFLAG 对应位是不是 O。 是 P 或 I 的,只能说「IBTrACS 在此刻为机构 X 填充了 Y」。
§3.7 为什么会有这么多历史资料源
除了在役的十一家机构,列里还有四份不再更新的历史集。TD9636 是 1980 年代美国国家气候数据中心与海军联合整理的全球合并资料;DS824 是 UCAR 的全球最佳路径资料;TD9635 是西太平洋的一份历史报告集;Neumann 是南半球资料;Chenoweth 是 19 世纪北大西洋的抢救资料。
这些资料的存在,是 IBTrACS 能把时间覆盖推到 1841 年的原因。但它们也有个共同特点:风速是估计的。列文档在 TD9636 的说明里明写,这些风速估计是主观的,使用时须谨慎。DS824 的问题更严重,早期直接给出 25、35、65 这样的固定值,用来代表「只知道是热带低压 / 热带风暴 / 飓风」的情况。
所以在 1950 年以前,所谓「强度」,多数时候是「类别」的数值化表达,不是一个连续的物理测量。
§3.8 升级路径:为什么升级版本会给机构比较带来新差异
把上面几个案例串起来看,会发现一个不太直观的现象:同一场风暴在不同 IBTrACS 版本里的强度差异,有时比同期两家机构之间的差异还大。
原因在变更日志里。逐条读 v04r01 的日志,能看到持续的动作:某个机构补上某一年,某段历史被重新分析,某个风暴的某个字段被修。每一条都会改变某些行里的数值。
以 2026 年 10 月 2 日那条为例:新增了香港天文台 2025 年、惠灵顿与澳大利亚气象局的部分最佳路径,同时对北大西洋 1971 至 1975 年做了重新分析。这意味着 1971 至 1975 年北大西洋风暴的美国列数值,在这个时点前后并不相同。
对做复现的人来说,这带来一条硬约束:凡是依赖强度的结果,必须连同版本日期一起发布。只写「v04r01」不够,因为同一版本号下的内容在滚动。文件名的内嵌日期(当前是 20261027)才是内容身份。
对做机构比较的人来说,这条约束意味着:比较结论有时效。今年算出来「美国列比东京列平均高 X 节」,明年可能因某一家补了几年资料而变。这不是数据不可靠,而是档案在成长。
§3.9 一个容易忽略的细节:台风的名字不是唯一键
风暴名字在 NAME 列里,但它不能用来做唯一识别。第一,早期风暴大量叫 UNNAMED,1842 到 1850 年代几乎没有具名记录。第二,同一名字会在不同年代重复使用——台风命名表是循环的,一份跨越 180 年的档案里,同一个名字出现十几次很正常。第三,列文档明确写了,IBTrACS 会忽略大多数含数字或缩写的名字。
唯一可靠的键是 SID。它的结构本身就带着信息:2001202N23152 拆开是 2001 年、年积日 202、北纬 23、经度 152。也就是说,风暴的身份里编码了它的生成时间与生成位置。
这个结构有一个直接后果:SID 在风暴生命期内不变,即使风暴后来跨了海区、换了几次名字。§4.4 中跨区的 WUTIP,它的 SID 里记录的仍是它在西北太平洋生成时的位置。
§3.10 气压与风速的关系不是固定的
多口径讨论里还有一层:同一家机构自己给出的气压与风速,关系也不是固定的。
历史上,早期观测没有直接风速时,机构会通过风压关系从气压推风速,或者反过来。列文档在澳大利亚气象局的 PRES_METHOD 字段里就列出过这些方法:飞机或下投探空观测、水上浮标、陆上观测、Dvorak 判读直接得出、由风压方程从风速推气压、从周边观测估计、雷达外推等。
这意味着两个数不是独立测量,而是常常互为推导。在某个时点看到气压与风速「完全吻合」,不等于两家机构判断一致,可能只是其中一家从另一家的值推出来。
§1.5 的案例显示,RUTH 的气压完全一致、风速分歧明显,有一种可能的解释就在这里:气压可能是各家各自判定后趋同,也可能是其中某家从别家的气压反推了风速,因而保留了气压而调整了风速。文档没有给出这场风暴的具体处理方式,所以这一点只能作为可能性提出,不能作为结论。
§4 边界:位置、登陆与时间轴上会踩空的地方
§4.1 合并位置不是任何一家的原值
IBTrACS 在 LAT、LON 两列给出的是合并后的代表位置。技术上它是算法在几家机构的位置中选定的,不是平均值,也不是某一家的原值。
技术文档给了位置不确定度的量级:按强度分,弱风暴(小于 60 节)约 30 至 40 公里,中等(60 至 100 节)约 20 至 25 公里,强风暴(大于 100 节)约 10 至 15 公里,且 1980 年以前都更大。这个量级意味着,在早年,一场风暴的「中心」本身就有几十公里的模糊度。
对做路径叠加分析的人来说,这个模糊度不是可以忽略的:几十公里的偏差,在海岸线曲折的湾区和群岛,决定了风暴是擦过还是登陆。
§4.2 离岸距离与登陆标志的分工
DIST2LAND 与 LANDFALL 是两列,含义不同。
DIST2LAND 是当前位置到最近陆地的距离,单位公里,方向上取最近的,陆地掩膜包含所有大陆和面积大于 1400 平方公里的岛屿。
LANDFALL 是到下一个时点的最小距离,本质是一个登陆标志位:等于 0 表示 3 小时内登陆,大于 0 表示未来 3 小时内不登陆。列文档补了一句实用提示:小于 60 海里(约 111 公里)时,即使中心不在陆地上,系统也可能已影响到这片陆域。
这两列合起来,能回答「什么时候登陆、在哪里登陆」这类问题,但边界很清楚:它是一个时间窗口标志,不是一个地理坐标。要知道登陆点经纬度,需要用 LANDFALL 为 0 的那一行的 LAT 与 LON,且要知道那个位置本身带有上面说的几十公里模糊度。
1993 年以前没有这两列,所以 1993 年前的登陆事件需要另找资料。列文档显示这两列是 v03r06(2014 年)引入的,版本历史里也确认了这一点。
§4.3 三种时间:原始、插值、当前年
IBTrACS 的时间轴上有三层,混在一起会很麻烦。
原始上报层:多数机构按 6 小时上报,印度气象局可达 3 小时,美国在登陆或强度突变时会加报非标准时刻的点,这也是 HURDAT2 引入的一个特征。
插值层:官方把位置用样条插值、风速气压用线性插值统一到 3 小时。线性插值的好处是保极值——如果一场风暴的生命期峰值是 100 节,插值后峰值仍然是 100 节,不会因为插值被抹平。样条插值则会创建新的极值,所以位置用样条、强度用线性。WMO 列例外,不插值。
实时层:当前年度以及前一年部分轨迹标为 PROVISIONAL,是近实时数据,官方说通常会在两年内被机构再分析替换。
三层混用的后果,在算能量类指标时最明显。技术文档第 6.5 节专门提醒:3 小时序列若直接套用原本为 6 小时设计的累加公式,会系统性偏高。做累积气旋能量之类的指标,必须先按正确的时步重算。
§4.4 风暴会跨海区,海区文件不能相加
BASIN 列记录的是当前位置所在海区。一场风暴可以从西太平洋一路东移到中东太平洋,BASIN 列随之改变。
列文档在 BASIN 项下列了七个值:NA、EP、WP、NI、SI、SP、SA,另有 MM 表示缺失(不应出现在成品里)。v04 的一个新特性就是:凡是在海区内出现过的系统都收进该海区文件,而 v03 只收风暴生成的那个海区。
这个改动带来了一个陷阱。官方在子集说明里明写:海区文件收录的是在该海区至少有一个位置的风暴,所以不同海区文件不能合并,否则跨海区风暴会被重复计入。
§3.4 提到的 2001 年 KONG-REY 是单海区风暴,没有这个问题。但同期许多风暴会跨区,其中 2001 年的 WUTIP 就是一个:它的位置从 15.6°N、139.1°E 一路走到北纬 46.5°,经度越过 180° 线,BASIN 列从 WP 变成 EP。这样的风暴既在西太文件里,也在东太文件里。
§4.5 数风暴必须排除旁支
TRACK_TYPE 列有六种取值:main、spur、PROVISIONAL、PROVISIONAL_spur、US-PROVISIONAL、US-PROVISIONAL_spur。
官方在技术文档 6.8 节明写:数风暴时应忽略 spur,因为这些旁支可能很多,尤其在位置精度很差的早年,会造成大量过计。旁支的产生机制有两种——一种是两家机构对中心位置的判断差得太远,算法无法判定是不是同一个系统;另一种是真实的系统合并(比如藤原效应)。
v04r01 加入了额外的质检,把旁支数量减少了约三分之二,并把多数发生藤原效应的旁支重新归类为主轨。
即便如此,任何风暴计数都必须先按 TRACK_TYPE 过滤到 main,这是官方在计数一节里给出的第一条操作建议。
§4.6 1950 年以前:官方自己承认的虚高
产品页的 Known Issues 一段写得很诚恳:部分 1950 年以前的风暴没有被正确匹配,导致记录中的风暴数人为偏高。举的例子是 1901 年南印度洋的风暴,同一场风暴被 ds824、td9636、reunion 三个标识分别记录,由于时间上的差异,被拆成了三条不同的轨迹。
技术文档 6.9 节把原因说得更细:早年的轨迹多是从图上抢救出来的,这些图按月份汇总所有风暴,没有确切日期。数字化时日期只能估,于是同一场风暴在不同资料里落在不同的时间点上,就被判成了两场。
官方给的经验是:这个问题在南印度洋最严重,但在 1930 年以前的多数海区都存在。
§1.5 的案例 RUTH 出现在 1951 年,正好在这个敏感期的边缘。用它做强度对比是可靠的,但如果拿它所在的年代做「1950 年代风暴频数」的统计,就必须同时交代记录制度的限制。
§4.7 覆盖范围是 70 度,不是全球
技术文档的 Coverage 一栏写的是 70°N 至 70°S、180°W 至 180°E。这个范围在地图上是一个带,不是整球。
实践含义是:高纬度变性阶段的风暴,官方承认覆盖不完整。§3.4 中 KONG-REY 的轨迹一直延伸到 53.4°N,仍在范围内;但若有一场风暴变性后继续北上到 70°N 以外,尾段可能就不在档案里了。
这一点在做「风暴生命期长度」统计时容易踩到——档案里轨迹的长度并不完全等于风暴真实的生命史,还受制于选定的覆盖边界。
§4.8 小时与公里的单位陷阱
列文档给每一列都标了单位,但单位并不总在第二行。CSV 的第二行是单位行,空着的表示无单位或无量纲。这件事看起来琐碎,实际踩过的人不少:风速列的单位写的是 kts 而不是 m/s,风圈半径的单位是 nmile(海里)而不是公里,海浪高度是英尺,近岸距离是公里。
于是同一个「半径」概念在表里有两套单位并存:DIST2LAND 与 LANDFALL 是公里,所有 R34、R50、R64 都是海里。做叠加分析时若不换算,半径会缩水将近一半(1 海里约 1.852 公里)。
风速的换算同样常被顺手做错。列文档里说风速是 kts,技术文档说 1 节约 0.514 米每秒。这个换算是纯单位换算,与 §3.2 说的「平均时长不可换算」是两件完全不同的事,不能因为做过单位换算就以为也处理了时长差异。
§4.9 次海区字段不能当成海区的细分键
SUBBASIN 列看起来是把 BASIN 切得更细,实际上它的取值规则比这复杂。
列文档列出的次海区有:CS 加勒比海、GM 墨西哥湾、CP 中太平洋、BB 孟加拉湾、AS 阿拉伯海、WA 西澳、EA 东澳,另有 MM 表示无次海区。而官方明写,西太平洋与南印度洋不提供次海区,这两处的值一律是 MM。
也就是说,若按 SUBBASIN 分组做统计,会得到一组「分类粒度不一致」的组:西太与南印度洋全落在 MM 里,而北大西洋被切成三块。跨海区比较时必须意识到这一点,否则会得出「西太的风暴高度同质」这类其实只是字段设计造成的结论。
§4.10 静态资料源的时间段是有限的
前面提过四份静态历史源。它们的时间跨度都是有限的,且各自覆盖的海区不同:
| 资料源 | 列范围 | 大致时段 | 覆盖 |
|---|---|---|---|
| DS824 | 138–142 | 1877–1980 | 全球 |
| TD9636 | 143–147 | 1842–1989 | 全球合并 |
| TD9635 | 148–152 | 历史西太 | 西太平洋 |
| Neumann | 153–157 | 南半球历史 | 南半球 |
| Chenoweth | 158–162 | 19 世纪 | 北大西洋 |
这几份资料是把档案往前推的支柱,但它们彼此之间并不一致——这正是 §4.6 说的「同一场风暴被记成多条轨迹」的根源之一。用这些列做分析,实质是在用三四十年前另一批人的判读,而不是在用一个统一的观测体系。
§4.11 派生列是自己算出来的
最后几列是派生量:STORM_SPEED 与 STORM_DIR 由 LAT 与 LON 逐点差分算得,单位分别是节与度。
用它们之前要知道:这两个列的精度取决于位置列的精度。位置分辨率是 0.1°,约 11 公里,相邻 3 小时点之间的位置差若只有一两个 0.1°,差分出来的移速会带很大噪声。列文档对 STORM_DIR 的说明是方向按 5 度取整,这本身也提示了它的精度上限。
所以做移速分析时,通常不直接用 STORM_SPEED,而是自己在更长的窗口上重算。原因不是这一列算错了,而是逐点差分的噪声在长窗口上会被平均掉。
§5 质量层:它不该按什么标准评价
§5.0 读这一节之前需要先放下的一件事
大多数数据集在评估时,第一步是找一份「真值」,然后算误差。这个习惯放到 IBTrACS 上会立刻卡住,因为找不到比它更权威的真值——它本身就是各国官方档案的统一出口。
换个角度问,问题会变得可答:这份档案有没有被忠实转录?合并过程有没有说清楚?使用时的约束有没有写明白?这三问不需要外部真值,只需要读文档和抽查原始行。本节按这三问展开,并且在每一处都尽量给出可以自己动手复核的办法。
§5.1 前置校正:这不是一份要「评准确度」的数据
绝大多数数据集条目讨论质量,指的是「和真值差多少」。IBTrACS 的处境不同:它就是各机构官方档案的合集,而官方档案本身已经是当年那个时点、那家机构所能给出的最终判断。
所以评价它,不能问「准不准」,只能问三件事:原始档案有没有被忠实转录、合并逻辑有没有交代清楚、使用约束有没有写明白。这三件事,官方文档给得相当完整。
§5.2 官方自报的不确定度
技术文档第 5 章给出了一张分年代、分海区的风速不确定度表,单位节。摘录几行:
| 时期 | SI | NI | SP | WP | EP | NA |
|---|---|---|---|---|---|---|
| 1950 以前 | — | — | — | — | — | ±30 |
| 1965–1973 | ±30 | ±30 | ±30 | ±20 | — | ±20 |
| 1987–1995 | ±15 | ±15 | ±15 | ±15 | ±15 | ±10 |
| 2000 至今 | ±10 | ±10 | ±10 | ±10 | ±10 | ±7 |
这张表传达的信息很明确:不确定度量级在 30 节到 7 节之间,取决于年代与海区,且北大西洋一直最好(因为有飞机侦察)。1950 年代的风速差个 30 节,在官方自己的框架里是完全正常的。
对照 §1.5 的案例中 RUTH 三个峰值之间 35 节的差距——这个差距恰好落在那个年代的官方不确定度里。也就是说,那 35 节的差异不能证明哪一家错了。
§5.3 用 §1.5 的案例:为什么不能取平均
既然差距在不确定度之内,一个自然的想法是取三家平均,得到一个「共识强度」。这个做法在数学上简单,在档案伦理上有问题。
平分三家,等于假设三家同等可信且误差独立。而实际上,这三家用的观测资料大量重叠(同一批卫星云图、同样的 Dvorak 判读方法),误差并不独立。更关键的是,平均会造出一个没有任何机构曾经发布过的数值。
若这份数据要用于灾后认定、理赔参照、历史复盘,被引用的一定是某一家机构当年的原话,而不是三家平均。取平均会得到一个无法对应到任何官方文档的数字。
§1.5 的案例说明的正是这一点:正确做法是选定一列、声明来源、在全文保持一致,而不是制造一个中间值。
§5.4 插值点与原始点的可信度不同
IFLAG 已在上文说明。这里补充一个实践层面的判别方法:若要统计「有多少时点是有机构原始上报的」,需要逐行解析 IFLAG,再按位置统计。这个统计量的意义与「有多少时点是插出来的」完全不同。
常见的错法是:把 3 小时序列全当成观测,算出「平均每 3 小时强度变化 5 节」这样的结果,然后与另一份资料比较。而实际上,一半以上的点可能是线性插值的结果,插值段的斜率天然平缓,会把真实的陡变抹掉。
§5.5 实时段不可复现
最近一年多的轨迹标为 PROVISIONAL。官方说会在两年内被再分析替换,替换的内容包括强度、位置与类别。
这意味着:用 2025 年、2026 年的数据训练或评估模型,得出的数字在半年后复跑会对不上。 严谨的做法是把实时段单独切出,作为「时效性评估」的集合,而不是混进训练集。
§5.6 DAIMS 视角下的定位
DAIMS 是常用的数据集成熟度框架,关注发现、访问、互操作、溯源与治理几个维度。按这些维度看 IBTrACS:
| 维度 | 表现 | 依据 |
|---|---|---|
| 发现与识别 | 有 DOI、有 NCEI 数据集编号、有正式引用文献 | 产品页 Dataset Identifiers |
| 访问 | 直接 HTTP 下载,无需注册;注册为可选 | 产品页 Data Access |
| 互操作 | 三格式同源;CSV 带列名与单位行;netCDF 基本符合 CF | 技术文档 8.1 |
| 溯源 | 每行有 IFLAG;变更日志逐次记录;沿革完整可查 | 变更日志 |
| 治理 | WDC 开放政策;WMO 第 40 号决议作为商用向导;质量修订公开 | 产品页数据使用政策 |
| 版本控制 | 主版本加修订号;文件名内嵌日期;旧版本保留 | CSV 目录 |
在这几个维度上,它是一份成熟度相当高的档案。缺的只有一项:官方始终没有给一个稳定的风暴总数,把「数出来是多少」这件事留给了使用者。
§5.7 它的质量风险集中在哪里
综合起来,风险集中在三处,且都与使用者而非制作者有关。
一是把单列当真值。 表里有很多强度列,选哪一列决定结论。这不属于数据缺陷,属于使用者的建模决策。
二是跨年代混用。 1841 年的一条轨迹和 2026 年的一条轨迹在表里结构相同,但前者可能只有一个位置,后者有几十个字段。不设时间窗就做统计,会被记录制度的变迁主导。
三是忽略插值。 3 小时是算出来的节拍,不是观测节拍。
三处风险,官方文档都点到了;踩到的原因多半是没读文档,而不是文档没写。
§5.8 忠实转录怎么抽查
要验证「原始档案有没有被忠实转录」,最省力的办法是拿人尽皆知的记录去对。官方引用文献里最经典的一场是 2010 年 BAMS 论文所建立的那套方法,而实际可核对的是几个统计上的硬数:官方产品页的热带气旋气候学一节给出了按海区的年均风暴数,包括风速达到 35 节的风暴与达到 64 节的风暴,这些数来自 2014 年那篇《每月天气评论》的论文。
抽查的思路是:用产品页公布的全球年均 81.8 场(风速达标 35 节,统计期起点到 2010 年)这样的数,去与自己对某一年份子集的计数对照。若偏差很大,先查是不是把旁支算进去了,再查是不是漏了某个海区。
这种做法不能证明每一行都对,但能证明「规模层面没有严重错位」。对一份 33 万字节级别的档案,这是性价比最高的抽查方式。
§5.9 合并逻辑:官方写清楚了什么,没写什么
写清楚的部分:主轨与旁支的判定规则、插值方法(位置样条、强度线性)、WMO 列不插值、代表位置由算法在多家之间选定、旁支的两种成因。这已经覆盖了使用者关心的绝大部分机制问题。
没写清楚的部分:算法在两家位置分歧时具体选哪一家的规则,没有逐条的公开说明;某一行最终的代表位置具体来自哪一家,没有一个直接可读的列。使用者只能从 IFLAG 推断「哪几家有原始上报」,无法直接知道「合并位置取自哪一家」。
这不算缺陷,但它是使用边界:凡是需要知道「这个位置是谁给的」的场合,IBTrACS 给不了直接答案。此时应当去看各机构的 LAT、LON 分列,自行判断。
§5.10 §1.5 的案例:对不确定度表的一次检验
把 §5.2 的不确定度表与 §1.5 的案例放在一起看,可以得出一个可检验的判断。
§1.5 的案例里,RUTH 出现在 1951 年的西太平洋。按表里的分年代口径,1950 至 1965 年西太平洋的风速不确定度是 ±30 节。而在峰值时段,三家风速从 105 到 145 节,差值 40 节,略超 30 节。
这个「略超」有两种解读。其一,当年三家的实际分歧确实超过了典型水平;其二,这张表是分海区、分年代的统计,单场风暴完全可能超出典型值,不构成反例。
两种解读都成立,说明这张表的用法是给预期量级,而不是给逐场保证。用一场风暴去否定一张统计表,本身就是把口径搞错了。
§6 怎么拿到:最小可复现的取数流程
§6.1 三条入口
浏览器直接点。 产品页的 Access Methods 一栏有三个格式的链接,点进去是 Apache 目录列表,文件名即链接。这条路最适合取小样本人工核对。
命令行按范围取。 服务端支持 HTTP 范围请求,用 curl 的 -r 参数只取一段。这是在不下载 333 MB 的前提下核对结构的最实用方法。
脚本整取。 对生产环境,用 wget 或 Python 的整文件下载,然后用 pandas / xarray 读。
注册用户是可选动作。产品页写的是「为了帮助项目获得持续支持,请填写用户注册表」,并明确标为 optional。也就是说,不注册完全可以下载。
§6.2 最小可运行:只取表头与前若干行
下面这段命令只取文件开头的 300 KB,落地后可以直接看到两行表头与若干条数据。这是核对列顺序最快的办法。
curl -s -r 0-300000 \
"https://www.ncei.noaa.gov/data/international-best-track-archive-for-climate-stewardship-ibtracs/v04r01/access/csv/ibtracs.ALL.list.v04r01.csv" \
-o ibtracs_head.csv
head -c 780 ibtracs_head.csv
输出会先是 174 个列名,再是一行单位,再是第一行数据。列名与单位的对齐方式是:第一行是字段名,第二行是单位(多数列的单位为空)。
§6.3 只取某一场风暴:先用序号映射表定位
全量文件里没有「只取某一场风暴」的范围,但官方提供了一个序号到名称的映射表,文件名是 IBTrACS_SerialNumber_NameMapping_v04r01.txt,与全量文件放在同一个目录。它的行数是 9050,格式是每行「序列号 名称 名称来源」。
注意这个数不是风暴数。表里很多行的名称字段是 none,表明该序列号没有对应的风暴名,且不同来源可能为同一场风暴给出不同名称。
§6.4 用 Python 读回并做一次多口径对照
下面这段代码读上面取到的小样本,按 SID 分组,把每个时点上不同机构的风速并排列出。它做的是 §3 里描述的那件事——并列,而不是裁决。
import csv, io
from collections import defaultdict
with open("ibtracs_head.csv", encoding="utf-8") as f:
lines = f.read().splitlines()
rows = [ln for ln in lines[2:] if ln.count(",") == 173]
rdr = csv.reader(io.StringIO("\n".join(rows)))
idx = {k: i for i, k in enumerate(lines[0].split(","))}
def get(row, key):
v = row[idx[key]].strip()
return v if v else None
by_storm = defaultdict(list)
for row in rdr:
by_storm[get(row, "SID")].append(row)
sid = "1851228N13313"
for row in by_storm[sid][:8]:
print(get(row, "ISO_TIME"), get(row, "LAT"), get(row, "LON"),
"WMO", get(row, "WMO_WIND"), get(row, "WMO_AGENCY"),
"USA", get(row, "USA_WIND"), get(row, "USA_PRES"),
"IFLAG", get(row, "IFLAG"))
这段会在 1851 年的风暴上打印出美国列有值、WMO 列部分为空、IFLAG 在第 1 位与第 12 位之间轮换 O 与 P 的模式。换 SID 就能看别的风暴。
§6.5 用 xarray 打开 netCDF 更省力
若要用整份数据,netCDF 是更好的选择。全量 netCDF 只有 23.5 MB,体积是 CSV 的十四分之一。读法如下:
import xarray as xr
ds = xr.open_dataset("IBTrACS.ALL.v04r01.nc")
print(ds.dims)
print([v for v in ds.variables if v.startswith("wmo")][:6])
变量名是小写的,与 CSV 的大写列名一一对应。netCDF 还带了更多溯源属性,技术文档说这是三个格式里唯一的差别。
§6.6 先想清楚要哪个子集
这是最省时间的一步。做近四十年气候研究,since1980 子集只有全量的 44%;做实时监控,last3years 只有 11.7 MB;做单一海区,还要注意跨海区重复的问题(见 §4.4)。
官方还提供一个 active 子集,收录最近 7 天内有活动的风暴,体积只有 135 KB,适合做实时大屏或告警系统。
§6.7 一个常见的下载故障
NCEI 在产品页顶部挂了一条提示:目前正在把数据与应用迁移到云端,期间可能出现临时性访问延迟,并建议查阅迁移说明与告警页。
实际表现是:大文件下载中途断开,或偶尔返回 403。这不是数据集本身的问题,重试或换时段即可。若在自动化流水线里下载,应加范围续传(curl 用 -C -),不要从头重来。
§6.8 §1.5 的案例在多口径对照上的落地
把 §6.4 的脚本换成 RUTH 的 SID 1951281N11147,并扩展打印 TOKYO_WIND、CMA_WIND、USA_WIND 三列,就能复现 §3.3 的表。这个对照不需要下载全量,只需要西太子集的一段——或直接取全量文件里 1951 年所在的位置。
对做项目的人来说,这个练习的价值在于:亲手看一次同一行的三个不同数值,比读十遍文档更能建立多口径直觉。
§6.9 一个更实际的取数方案:按时间窗自己切
全量文件不支持按年切段,但有一个替代思路:用 since1980 与 last3years 两级子集覆盖现代研究,用全量文件只做一次性的历史补录。
具体做法是把两种子集与全量都下载到本地,按 SID 建立索引,之后所有查询都走本地索引而不是反复下载。这样一来,历史研究用全量、现代研究用 1980 子集、实时监控用三年子集,三种用途各取所需,避免每次都去请求 333 MB。
这个方案的成本是一次性完成 500 MB 左右的下载,收益是后续所有分析都不再依赖网络。对研究周期超过一周的项目,这笔账很快就能回本。
§6.10 校验下载完整性的两种办法
NCEI 目录不提供校验和文件,所以要自己验。
第一种办法是对比响应头里的文件字节长度。下载前发一次 HEAD 请求拿到字节数,下载后看本地文件大小是否一致。这个方法能抓住截断,抓不住内容错误。
第二种办法是抽首尾。用尾部一段字节去比对末条记录的时间,若末条记录的时点与官方文档公布的最近更新日期吻合,就基本可以确认拿到的是完整文件。当前快照的末条记录在 2026 年 10 月 26 日,与文件最后修改日期 10 月 27 日相差一天,属于正常范围。
对生产流水线来说,第二种办法更适合自动化:把「末条记录时点应晚于上次更新时间」写成断言,一旦不成立就重下。
§7 在生态中的位置:它旁边站着谁
§7.0 先校正一个位置认知
谈「它在生态中的位置」,容易掉进一个误区:把 IBTrACS 当成一张全球气象底图的一部分,与格点再分析、卫星反演并列,仿佛三者只是分辨率不同。
这个认知是错位的。再分析与卫星是从观测量反推大气状态,IBTrACS 是汇集权威机构对具体事件的判断。前者产出的是场,后者产出的是条目。把它们并列在同一条「数据源清单」上,会导致在需要「官方认定」的场合拿了再分析,在需要「连续场」的场合拿了风暴档案。
正确的定位是把它放在事件目录这一类里,与灾害清单、伤亡统计、灾损数据库同列,而不是与格点气象产品同列。下面的分工说明都从这个前提出发。
§7.1 与再分析的分工
ERA5 这类再分析给的是格点场,IBTrACS 给的是风暴中心点。两者在同一个研究里往往是互补的:用 IBTrACS 拿到风暴中心与强度,用再分析拿到中心周围的环境场(切变、海温、湿度),两者叠加做强度变化的成因分析。
需要注意的是它们互相不独立。再分析的同化系统里会用到风暴路径信息,所以「IBTrACS 强度」与「再分析给出的风暴区域风速」不是两条独立证据。
§7.2 与海温数据的组合
热带气旋强度与海表温度的关系,是最经典的组合问题。站内的逐日海温产品提供背景场,IBTrACS 提供风暴位置与强度,两者按时间与位置配准,就能做「风暴经过时的局地海温」这类分析。
配准的难点在时间尺度不匹配:海温是逐日格点,风暴是 3 小时点序列。做法一般是取风暴在每个位置上的最近日格点,并声明取的是日平均而非瞬时。
§7.3 与站点观测的分工
站点逐日气候资料记录的是陆地表面某点某天的气象要素,风暴档案记录的是海上风暴中心的路径。两者在风暴登陆前后会有交集,但口径不同——站点给的是地面某点的风,档案给的是中心的估计风速,两者数值本来就不应相等,中心风速总是高于同一点的地面风速。
做风暴致灾评估时,常见做法是以 IBTrACS 的中心路径为骨架,用站点或格点资料补充地面影响,而不是用其一替代另一个。
§7.4 与全球发展统计的分工
全球发展统计汇编给出的是国家层面的年度指标,灾害损失常以总量形式出现。要做「每场风暴的致损率」这类分解,需要风暴档案提供事件清单,统计汇编提供社会经济分母。
这里的口径差异在时间上:统计汇编多为年度,风暴档案到 3 小时。聚合到年度时,需要处理跨年风暴与财政年度不一致的问题。
§7.5 它的不可替代性
上面几节都在讲互补。但有一件事只有 IBTrACS 能做:给出「官方机构当时是怎么说的」。
再分析会重算,卫星会重读,只有最佳路径档案保留了机构在其时点上的最终判断,并且保留了十一家之间的一致与不一致。任何涉及责任、认定、历史复盘的场景,需要的就是这个「原话层」。
§7.6 与灾害名录的关系:谁先把风暴「变成事件」
风暴在 IBTrACS 里是一条轨迹,在灾害名录里是一个事件。两者的连接点是灾害名录通常会记录风暴名称与年份。
这个连接看起来简单,实际有坑。名称不唯一(见 §3.9),早期风暴大量无名,同一个名字在不同海区由不同机构使用。更麻烦的是年份口径:灾害名录常按本地年份记,而 IBTrACS 的 SEASON 列是按风暴所属季节记,跨年风暴可能落到不同的 SEASON 里。
实务做法是用 SID 作为连接键,在灾害名录一侧手工补一次映射,并把这个映射存档。这个补录工作只做一次,之后所有年度更新都可以按 SID 直接连接。
§7.7 与人口数据叠加时的时间语义
做致灾评估最常做的是把风暴路径与人口分布叠加。这一步的时间语义常被忽略。
人口数据是某一年的普查值,风暴是一个 3 小时的瞬时事件。两者的时间分辨率相差六个数量级。叠加时实际算的是「风暴经过的位置上,在某年有多少人居住」,而不是「风暴经过的那些人」。
这个差别在快速城镇化的海岸带很大。用 2020 年的人口去评估 1990 年的风暴,会把后来迁来的人算进去。规范做法是用普查年的历史人口,或在方法里明确声明使用的是当前人口,并说明这会带来何种偏差。
§7.8 这份档案的替代品与不可替代处
要找「全球热带气旋路径」,市面上确实还有别的合并产品、也有各机构各自的原始最佳路径,以及从卫星再反演的路径数据集。
但它们在两点上不能替代 IBTrACS:一是覆盖的完整性,官方的说法是「全球目前最完整的热带气旋合集」,这份完整的背后是二十年的持续收集;二是机构并列的保留,别的合并产品多半会给出一个「共识路径」或「推荐强度」,而 IBTrACS 把差异原样留着。
对做研究的人来说,第二点尤其珍贵:差异本身就是研究对象。风暴强度估计的机构间分歧,是可以拿来量化、拿来分析成因的实体,而不是需要先清理掉的脏数据。
§8 长期可用性:它为什么能一直更新下去
§8.1 一套有明文的发展原则
产品页的 Principles 一栏列了五条,值得逐条读:
全球。 合并全球的热带气旋路径资料,形成全球性的最佳路径库。
开放。 合并与维护的方法公开,所有质量修订与增补都被记录、可被检视。
溯源。 所有数据变更被记录,每个版本都被保留,改动背后的理由与算法也被记录,好让多年以后的人能理解。
持续。 只要有新的最佳路径数据,生产就继续。
可达。 官方以一种格式保存权威档案,同时提供业界已在用的其他格式。
这五条不是宣传语,而是解释了下文几个现象:为什么变更日志细到「2026 年 5 月 20 日为雷雨的气旋 34 节风圈修了个 bug」这种粒度;为什么旧版本完整保留;为什么同时提供 CSV、netCDF 与 Shapefile。
§8.2 更新节奏与延迟
每周三次,通常是周日、周二、周四。产品页还说,在特定需求下可能更频繁。
每次更新引入的是某个机构的某一批回溯定稿。看变更日志能看到典型的节奏:某个机构补某一年的最佳路径,某几年的资料被重新分析,个别风暴被修。
这意味着它的「新」有两种含义:已有的风暴被修订,与新的风暴被加入。前者对做复现的人来说更重要——去年跑出来的结果,今年重跑可能对不上。
§8.3 兼容性提示
技术文档提到各格式的数据完全一致,但列会随版本增减。迁移到 v04 时,官方列出的新特性包括:新增数据提供方、同一风暴可同时有实时与最佳路径、旁支减少。
实务建议是:升级版本时,第一步先比对列名。列的位置在新版本中可能变化,用位置索引而不是列名索引的代码会在升级时静默出错。
§8.4 它为何能持续
从生产机制上看,IBTrACS 的边际成本很低——各机构本来就要产出最佳路径,NCEI 做的是收集、对齐、发布。它不生产数据,只做账本。
从需求侧看,全球灾害监测、保险、科研三个方向都持续需要这份「官方原话合集」。这种需求不是周期性的,而是制度性的:只要有灾害认定,就需要一个权威的路径来源。
两者叠加,构成了它二十年来一直更新下去的基础。
§8.5 引用与许可怎么处理
引用要求写在产品页上一目了然:有参考文献的著作,需要同时引用 2010 年那篇 BAMS 论文与数据集本身(当前的正式引用是 2024 年的 v4r01 条目,DOI 为 10.25921/82ty-9e16);没有参考文献的场合,用一句话式的数据集致谢。
许可是两个文件的叠加:WDC 的全面开放访问,与 WMO 第 40 号决议。前者决定了可以自由拿、自由分发;后者决定了商业使用要按 WMO 的框架处理。对实际项目而言,这意味着开放研究无门槛,商业用途需要走 WMO 决议的程序而不是直接在文件里找一个许可证标识。
§9 常见误读:八条要提前避开的说法
| 常见说法 | 实际 | 证据 |
|---|---|---|
| 表里的 WMO_WIND 是这场风暴的真实强度 | 它只是当下负责该海区那家机构的说法,平均时长与别家不同,且不做换算 | 技术文档 6.2、6.3;列文档第 11 列 |
| 三家数值不一样,取平均就得到共识强度 | 平均会造出一个任何机构都没发布过的数;三家观测资料高度重叠,误差并不独立 | 技术文档 5.1、5.2 |
| 一共约一千五百场风暴,官方给的 | 官方从未公布风暴数;约 72 万是行数外推,风暴数须按轨迹类型过滤后去重 | 技术文档 5.3;抽样推算 |
| 这是一张全球所有风暴的清单,全球全覆盖 | 覆盖范围是 70°N 至 70°S;高纬变性尾段可能不在档案内 | 技术文档 Coverage |
| 3 小时一行,说明机构每 3 小时观测一次 | 多数原始上报是 6 小时,3 小时是插值后的统一节拍 | 列文档第 7 列;技术文档 6.6 |
| 把各海区文件加起来就是全球总数 | 跨海区风暴会同时出现在两个海里,海区文件不可合并 | 技术文档 8.2 |
| 1850 年的数据和 2020 年的数据可以放在一起拟合趋势 | 早年多为图上抢救的轨迹,日期靠估,且 1950 年前风暴数人为偏高 | 产品页 Known Issues;技术文档 6.9 |
| 最近一年的数据也是定稿 | 当前年与部分前一年标为 PROVISIONAL,两年内会被再分析替换 | 技术文档 6.4 |
§10 一份最小的使用清单
若要从头用起,按以下顺序走一遍,基本不会出错。
第一步,定列。 明确这一轮分析固定用哪一列强度,是 WMO 列还是某一国。这个决定要在方法里写清楚,并在后续所有图表里保持一致。
第二步,定窗。 明确时间窗。做现代研究用 since1980;做历史研究,则要在每一张图旁边标注记录制度的时代。
第三步,过滤。 按 TRACK_TYPE 过滤到 main,或至少把旁支单独标记。
第四步,辨插值。 涉及「某机构报告了」这类表述时,查 IFLAG 对应位是否为 O。
第五步,算体积。 下载前先算。全量 CSV 是 333 MB,netCDF 是 23.5 MB,取子集能省一半以上。
第六步,验结构。 第一次拿到文件,先用 §6.2 的方法看表头,确认列序与文档一致。
这六步不需要任何专门工具,只需要一次认真的核对。做完之后,这份档案里那些看起来矛盾的数字,就不再是障碍,而是可以拿来作图、拿来讨论、拿来支撑结论的素材。
编辑说明
核验时间 2026-10-29。方法:读取产品页 HTML 全文,取版本、更新节奏、访问方式、Principles、Known Issues 与数据使用政策的原文;下载并解析 v04r01 技术文档与列文档两份 PDF,逐列核对 174 列编号与含义;对全量 CSV 发起 HEAD 请求取得文件长度 333,131,682 字节与最后修改日 2026-10-27,对十个 CSV 子集与三个 netCDF、两个 Shapefile 逐一取文件长度;用 HTTP 范围请求在文件多处取约 300 KB 片段,按换行计行并线性外推总量;取最后 1.1 MB 确认末条记录为 2026-10-26;取序号映射表确认 9050 行。全量文件未完整下载,因此行数与风暴数均为抽样外推,正文已逐处标注为估计而非官方计数,官方文档亦确实未公布这两项数字。
未覆盖:未能下载 NCEI 元数据着陆页(返回 403),所以许可表述以产品页正文原文为准,未另引元数据条款文本;未逐一核验十个海区子集内部的记录,海区重复程度仅依据官方文档说明推断;§3 中的机构对照数字取自抽样片段命中的真实行,未做全量统计,也刻意未做任何分布统计。船形图之外的定性结论(如「气压跨机构一致性高于风速」)限于所引样本,不作全域推广。
外部站点在本环境可正常访问,未引用任何未读到的原文。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- era5-single-levels — 共享标签:公共卫生与流行病学 / 全球健康 / 疾病监测 / 时序数据
- oisst-v2-1 — 共享标签:公共卫生与流行病学 / 全球健康 / 疾病监测 / 时序数据
- argo-gdac-floats — 共享标签:公共卫生与流行病学 / 全球健康 / 疾病监测 / 时序数据
- our-world-in-data — 共享标签:公共卫生与流行病学 / 全球健康 / 时序数据
- ndbc-buoy — 共享标签:公共卫生与流行病学 / 疾病监测 / 时序数据
- noaa-cors-gnss — 共享标签:公共卫生与流行病学 / 疾病监测 / 时序数据
- amrnet — 共享标签:公共卫生与流行病学 / 全球健康 / 疾病监测
- ghcn-daily — 共享标签:公共卫生与流行病学 / 全球健康 / 时序数据
- cmip6-esgf — 共享标签:公共卫生与流行病学 / 全球健康 / 时序数据
- jhu-csse-covid-19 — 共享标签:公共卫生与流行病学 / 疾病监测 / 时序数据
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

