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培训
编辑