% clc
% clear all
%
% 導入數據(原始數據)
Data = xlsread('F:\實驗數據\數據彙總表111','D:M');
figure(1)
x3str={'z1','z2','z3','z4','z5','z6','z7','z8','z9','z10','z11','z12','z13','z14','z15'}
bar(Data(1:15))
xtextp=1:15;%每個標籤放置位置的橫座標,這個自然應該和原來的一樣了。
ytextp=-0.1*0.18*ones(1,length(xtextp));
text(xtextp-0.3,ytextp,x3str)
set(gca,'XTickLabel',[]); %將原座標(1,2,3,..)去掉
title('變量z1-z15空值百分比圖','fontsize',12)
ylim([0,0.85])
figure(2)
x3str={'z16','z17','z18','z19','z20','z21','z22','z23','z24','z25','z26','z27','y1','y2'};
bar(Data(16:29))
xtextp=1:14;%每個標籤放置位置的橫座標,這個自然應該和原來的一樣了。
ytextp=-0.1*0.04*ones(1,length(xtextp));
text(xtextp-0.3,ytextp,x3str)
set(gca,'XTickLabel',[]); %將原座標(1,2,3,..)去掉
title('變量z11-z27、y1、y2空值百分比圖','fontsize',12)
%
% [M N] = size(Data); %矩陣B的行數與列數
% % 缺失值補全,
% % 補全依據是確失的值認爲與它上一行的數據一樣,即每個時間段測一次
% % 未測的時間段認定與它最近的上次測試結果一致.
% for i = 2:M
% for j = 1:N
%
% AA = isnan(Data);
%
% if AA(i,j) == 1
%
% Data(i,j) = Data(i-1,j);
%
% else
%
% Data(i,j) = Data(i,j);
%
% end
% end
% end
%
%
% % 刪除數據中的空值
% [U V] = size(Data);
% BB = isnan(Data);
% [u,v] = find(BB()==1);
% Data(u,:) = [];
figure(1);boxplot(Data(:,1:10))
title('變量z1-z10箱體圖','fontsize',12)
set(gca,'Xticklabel',{'z1','z2','z3','z4','z5','z6','z7','z8','z9','z10'});
figure(2);boxplot(Data(:,11:27))
title('變量z11-z27箱體圖','fontsize',12)
set(gca,'Xticklabel',{'z11','z12','z13','z14','z15','z16','z17','z18','z19','z20','z21','z22','z23','z24','z25','z26','z27'});
figure(3);boxplot(Data(:,28:29))
title('變量y1,y2箱體圖','fontsize',12)
set(gca,'Xticklabel',{'y1','y2'});
%% 使用肖維勒方法(等置信概率)剔除異常值
[m n] = size(Data);
Y = [];
w = 1 + 0.4*log(m); % 肖維勒係數(近似計算公式)
for i = 1:n
x = Data(:,i);
YiChang = abs(x-mean(x)) > w*std(x);
%YiChang = x > mean(x)+3*std(x) | x < mean(x)-3*std(x);
%Std(:,i) = std(x);
%Mean(:,i) = mean(x);
Y(:,i) = YiChang;
end
[u v] = find(Y() == 1); % 找出異常值所在的行與列
uu = unique(u); % 剔除重複的行數
Data(uu,:) = [ ]; %令異常值所在行爲空,即剔除異常值
數據預處理---空值(補全或刪除)與異常值(剔除)(基於MATLAB)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.