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個交易日,因?yàn)閷τ诮灰讛?shù)據(jù)長時間缺失的股票無法進(jìn)行后續(xù)的計算,所以朋友要求對每一只股票進(jìn)行檢查,刪除NaN值和零值的個數(shù)之和超過一半交易日的股票;
同時a2代表的股票代碼,因?yàn)楣善币呀?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)
編輯