zoukankan      html  css  js  c++  java
  • matlab数据预处理

    %% 读取年数据 
    function [XXnum,YYnum]=dataRead()    
    [numXX,txtXX,rawXX]=xlsread('XXyear.xlsx');
    [numYY,txtYY,rawYY]=xlsread('YYyear.xlsx');
    [m,n]=size(numXX);
    XXnum=zeros(12,n);   %12为2008到2020年的年数;n为年特征数
    YYnum=zeros(12,1);   
    XXnum(1:11,:)=numXX;
    YYnum=numYY;
    end
    
    %%拉格朗日插值补全法
    function yy=lagrange(x1,y1,xx)
    %本程序为Lagrange1插值,其中x1,y1
    %为插值节点和节点上的函数值,输出为插值点xx的函数值,
    %xx可以是向量。
    syms x
    n=length(x1);
    for i=1:n
        t=x1;
        t(i)=[];
        L(i)=prod((x-t)./(x1(i)-t));    % L向量用来存放插值基函数(基函数逆序排在数组中)
    end
        u=sum(L*y1);
        p=simplify(u) % p是简化后的Lagrange插值函数(字符串)
        yy=subs(p,x,xx);    %p是以x为自变量的函数,并求xx处的函数值;
        yy=eval(yy);
    end
    
    %% 年数据补全(lagrange插值)【2008-2020】
    function XX1_bu=yeardata_pro()   %XX1为预处理后的特征年度数据
    [XXnum,YYnum]=yeardataRead;   %读取数据;
    XX0=bunan(XXnum);         %零值对缺省数值补全;
    XX1=XX0;                  %拉格朗日/均值对零值补全; 
    [m,n]=size(XX1);
    for j=1:n                 %遍历所有特征
        feature=XX1(:,j);
        xnan_index=find(feature==0);   %将feature中的nan位置存放在jnan_index中
        inan=xnan_index;               %某特征的nan的位置存放在inan中;(理解方便); 
        ynan=YYnum(inan);              %存放nan对应的函数值,也就是秦皇岛煤炭价格
    %     feature(inan)=mean(xnotnan);    %均值补全 
        for k=1:size(inan)
            inan1=inan(k);             %nan对应的行位置
            ynan1=YYnum(inan1);        %nan对应的目标值(秦皇岛煤炭价格)
            xnotnan4=XX1(inan1-6:inan1-1,j);
            ynotnan4=YYnum(inan1-6:inan1-1);
            x_bu=lagrange(ynotnan4,xnotnan4,ynan1);
            XX1(inan1,j)=x_bu;       
            feature(inan)=x_bu;
            XX1(:,j)=feature;
        end
            XX1_bu=XX1;
    end
    %% 读取全部特征数据
    function [XXnum,YYnum]=alldataRead()     %读取全部数据(年数据插值处理后)
    [numXX,txtXX,rawXX]=xlsread('XX_pro.xlsx');
    [numYY,txtYY,rawYY]=xlsread('YY.xlsx');
    XXnum=numXX(3:147,:);
    YYnum=numYY
    end
    
    function [zzz]=bunan(zzz)         %缺失值检测并填充为0
    [m,n]=size(zzz); %所有数据
    count=0; % 统计空数值;
    for i=1:m
        for j=1:n
            count=count+isnan(zzz(i,j));
            if isnan(zzz(i,j))==1
            %if (isempty(zz2{i,j})==1|isnan(zz2{i,j}==1))
                zzz(i,j)=0;
            end
        end
    end
    %%将年数据与月数据汇总
    %% 全部特征数据补全(均值补全)
    function XX1=alldata_pro()        %XX1为预处理后的特征年度数据
    [XXnum,YYnum]=alldataRead;   %读取数据;
    XX0=bunan(XXnum);         %零值对缺省数值补全;
    XX1=XX0;                            %拉格朗日/均值对零值补全; 
    [m,n]=size(XX1);
    for j=1:n                              %遍历所有特征
        feature=XX1(:,j);
        countnan=0;
        xnan=[];
        ynan=[];
        xnotnan_index=find(feature);% x是原特征中不为0的值
        xnotnan=feature(xnotnan_index);
    %     ynotnan=YYnum(xnotnan_index);        %存放正常x对应的函数值,也就是秦皇岛煤炭价格
        xnan_index=find(feature==0);   %将feature中的nan位置存放在jnan_index中
        inan=xnan_index;               %某特征的nan的位置存放在inan中;(理解方便); 
        countnan=size(xnan_index,1);   %countnan 存放nan个数;
        ynan=YYnum(inan);              %存放nan对应的函数值,也就是秦皇岛煤炭价格
        feature(inan)=mean(xnotnan);    %均值补全 
        XX1(:,j)=feature;
        XX1_bu=XX1;
    end
  • 相关阅读:
    MyBatis操作数据库(基本增删改查)
    CSS和jQuery分别实现图片无缝滚动效果
    jQuery学习
    ORACLE PL、SQL编程
    JavaScript_DOM详解
    JavaScript_DOM(文件对象模型)
    JavaScript 基础
    用javascript编写猜拳游戏(函数)
    用javascript编写简单银行取钱存钱流程(函数)
    用Java编写银行存钱取钱
  • 原文地址:https://www.cnblogs.com/feynmania/p/12893842.html
Copyright © 2011-2022 走看看