matlab 刪除數(shù)據(jù)里NaN和0過多的列,以及對應(yīng)的股票代碼

2017-01-17  by:CAE仿真在線  來源:互聯(lián)網(wǎng)

數(shù)據(jù)如下:
http://pan.baidu.com/s/1hsBij4o
這是朋友在研究過程中遇到的一個(gè)問題,數(shù)據(jù)a1是324*123,123是123只股票,324是324個(gè)交易日,因?yàn)閷τ诮灰讛?shù)據(jù)長時(shí)間缺失的股票無法進(jìn)行后續(xù)的計(jì)算,所以朋友要求對每一只股票進(jìn)行檢查,刪除NaN值和零值的個(gè)數(shù)之和超過一半交易日的股票;
同時(shí)a2代表的股票代碼,因?yàn)楣善币呀?jīng)被刪除,所以碼表里對應(yīng)的股票代碼也應(yīng)該被刪除;
a2是123*6的char,123指的是123個(gè)股票代碼,6指的是6個(gè)數(shù)字,如600001;

具體的處理過程如下:
%計(jì)算NaN的個(gè)數(shù)
function [ a1,cellb] = dataadjust ( a1,a2)
judgenan=isnan(a1);%對數(shù)據(jù)中的NaN進(jìn)行判斷,得到一個(gè)和a1同大小的矩陣,如果是NaN返回1,否則返回零
numnan=sum(judgenan);%對每一列進(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)行邏輯判斷,對于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過多的列,以及對應(yīng)的股票代碼 MatLab培訓(xùn) MatLab培訓(xùn)課程 MatLab在線視頻教程 MatLab技術(shù)學(xué)習(xí)教程 MatLab軟件教程 MatLab資料下載 MatLab代做 MatLab基礎(chǔ)知識 Fluent、CFX流體分析 HFSS電磁分析 Ansys培訓(xùn) Abaqus培訓(xùn) 

編輯
在線報(bào)名:
  • 客服在線請直接聯(lián)系我們的客服,您也可以通過下面的方式進(jìn)行在線報(bào)名,我們會(huì)及時(shí)給您回復(fù)電話,謝謝!
驗(yàn)證碼

全國服務(wù)熱線

1358-032-9919

廣州公司:
廣州市環(huán)市中路306號金鷹大廈3800
電話:13580329919
          135-8032-9919
培訓(xùn)QQ咨詢:點(diǎn)擊咨詢 點(diǎn)擊咨詢
項(xiàng)目QQ咨詢:點(diǎn)擊咨詢
email:kf@1cae.com