matlab的缺失值处理---插值&自动填充

项目场景:

缺失值处理中遇到一列数据有间断、连续缺失值,且局部满足线性性,因此决定采用线性插值.又因为数据有303个缺失值,为了方便希望插值能自动填入空缺值.

解决方案:

以下为matlab代码

#函数功能:对数据进行拟合插值,并自动将插值替换NaN

#数据插值拟合
"""
使用方法:
	在matlab导入含间断的空缺值的列,赋值给y即可。即,将y用自己的数据替换,注意维度要求行维不可变,列维可变。
"""

y = glucose              %glucose为导入的某列数据,维度(1,3000)
x = 1:size(y)            % 生成13000的数据,维度(1,3000)

data = [x',y]             %data维度(3000,2)
% isnan(y)                 %判断是否为NaN,是则为1

%以下为核心部分
d=[]
d_b =[]
for i = 1:size(y)
    if isnan(data(i,2))       %是NaN返回1
        d = [d,data(i,1)]     %d为空值存在的索引
    else
        d_b = [d_b,data(i,1)]  %d为非空值存在的索引
    end
end
train_x =x(d_b)                 %train_x为x对应的所有非空数据
train_y = y(d_b)				%train_y为y对应的所有非空数据
cha = x(d)						%cha为待插值序号(可看作NaN的索引位置)
pre =interp1(train_x,train_y,cha,'linear')



%%数据自动插入
%本质上就是NaN值用插值覆盖掉,然后将填充完的数据data保存
%承接上面核心部分
account =1
for i = 1:size(y)
    if isnan(data(i,2))%是NaN返回1
        data(i,2)=pre(account)%d为空值存在的索引
        account =account+1
    else
        d_b = [d_b,data(i,1)]%d为非空值存在的索引
    end
end

欢迎提问,知无不言。

  • 17
    点赞
  • 149
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腹有诗书,何患无辞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值