matlab 刪除數(shù)據(jù)里NaN和0過(guò)多的列,以及對(duì)應(yīng)的股票代碼
2017-01-17 by:CAE仿真在線 來(lái)源:互聯(lián)網(wǎng)
數(shù)據(jù)如下:
http://pan.baidu.com/s/1hsBij4o
這是朋友在研究過(guò)程中遇到的一個(gè)問(wèn)題,數(shù)據(jù)a1是324*123,123是123只股票,324是324個(gè)交易日,因?yàn)閷?duì)于交易數(shù)據(jù)長(zhǎng)時(shí)間缺失的股票無(wú)法進(jìn)行后續(xù)的計(jì)算,所以朋友要求對(duì)每一只股票進(jìn)行檢查,刪除NaN值和零值的個(gè)數(shù)之和超過(guò)一半交易日的股票;
同時(shí)a2代表的股票代碼,因?yàn)楣善币呀?jīng)被刪除,所以碼表里對(duì)應(yīng)的股票代碼也應(yīng)該被刪除;
a2是123*6的char,123指的是123個(gè)股票代碼,6指的是6個(gè)數(shù)字,如600001;
具體的處理過(guò)程如下:
%計(jì)算NaN的個(gè)數(shù)
function [ a1,cellb] = dataadjust ( a1,a2)
judgenan=isnan(a1);%對(duì)數(shù)據(jù)中的NaN進(jìn)行判斷,得到一個(gè)和a1同大小的矩陣,如果是NaN返回1,否則返回零
numnan=sum(judgenan);%對(duì)每一列進(jìn)行加總,計(jì)算出每一個(gè)列NaN值的個(gè)數(shù)
%下面計(jì)算0的個(gè)數(shù)
trans=a1;
trans(judgenan)=1;%將NaN轉(zhuǎn)化為1
judgezero=~trans;%將trans值進(jìn)行邏輯判斷,對(duì)于0返回1,其他返回零
numzero=sum(judgezero);%將每一列加總,得到每一列里面0的個(gè)數(shù)
total=numnan+numzero;%計(jì)算每一列0和NaN的個(gè)數(shù)之和
%進(jìn)行相應(yīng)數(shù)據(jù)的刪除
cellb=cell(size(a2,1),1);
for i=1:size(cellb,1)
cellb{i}=a2(i,1:6) ;
end%將char轉(zhuǎn)換為cell
for i=size(a1,2):-1:1%遍歷每一只股票
if
total(i)>=162%如果NaN和0的個(gè)數(shù)大于162
a1(:,i)=[];%刪除a1中的數(shù)據(jù),
cellb{i}=[];%刪除股票代碼
cellb(cellfun(@isempty,cellb))=[];%刪除股票代碼
end
end
end
%處理結(jié)果a3,a4所示
開放分享:優(yōu)質(zhì)有限元技術(shù)文章,助你自學(xué)成才
相關(guān)標(biāo)簽搜索:matlab 刪除數(shù)據(jù)里NaN和0過(guò)多的列,以及對(duì)應(yīng)的股票代碼 MatLab培訓(xùn) MatLab培訓(xùn)課程 MatLab在線視頻教程 MatLab技術(shù)學(xué)習(xí)教程 MatLab軟件教程 MatLab資料下載 MatLab代做 MatLab基礎(chǔ)知識(shí) Fluent、CFX流體分析 HFSS電磁分析 Ansys培訓(xùn) Abaqus培訓(xùn)
編輯