缺测气象数据的填补
在(3)中提到,某些站点的气象数据会存在着缺失问题,当缺测数据很多时,可直接去掉该站点,当较少时,则需要采取手段进行填充。本文线性内插法进行补齐
线性内插法
for year=1980:2015
if mod(year,4)==0
cd=366;
else
cd=365;
end
%降水
data=xlsread(strcat('H:\Day1951-2012yuanshi\插值格式\1980-2016\未修正\中国PRE',int2str(year),'.xlsx')); %读取中国1980年降水
for i=1:size(data,1) %对降水数据进行循环
data1=data(i,:);
data_pre=data1(5:cd+4);%前四位分别是站点,经纬度和高程,降水数据从第五位开始
sy=find(abs(data_pre)>=0);%找到数据中绝对值大于0的部分,缺失值NaN值不会大于0
if length(sy)<cd %当满足条件的长度小于天数时,表明存在着空值部分
if length(sy) >340 %当满足条件的超过350天,即95%以上时进行内插处理,否则直接去掉该点
%首先判断前段
data_pre1=data_pre(1:5);%取前五个进行判断,有空值部分取其他值的均值
sy1=find(abs(data_pre1)>=0);
data_pre1_average=mean(data_pre1(sy1));
for j=1:5
if isnan(data_pre1(j))
data_pre1(j)=data_pre1_average;
end
end
%再判断后段
data_pre2=data_pre(cd-4:cd);%对后五个进行判断
sy1=find(abs(data_pre2)>=0);
data_pre2_average=mean(data_pre2(sy1));
for j=1:5
if isnan(data_pre2(j))
data_pre2(j)=data_pre2_average;
end
end
data_pre(1:5)=data_pre1;
data_pre(cd-4:cd)=data_pre2;
%前后完整后采用线性内插函数对中间缺失值进行内插
sy1=find(abs(data_pre)>=0);
juzheng=[sy1;data_pre(sy1)];
data_pre_new=interp1(sy1,data_pre(sy1),[1:length(data_pre)]);
data1(5:cd+4)=data_pre_new;
else
data1=[];
end
end
data(i,:)=data1;
end
biaotou=[NaN,NaN,NaN,NaN,[1:cd]];
data=[biaotou;data];
filename=strcat('H:\Day1951-2012yuanshi\插值格式\1980-2016\未修正\缺测修正的中国PRE',int2str(year),'.xlsx');
xlswrite(filename,data);
end
通过上述方法能够将一年中缺测少于5%的站点数据补齐。
网友评论