笔者拿到的C题其实质是一道大数据分析的题目,须要经过已经给出的数据推测出各类东西,可是给出的数据的参数种类不少,须要自行选择,其中个数的考究就留给你们本身去琢磨。大数据
拿到选取出来的label
以后就须要将这些label
对应的数据从大量的数据中切割出来。code
当时主办方固然不会让你这么容易就经过了,由于你选取的数据大部分是残缺不全的,并且缺的年份甚至有多是不一样的,这就比较蛋疼ing。ci
MATLAB提供的从各类各样的材料导入数据的方法是很是强大的,因此并不用担忧导入的问题。因此咱们要解决的实际上是如下几个问题。get
label
所对应的数据?怎样选取出数据的办法因人而异,笔者将本身的代码贴出,但愿给你们一点灵光。数据分析
至于数据缺失,要么就放弃这个label
,选取数据完整的label
,要么就想办法把缺失的数据补齐。it
说到补齐不少人天然想到的是插值与拟合或者回归
,这几种方法中间的微妙差别是读者该去考虑的问题,笔者就很少赘述。可是把数据补齐这点要注意的是NaN和0
的区别,同时须要注意的是补齐的数据要放到对应的年份,否则会影响到会面的分析。io
#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的工做空间,有兴趣的读者能够自行下载。function
连接 密码:dsj3class