全球历史气象网络日数据集Global Historical Climatology Network daily (GHCNd)
网址:全球历史气象网络日数据集Global Historical Climatology Network daily (GHCNd)
GHCNd是一个数据库,解决了对全球陆地地区历史每日温度、降水和降雪记录的迫切需求。GHCN-Daily是来自众多来源的气候记录的综合,这些记录被合并,然后经过一系列质量保证审查。档案包含超过40个气象要素,包括日最高/最低气温、观测时气温、降水、降雪、雪深、蒸发、风移动、风最高、土壤温度、云量等。
GHCN-Daily将作为NCDC维护的用于日时间分辨率(即DSI 3200、DSI 3201、DSI 3202、DSI 3205、DSI 3206、DSI 3208、DSI 3210等)的旧数据集的替代产品。它将作为全球气候观测系统(GCOS)地表网络(GSN)每日数据的官方档案,特别适合于与极端事件的频率和量级有关的监测和评估活动。该数据集包含分布在所有大陆的10万多个气象站对上述一种或多种要素的观测,是世界上最大的每日气候数据集合。总共14亿个数据值包括最高和最低温度的2.5亿个值,5亿个降水总量,以及降雪和雪深的2亿个观测值。气象站的记录,其中一些可以追溯到19世纪,在可能的情况下每天更新,通常在观测日期和时间后一到两天提供。
1 数据详解
下载数据格式说明
文件1:Stations
其每一行记录了一个气象站的元信息。
其不同列的信息含义如下:
- ID,在1-11列。其头两位以FIPS标识气象站所属国家。第三位表示气象站的编号使用了哪种编号系统。后面8位数字用以作为气象站的实际编号。
- LATITUDE,在13-20列。标识气象站所在的纬度。
- LONGITUDE,在22-30列。标识气象站所在的经度。
- ELEVATION,在32-37列。标识气象站所在海拔,单位为meters。如果数据缺失,用-999.9填充。
- STATE,在39-40列。对于美国的气象站,标识该气象站的所在州。
- NAME,在42-71列。是气象站的名称。
- GSN FLAG,在73-75列。标识该站是否属于GCOS Surface Network (GSN)。
- HCN/CRN FLAG,在77-79列。标识该站是否属于美国Historical Climatology Network (HCN)或者Climate Refererence Network (CRN)。
- WMO ID,在81-85列。是气象站在World Meteorological Organization (WMO)注册的数字编号。
文件2:Inventory
要素类型如下表所示(出自文件3:Documentation):
文件3:Documentation
对数据集进行了说明。
文件4:Country Codes
此文件列出了
2 数据下载
2.1 .dly格式数据下载
点击【Bulk Downloads】,如下图:
下载界面如下:
网址:Index of /pub/data/ghcn/daily
下载【ghcnd_all.ta.gz】文件后,解压如下:
其每一行是该气象站在特定年月、特定天气指标上的一个月的情况。
具体格式如下:
- ID,在1-11列。很明显就是该气象站的ID。
- YEAR,在12-15列,标识数据所在年份。
- MONTH,在16-17列,标识数据所在月份。
- ELEMENT,在18-21列,标识该行所记录的天气数据类型。ELEMENT是个比较复杂的属性,其最常见的5个属性取值分别是:PRCP = Precipitation,降雨量,单位是十分之一mm;SNOW = Snowfall,降雪量,单位mm;SNWD = Snow depth,积雪深度,单位mm;TMAX = Maximum temperature,最高温度,单位是十分之一C;TMIN = Minimum temperature,最低温度,单位是十分之一C。此外还有三十多种属性,不列举,在dly文件中也不常见到。但有个属性还是很重要的,就是TAVG = Average temperature,即平均温度。
- VALUE1,占5列,是该月份该属性上的第一日的取值,缺失值取-9999。
- MFLAG1,占1列,是第一日数值的测度方式的标识符。
- QFLAG1,占1列,是第一日数据质量的标识符。
- SFLAG1,占1列,是第一日数据来源的标识符。S表示数据来源是Global Summary of the Day (NCDC DSI-9618),s表示数据来源是China Meteorological Administration/ National Meteorological Information Center/ Climatic Data Center (http://cdc.cma.gov.cn)。
- 后面依次有VALUE2, MFLAG2, QFLAG2, SFLAG2 … VALUE31, MFLAG31, QFLAG31, SFLAG31,长度与格式标准均与第一日数值相同,表示该月份第2天到第31天的取值。如果该月没有31天也需要按缺失值填充,例如2019年不存在2月29日,则VALUE29 = -9999, MFLAG29 = blank, QFLAG29 = blank, SFLAG29 = blank。
2.2 .csv格式数据下载
2.2.1 单站点下载
以某站点为例,选择下载后,
数据列表如下:
3 批量下载全球站点数据
3.1 范围:经度[0,90]
经度[0,90]站点数:562+833+900+157=2452
板块1.1:
站点数量:562
范围:90 0 60 90
板块1.2:
站点数量:833
范围:60 0 50 90
板块1.3:
站点数量:900
范围:60 0 50 90
板块1.4:
站点数量:157
范围:0 0 -90 90
3.2 范围:经度[90,180]
经度[90,180]站点数:925+723+537=2182
板块2.1:
站点数量:979
范围:90 90 10 180
板块2.2:
站点数量:238
范围:10 90 -90 180
3.3 范围:经度[-90,0]
经度-90-0站点数:726+989+993+965+824+920=5417
板块3.1:
站点数量:920
范围:90 -90 43 0
板块3.2:
站点数量:848
范围:43 -90 41 0
板块3.3:
站点数量:965
范围:41 -90 38.5 0
板块3.4:
站点数量:993
范围: 38.5 -90 35 0
板块3.5:
站点数量:978
范围: 35 -90 22 0
板块3.6:
站点数量:726
范围: 22 -90 -90 0
3.4 范围:经度[-90,-180]
经度[-90,-180]站点数:
板块4.1:
站点数量:962
范围:90 -90 58 -180
板块4.2:
站点数量:933
范围:58 -90 50 -180
板块4.3:
站点数量:990
范围:50 -90 43.5 -180
板块4.4:
站点数量:969
范围:43.5 -90 41.5 -180
板块4.5:
站点数量:969
范围:41.5 -90 39.5 -180
板块4.6:
站点数量:
范围:39.5 -90 37 -180
板块4.7:
站点数量:976
范围:37 -90 34 -180
板块4.8:
站点数量:992
范围:34 -90 26 -180
板块4.9:
站点数量:838
范围:26 -90 10 -180
板块4.10:
站点数量:
范围:10 -90 -30 -180
板块4.11:
站点数量:981
范围:-30 -90 -40 -180
板块4.12:
站点数量:981
范围:-40 -90 -90 -180
3.5 其它
下载请求推送后,某些数据显示为空集,如下所示:
4 缺测数据处理
4.1 对缺测数据插入“-99”
主函数如下:
strLack = '"-99"';
codedir = '..\4 Data'; % get the current path
namelist = dir(codedir);
for iFile=3:length(namelist)
filename = codedir+"\"+namelist( iFile ).name;
data = importdata( filename );
data(1,:)=[]; % 删除第一行表头
% 缺测数据处理
for iN=1:length( data )
%{
% while循环实现
jN = 1;
Tdata = data(iN,:);
while jN<length( Tdata{1,1} )
if ( jN==length(Tdata{1,1})&&Tdata{1,1}(jN)=="," )||(Tdata{1,1}(jN)==","&&Tdata{1,1}(jN+1)~='"')
data(iN,:) = insertAfter( data(iN,:) ,jN, strLack);
Tdata = data(iN,:);
end
jN = jN+1;
end
%}
data(iN,: ) = LackMeasure( data(iN,: ), strLack);
% for循环实现
%{
Tdata = data(iN,:);
% 遍历字符串
for jN=1:length(Tdata{1,1})
if ( jN==length(Tdata{1,1})&&Tdata{1,1}(jN)=="," )||(Tdata{1,1}(jN)==","&&Tdata{1,1}(jN+1)~='"')
data(iN,:) = insertAfter( data(iN,:) ,jN, strLack);
Tdata = data(iN,:);
end
end
%}
end
调用函数代码如下:
function X = LackMeasure( X, strLack)
% 遍历字符串
for jN=1:length( X{1,1} )
if ( jN==length(X{1,1})&&X{1,1}(jN)=="," )||(X{1,1}(jN)==","&&X{1,1}(jN+1)~='"')
T = insertAfter( X , jN, strLack);
X = LackMeasure( T, strLack);
elseif jN==length(X{1,1})
return;
end
end
end
参考
1.知乎-饭想-GHCN全球天气数据库入门手册