how to Interpolate hourly data
조회 수: 4 (최근 30일)
이전 댓글 표시
Hello everyone,
I have a large hourly data set (~15 years of data) for several measuring points. for the purpose I'll add an example data file with 4 locations.
the format is [year month day hour data1 data2 data3 data4]
Missing records are registered as NaN.
I need to interpolate if the amount of missing records is less or equal to 3 (for each day). If the amount of missing records is greater than 3 (for each day) then the day remains untouched.
What would be the best way to do this? I'm stuck on this, probably is not that hard but I'm not a regular matlab user and therefore that might be the reason I'm struggling to find a way to do this.
thank you for the attention.
댓글 수: 0
채택된 답변
Akira Agata
2019년 4월 1일
Hmm, interesting problem.
I think the following is one possible straight-forward solution.
% Read data file
D = dlmread('test.txt');
Time = datetime(D(:,1),D(:,2),D(:,3)) + hours(D(:,4));
% Convert to timetable
T = [table(Time),...
array2table(D(:,5:end),'VariableNames',{'Data1','Data2','Data3','Data4'})];
TT = table2timetable(T);
% Num of NaN for each day, each column
TT2 = retime(TT,'daily',@(x) nnz(isnan(x)));
% Apply linear interpolation if num of NaN is (0,3] per day.
for nDay = 1:height(TT2)
for nVar = 1:4
if TT2{nDay,nVar} > 0 && TT2{nDay,nVar} <= 3
idx = isbetween(TT.Time,TT2.Time(nDay),TT2.Time(nDay)+days(1));
TTseg = fillmissing(TT(idx,nVar),'linear');
TT(idx,nVar) = TTseg;
end
end
end
추가 답변 (1개)
Andrei Bobrov
2019년 4월 1일
편집: Andrei Bobrov
2019년 4월 1일
T = readtable('test.txt','ReadVariableNames',false,...
'Format','%d %d %d %f %f %f %f %f');
time1 = datetime(T{:,1:3}) + hours(T{:,4});
TT = table2timetable(T(:,5:end),'RowTime',time1);
TT.Properties.VariableNames = sprintfc('data%d',1:4);
TT_out = varfun(@fun,TT);
function out = fun(x)
bw = isnan(x);
N = accumarray(bwlabel(bw)+1,1);
N = N(2:end);
lo = ismember(bw,find(N > 3));
x(lo) = 0;
out = fillmissing(x,'linear');
out(lo) = nan;
end
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Interpolation of 2-D Selections in 3-D Grids에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!