先貼一下參考博文:https://www.cnblogs.com/fangxiaoqi/p/11440078.html
吹一下這位大佬,感覺這個大佬寫的博客都十分認真,推測應該是同級的,哎,內心十分敬佩,若我有他十分之一功力就好了,而且文筆也很贊,經常會寫一些帶有思考性的文章,贊👍。
進入主題:
這篇文章主要寫一下數學建模中如何對數據進行預處理,主要包括缺失數據、異常數據的檢查和數據特徵的提取,希望今年參加數模的人都有個好成績吧(感覺自己好囉嗦).......
缺失數據和異常數據的查找:
%% 餐飲銷量數據缺失值及異常值檢測
clear;
catering_sale = '../data/catering_sale.xls'; % 餐飲數據
index = 1; % 銷量數據所在列
%% 讀入數據
[num,txt] = xlsread(catering_sale);
sales =num(2:end,index);
rows = size(sales,1);
%% 缺失值檢測 並打印結果
nanvalue = find(isnan( sales));
if isempty(nanvalue) % 沒有缺失值
disp('沒有缺失值!');
else
rows_ = size(nanvalue,1);
disp(['缺失值個數爲:' num2str(rows_) ',缺失率爲:' num2str(rows_/rows) ]);
end
%% 異常值檢測
% 箱形圖上下界
q_= prctile(sales,[25,75]);
p25=q_(1,1);
p75=q_(1,2);
upper = p75+ 1.5*(p75-p25);
lower = p25-1.5*(p75-p25);
upper_indexes = sales(sales>upper);
lower_indexes = sales(sales<lower);
indexes =[upper_indexes;lower_indexes];
indexes = sort(indexes);
% 箱形圖
figure
hold on;
boxplot(sales,'whisker',1.5,'outliersize',6);
rows = size(indexes,1);
flag =0;
for i =1:rows
if flag ==0
text(1+0.01,indexes(i,1),num2str(indexes(i,1)));
flag=1;
else
text(1-0.017*length(num2str(indexes(i,1))),indexes(i,1),num2str(indexes(i,1)));
flag=0;
end
end
hold off;
disp('餐飲銷量數據缺失值及異常值檢測完成!');
使用箱型圖判斷異常值的優點:箱形圖的繪製依靠實際數據,不需要事先假定數據服從特定的分佈形式,沒有對數據作任何限制性要求,它只是真實直觀地表現數據形狀的本來面貌;另一方面,箱形圖判斷異常值的標準以四分位數和四分位距爲基礎,四分位數具有一定的耐抗性,多達25%的數據可以變得任意遠而不會很大地擾動四分位數,所以異常值不能對這個標準施加影響,箱形圖識別異常值的結果比較客觀。
缺失值處理:
處理缺失值的方法可以分爲三類:刪除記錄、數據插補和不處理。其中,插補最常用。
插補方法:均值/中位數/衆數插補、使用固定值、最近臨插補、迴歸方法、插值法。
推薦使用拉格朗日插值法和牛頓插值法對缺失值進行插補。
在插值前會對數據進行異常值檢測,發現的一些異常數據會定義爲空缺值,也會進行補數。
異常值處理:
異常值處理的常用方法有:
(1)刪除含有異常值的記錄
(2)視爲缺失值
(3)平均值修正
(4)不處理
數據特徵分析:
1.對比分析
2.統計量分析
3.貢獻度分析:貢獻度分析又稱帕累託分析,原理使帕累托法則,它是指任何特性羣體中,重要的因子通常只佔少數,而不重要的因子則佔多數,因此只要控制具有重要性的少數因子即能控制全局。
4.相關性分析:
(1)直接繪製散點圖:最直觀判斷線性關係。
(2)繪製散點圖矩陣
(3)計算相關係數
具體代碼實現看本文最上面的參考博文