matlab 删除数据里NaN和0过多的列,以及对应的股票代码

2017-01-17  by:CAE仿真在线  来源:互联网

数据如下:
http://pan.baidu.com/s/1hsBij4o
这是朋友在研究过程中遇到的一个问题,数据a1是324*123,123是123只股票,324是324个交易日,因为对于交易数据长时间缺失的股票无法进行后续的计算,所以朋友要求对每一只股票进行检查,删除NaN值和零值的个数之和超过一半交易日的股票;
同时a2代表的股票代码,因为股票已经被删除,所以码表里对应的股票代码也应该被删除;
a2是123*6的char,123指的是123个股票代码,6指的是6个数字,如600001;

具体的处理过程如下:
%计算NaN的个数
function [ a1,cellb] = dataadjust ( a1,a2)
judgenan=isnan(a1);%对数据中的NaN进行判断,得到一个和a1同大小的矩阵,如果是NaN返回1,否则返回零
numnan=sum(judgenan);%对每一列进行加总,计算出每一个列NaN值的个数

%下面计算0的个数
trans=a1;
trans(judgenan)=1;%将NaN转化为1
judgezero=~trans;%将trans值进行逻辑判断,对于0返回1,其他返回零
numzero=sum(judgezero);%将每一列加总,得到每一列里面0的个数
total=numnan+numzero;%计算每一列0和NaN的个数之和

%进行相应数据的删除
cellb=cell(size(a2,1),1);
for i=1:size(cellb,1)
cellb{i}=a2(i,1:6) ;
end%将char转换为cell

for i=size(a1,2):-1:1%遍历每一只股票
if total(i)>=162%如果NaN和0的个数大于162
a1(:,i)=[];%删除a1中的数据,
cellb{i}=[];%删除股票代码
cellb(cellfun(@isempty,cellb))=[];%删除股票代码
end
end

end
%处理结果a3,a4所示

开放分享:优质有限元技术文章,助你自学成才

相关标签搜索:matlab 删除数据里NaN和0过多的列,以及对应的股票代码 MatLab培训 MatLab培训课程 MatLab在线视频教程 MatLab技术学习教程 MatLab软件教程 MatLab资料下载 MatLab代做 MatLab基础知识 Fluent、CFX流体分析 HFSS电磁分析 Ansys培训 Abaqus培训 

编辑
在线报名:
  • 客服在线请直接联系我们的客服,您也可以通过下面的方式进行在线报名,我们会及时给您回复电话,谢谢!
验证码

全国服务热线

1358-032-9919

广州公司:
广州市环市中路306号金鹰大厦3800
电话:13580329919
          135-8032-9919
培训QQ咨询:点击咨询 点击咨询
项目QQ咨询:点击咨询
email:kf@1cae.com