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

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

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

具體的處理過程如下:
%計算NaN的個數(shù)
function [ a1,cellb] = dataadjust ( a1,a2)
judgenan=isnan(a1);%對數(shù)據(jù)中的NaN進(jìn)行判斷,得到一個和a1同大小的矩陣,如果是NaN返回1,否則返回零
numnan=sum(judgenan);%對每一列進(jìn)行加總,計算出每一個列NaN值的個數(shù)

%下面計算0的個數(shù)
trans=a1;
trans(judgenan)=1;%將NaN轉(zhuǎn)化為1
judgezero=~trans;%將trans值進(jìn)行邏輯判斷,對于0返回1,其他返回零
numzero=sum(judgezero);%將每一列加總,得到每一列里面0的個數(shù)
total=numnan+numzero;%計算每一列0和NaN的個數(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的個數(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) 

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

全國服務(wù)熱線

1358-032-9919

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