本次主要是對中國氣象數(shù)據(jù)網(wǎng)的V3.0地面氣象觀測數(shù)據(jù)集進行快速處理辞州,將原先分散的txt各個要素整合到一個列表中画畅,一行代表一個站點贸毕。直接從全國的數(shù)據(jù)集中來提取出來自己想要的站點數(shù)據(jù)集,該過程也包含了一年缺測數(shù)據(jù)低于30天的站點數(shù)據(jù)線性內(nèi)插夜赵,同時參考數(shù)據(jù)說明對異常值進行了處理明棍。本次以新疆省內(nèi)的氣象站點為例子,從全國V3.0數(shù)據(jù)集中提取新疆站點寇僧。
% author email: yinlichang3064@163.com
station=xlsread('D:\xj\新疆.xlsx');% 一列新疆的站點數(shù)據(jù)
%
for year=2000:2017
datasum=[];
for mon=1:12
if mon<10
filename_pre=['F:\Day1951-2012yuanshi\DAY_PRE195101201612\SURF_CLI_CHN_MUL_DAY-PRE-13011-',int2str(year),'0',int2str(mon),'.TXT'];
filename_temp=['F:\Day1951-2012yuanshi\DAY_TEM195101201612\SURF_CLI_CHN_MUL_DAY-TEM-12001-',int2str(year),'0',int2str(mon),'.TXT'];
filename_rhu=['F:\Day1951-2012yuanshi\DAY_RHU195101201612\SURF_CLI_CHN_MUL_DAY-RHU-13003-',int2str(year),'0',int2str(mon),'.TXT'];
filename_SSD=['F:\Day1951-2012yuanshi\DAY_SSD195101201612\SURF_CLI_CHN_MUL_DAY-SSD-14032-',int2str(year),'0',int2str(mon),'.TXT'];
filename_WIN=['F:\Day1951-2012yuanshi\DAY_WIN195101201612\SURF_CLI_CHN_MUL_DAY-WIN-11002-',int2str(year),'0',int2str(mon),'.TXT'];
filename_prs=['F:\Day1951-2012yuanshi\DAY_PRS195101201612\SURF_CLI_CHN_MUL_DAY-PRS-10004-',int2str(year),'0',int2str(mon),'.TXT'];
else
filename_pre=['F:\Day1951-2012yuanshi\DAY_PRE195101201612\SURF_CLI_CHN_MUL_DAY-PRE-13011-',int2str(year),int2str(mon),'.TXT'];
filename_temp=['F:\Day1951-2012yuanshi\DAY_TEM195101201612\SURF_CLI_CHN_MUL_DAY-TEM-12001-',int2str(year),int2str(mon),'.TXT'];
filename_rhu=['F:\Day1951-2012yuanshi\DAY_RHU195101201612\SURF_CLI_CHN_MUL_DAY-RHU-13003-',int2str(year),int2str(mon),'.TXT'];
filename_SSD=['F:\Day1951-2012yuanshi\DAY_SSD195101201612\SURF_CLI_CHN_MUL_DAY-SSD-14032-',int2str(year),int2str(mon),'.TXT'];
filename_WIN=['F:\Day1951-2012yuanshi\DAY_WIN195101201612\SURF_CLI_CHN_MUL_DAY-WIN-11002-',int2str(year),int2str(mon),'.TXT'];
filename_prs=['F:\Day1951-2012yuanshi\DAY_PRS195101201612\SURF_CLI_CHN_MUL_DAY-PRS-10004-',int2str(year),int2str(mon),'.TXT'];
end
data_prec=importdata(filename_pre);
data_temp=importdata(filename_temp);
data_rhu=importdata(filename_rhu);
data_ssd=importdata(filename_SSD);
data_win=importdata(filename_WIN);
data_prs=importdata(filename_prs);
totalsum=[];
for i=1:size(station,1)
sta=station(i);
syz_prec=find(data_prec(:,1)==sta);
syz_temp=find(data_temp(:,1)==sta);
syz_rhu=find(data_rhu(:,1)==sta);
syz_ssd=find(data_ssd(:,1)==sta);
syz_win=find(data_win(:,1)==sta);
syz_prs=find(data_prs(:,1)==sta);
if length(syz_prec)==length(syz_temp) && length(syz_temp)==length(syz_rhu) && length(syz_rhu)==length(syz_ssd) && length(syz_ssd)==length(syz_win) && length(syz_prs)==length(syz_win)
dates1=data_prec(syz_prec,1:7);
precz=data_prec(syz_prec,8:10);
tempz=data_temp(syz_temp,8:10);
rhuz=data_rhu(syz_rhu,8:9);
ssdz=data_ssd(syz_ssd,8);
winz=data_win(syz_win,8:9);
prsz=data_win(syz_prs,8);
total1=[dates1,precz,tempz,rhuz,ssdz,winz,prsz]; %1-7 8-10 11-13 14-15 16 17-18 ,19
totalsum=[totalsum;total1];
end
end
datasum=[datasum;totalsum];
end
%首先對異常數(shù)據(jù)進行處理
%臺站海拔高度 +100000 當(dāng)臺站海拔高度為估測值時摊腋,在估測數(shù)據(jù)基礎(chǔ)上加100000
dem=datasum(:,4);
dem(dem>100000)=dem(dem>100000)-100000;
datasum(:,4)=dem;
%各要素項 32766 數(shù)據(jù)缺測或無觀測任務(wù)
datasum(datasum==32766)=NaN; %待插補數(shù)據(jù)
% 風(fēng)速 +1000 當(dāng)風(fēng)速超過儀器測量上限時,在上限數(shù)據(jù)基礎(chǔ)上加1000
winz=datasum(:,17:18);
winz(winz>1000)=winz(winz>1000)-1000;
datasum(:,17:18)=winz;
% 降水量 32700 表示降水"微量"
% 32XXX XXX為純霧露霜
% 31XXX XXX為雨和雪的總量
% 30XXX XXX為雪量(僅包括雨夾雪嘁傀,雪暴)
prec=datasum(:,8:10);
prec(prec==32700)=0.1;%相當(dāng)于0.01mm了兴蒸,原有的數(shù)據(jù)單位是0.1mm
prec(prec>32000 & prec<32999)=prec(prec>32000 & prec<32999)-32000;
prec(prec>31000 & prec<31999)=prec(prec>31000 & prec<31999)-31000;
prec(prec>30000 & prec<30999)=prec(prec>30000 & prec<30999)-30000;
datasum(:,8:10)=prec;
% -10000 實際溫度(零下)超儀器下限刻度,在下限數(shù)據(jù)基礎(chǔ)上減10000
temp=datasum(:,11:13);
temp(temp<-10000)=temp(temp<-10000)+10000;
datasum(:,11:13)=temp;
% 對缺測數(shù)據(jù)進行填補细办,采用線性內(nèi)插法
total=[];
for i=1:size(station,1)
sta=station(i);
sy=find(datasum(:,1)==sta);
if length(sy)>=365
value=datasum(sy,:); %得到該站點全部的數(shù)據(jù)
cd=size(value,1);
% 依次進行插值處理
for k=8:19 %要素從第15列開始
element=value(:,k);
syz=find(~isnan(element)); %找到非NaN值
if length(syz)>340 & length(syz)<cd %高于340個有效值
if isnan(element(1))
element(1)=element(syz(1)) % 如果第一個為NaN值橙凳,則用鄰近值進行填補
end
if isnan(element(cd))
element(cd)=element(syz(end)) % 如果最后個為NaN值蕾殴,則用鄰近值進行填補
end
valuez=interp1(syz,element(syz),[1:cd])';%得到有效點
else
valuez=element;
end
value(:,k)=valuez;
end
end
total=[total;value];
end
filename=['F:\Day1951-2012yuanshi\xj\',int2str(year),'年新疆氣象要素數(shù)據(jù)集.xlsx'];
xlswrite(filename,total)
end
結(jié)果如下
注意:經(jīng)度,緯度和高程的順序在使用時請再次確認下岛啸,作者表示很懶钓觉,不想在去確認了
更多需求,請查看個人介紹