MATLAB感悟(1)--数据切割与插值拟合
2018-02-28 00:00
10 查看
摘要: 笔者最近参加了2018年的comap(Consortium for Mathematics and Its' Application),这也是笔者第一次参加这类型的比赛,在当中也收获到了许多的技巧和知识,为了与各位分享,笔者准备了一个系列博客分段记录,笔者会将自己的代码的一部分贴出来,多有不正之处,欢迎指正。由于笔者这次选的题目是C题所以只提供做题中用到的方法的代码与思路。如果有读者愿意欢迎联系本人共同探讨进步。
拿到选取出来的
当时主办方当然不会让你这么容易就通过了,因为你选取的数据大部分是残缺不全的,而且缺的年份甚至有可能是不同的,这就比较蛋疼ing。
怎样在大量的数据中准确的找到自己选取的
如果数据缺失怎样处理?
怎样选取出数据的办法因人而异,笔者将自己的代码贴出,希望给大家一点灵光。
至于数据缺失,要么就放弃这个
说到补齐很多人自然想到的是
链接 密码:dsj3
目的描述
笔者拿到的C题其实质是一道大数据分析的题目,需要通过已经给出的数据推测出各种东西,但是给出的数据的参数种类很多,需要自行选择,其中个数的考究就留给大家自己去琢磨。 拿到选取出来的
label之后就需要将这些
label对应的数据从大量的数据中切割出来。
当时主办方当然不会让你这么容易就通过了,因为你选取的数据大部分是残缺不全的,而且缺的年份甚至有可能是不同的,这就比较蛋疼ing。
解决思路
MATLAB提供的从各种各样的材料导入数据的方法是非常强大的,所以并不用担心导入的问题。所以我们要解决的其实是以下几个问题。怎样在大量的数据中准确的找到自己选取的
label所对应的数据?
如果数据缺失怎样处理?
怎样选取出数据的办法因人而异,笔者将自己的代码贴出,希望给大家一点灵光。
至于数据缺失,要么就放弃这个
label,选取数据完整的
label,要么就想办法把缺失的数据补齐。
说到补齐很多人自然想到的是
插值与拟合或者回归,这几种方法中间的微妙差异是读者该去考虑的问题,笔者就不多赘述。但是把数据补齐这点要注意的是
NaN和0的区别,同时需要注意的是补齐的数据要放到对应的年份,不然会影响到会面的分析。
代码展示
#param_cell是读者自己的lab,MSN是总的lab function OUTPUT=select_MSN_Index(param_cell,MSN) temp=[]; sizeNum=size(param_cell); sizeNum=sizeNum(2); for ind=1:sizeNum if MSN==param_cell{ind}{1} temp=cat(2,temp,param_cell{ind}{4}); end end OUTPUT=temp;
function DataSet=Split_Data(ProblemData,MSN) MSN=unique(MSN) %MSN 是行向量 TX=(1960:2009)'; #... for i=1:4 TEMP=select_Code_Index(ProblemData,CODE(i*2-1:2*i),2); for j=1:583 TTEMP=select_MSN_Index(TEMP,char(MSN{j})); SIZE=size(TTEMP); if SIZE<50 MX=zeros(1,50-SIZE(2)); MX(:,:)=NaN; TTEMP=cat(2,MX,TTEMP); end switch(i) case 1 TX(:,j+1)=TTEMP'; #... end end switch(i) case 1 DataSet(1)={TX}; # ... end end
#切割出对应的地方因子(区域)的数据 function [FData_M,LOCATION,Lab]=Split_Factor_Data(title,F_title,DataSet,index) LOCATION=[]; Lab={}; NUM=1; for i=1:index OBJECT=F_title{i,1}; for j=1:584 MSN=title{1,j}; if j~=1 if MSN==OBJECT LOCATION(:,NUM)=j; Lab(i,1)={MSN}; Lab(i,2)={OBJECT}; NUM=NUM+1; end end end FData_M=DataSet(:,LOCATION); end
#将选取切割好的数据做数据的补齐 function Data=FitData_Cubicinterp(DataSet,index) Data_X=[1960:2009]'; for i=1:index Data_Y=DataSet(:,i); LOCATION=find(Data_Y==0|isnan(Data_Y)); TEMP=Data_Y; Data_X(LOCATION)=[]; Data_Y(LOCATION)=[]; Param=fit(Data_X,Data_Y,'exp1' ); RESULT=Param(LOCATION+1959); TEMP(LOCATION)=RESULT; Data(:,i)=TEMP; Data_X=[1960:2009]'; figure plot(Data_X,TEMP) end
结果展示
由于结果有多种多样的,直接给出MATLAB的工作空间,有兴趣的读者可以自行下载。链接 密码:dsj3
相关文章推荐
- matlab_离散数据处理_插值拟合积分
- 数据拟合与插值方法(matlab)
- matlab数据拟合
- 用matlab实现自定义函数的数据拟合
- Matlab曲面拟合和插值
- Matlab画平滑曲线的两种方法( 拟合或插值后再用plot即可)
- MATLAB插值与拟合(3)
- Matlab实现插值与拟合
- Matlab 1.矩阵的切割再把得到的矩阵按顺序拼接排列(1维数据按规律转为2维数据方便深度学习使用)
- Matlab画平滑曲线的两种方法( 拟合或插值后再用plot即可)
- matlab学习--插值和拟合
- Matlab曲面拟合和插值
- matlab 数据拟合
- matlab_数据拟合
- MATLAB 简单的数据拟合
- 数值分析(拟合、插值和逼近)之数据插值方法(线性插值、二次插值、Cubic插值、埃米尔特、拉格朗日多项式插值、牛顿插值、样条插值)(含opengl程序)
- MATLAB在多项式插值及曲线拟合方面的应用
- matlab中的曲线拟合与插值
- Matlab中数据处理和多项式插值与曲线拟合
- 数模算法-数据拟合、参数估计、插值等数据处理算法