|
一.数据预处理 1.缺失数据查找 wps实现(最简单的方法) https://zhidao.baidu.com/question/1690641178558189228.html matlab实现 0 r5 k0 m- Q% j6 V( |, X1 [4 }
B = xlsread('C:\Users\DELL\Desktop\新建文件夹\cumcm2012a\附件1-葡萄酒品尝评分表.xls','第一组红葡萄酒品尝评分','C75 84');5 ^- }/ R4 `. c
A = B;4 p7 } _2 Z: e/ s% r7 Z
[I,J]= size(A);
" `" ^' |' @8 I, q( H2 \6 z" c; T1 z: C: x9 e! D% C' b5 h
for j=1:J
4 p* b, d: w! f for i=2:I % the 1st row does not contain NaN
# u+ a- ?( t2 ]( L- b if isnan(A(i,j)) %通过isnan函数判断该数据是否为NaN类型( |- c$ q6 [. f
disp(['(',num2str(i),',',num2str(j),')']); %如果是NaN类型则打印该数据在表格中的位置- {6 h9 G5 f: @$ M* }
end , F+ ?9 }) x, G- x0 V
end- ?$ x2 T2 H6 a; j
end
, C G, _) b6 d( ` Z) x- t7 G7 u% Q" S7 ~) c- V1 p
python实现(https://blog.csdn.net/alanguoo/article/details/77198503)8 a) e5 W) o: v0 B8 E) p1 K: u
0 p: [: f! W$ O" z% v
import pandas as pd0 k4 a: \) p8 b
2 a, z; v" A' w0 p' b/ o
import numpy as np
* k# u V; G0 Y# R1 J3 z( ~ [$ N! d
df = pd.DataFrame(np.random.randn(10, 6))
! a# w: m* k+ P+ x+ G8 h2 f2 R9 E" n" g; D# c1 a
# Make a few areas have NaN values
* f/ @7 A4 w, \3 T( z: u2 ?
' X7 w: d/ v$ I5 q* d- X/ U2 jdf.iloc[1:3, 1] = np.nan8 c# o& P0 l- ]
1 v" t8 i7 U N' D2 T/ z
df.iloc[5, 3] = np.nan
6 \8 d* A" @3 }9 P+ P9 Z r7 c4 J9 [% p+ O
df.iloc[7:9, 5] = np.nan
9 r+ _& g3 Y7 c7 @1 R4 Z9 {$ N) ?' Z4 C
print(df)2 l2 U- E) a3 p/ V4 U$ O( ~2 @2 E
; d9 J! G2 |6 q# z' c! q4 Rprint(df.index[np.where(np.isnan(df))[0]]) #打印缺失值的行
$ p% D, K) t( R1 F2 P" bprint(df.columns[np.where(np.isnan(df))[1]]) #打印缺失值的列
( [0 d$ C+ B+ B% \; ^
* k- o& F. t4 O" o; @2.异常数据查找 z-score标准化(matlab实现) ! H$ Z3 f7 A; h: C# M. `
B = xlsread('C:\Users\DELL\Desktop\新建文件夹\cumcm2012a\附件1-葡萄酒品尝评分表.xls','第一组白葡萄酒品尝评分','D233:M233');
+ I3 z1 ?7 k# L% m' C%将数据z-score标准化
3 Z# M) I3 T/ v, k9 [: \A = zscore(B)
& b: }6 e7 |0 E8 ?) e1 mdisp(A)% C7 l" N& B% X/ ?! Y! E
%获取矩阵的行数和列数,m为行数,n为列数+ y% d1 p( M, f9 S; {
[m,n] = size(A)
: {9 `2 J: ?2 M! t$ Z; n- Qfor i = 1:n
+ h: l* V1 b4 C: [+ @$ h %确定一个阈值,用来判断是否是异常数据
5 O2 ]' P8 Q7 F0 d, Y if abs(A(1,i))>2
, L2 _7 g0 p4 B% \7 ~( H disp(['(1,',num2str(i),')'])
1 k/ X( I, I1 x7 J) {6 Y end
0 B* e3 J: i. T2 \end
1 i1 G* a* _5 O& V0 z2 g
) W4 h( M* v) c& g, @/ T二.聚类分析
t! T* M y m: s, {& s8 G% N
. n' g# P, c; Y- P& E( K* I1.一维数据的聚类分析) o) L5 U9 C% z) u* U% w7 `3 T
5 ~+ }, E- f' }
参考博文:https://www.biaodianfu.com/clustering-on-a-one-dimensional-array.html& r' q9 D! y8 \0 ~( X& r4 j
6 d( a0 ~+ v- T6 P5 T5 w" mmatlab实现(参考博文:https://jingyan.baidu.com/article/0202781154d7ba1bcc9ce5f5.html)* F$ H1 B1 s" N, o( |" x
8 P/ }% K% T# T8 l$ L }' A# k
clc;
$ q- c% p) e& k+ z
- U) \% _7 _$ J% J/ Dclear;; ^: t4 G2 g3 c& T
7 v3 |& @5 ?; M3 z
yw_data=xlsread('C:\Users\DELL\Desktop\第二问得分.xls'); %读入一维数据样本到yw_data矩阵' p/ p4 J) ]3 w" C
* S$ ]( ^5 a4 ~ v9 v, \$ x
A = yw_data';
! o% B% \1 o. T5 Q* P
2 {% d9 F- j1 `% ?xx=A;
$ ?! G; d, S$ N3 _& X
3 n! A6 l% K" f; C2 F, J' T- F2 wclus=4;# l5 S1 G3 t5 ~: D% e9 k
' I# B9 F/ P& I; k
[idx,c]=kmeans(xx,clus);
$ Y. o' O2 \8 Q! @' b8 g
F! e. c9 s3 q$ D" K# B2 @cc1=[];( ?! ^( ]; K9 |8 r
. ?2 K8 y5 B( n" ~: A K0 L2 d
cc2=[];+ \+ k' R& D$ K4 O9 R: g
O( V4 t3 A* e" t" Scc3=[];+ j. z$ F0 p) e8 S4 {0 O
8 \& F1 I. C5 t: f* K( `cc4=[];
$ I, @3 B& k" Z/ K- g/ j3 ?# S% a9 {; q4 \' V' ?* \, d& y
[n,m]=size(xx);
. D# R6 i6 V6 u" D4 Y0 |; X& G$ ?' v# U
for i=1:n
& h4 e1 Q0 ~- q0 {: w' W& ?9 N) l2 B i: [8 |: f$ K ~& a
if idx(i)==1
; q8 M4 t$ _; o4 G7 F- [. D/ y- \( u& U( r, {6 }4 s
cc1=[cc1;xx(i)];
4 D. |& u6 q+ \7 V1 T7 v! L- R8 g2 j, @
elseif idx(i)==2
, g5 y2 L* h* c
( d2 r8 p m0 i7 Q7 h$ l' \ cc2=[cc2;xx(i)];
; R" c8 J. q U& R* A9 @0 h0 _+ T4 A9 y1 T; f
elseif idx(i)==3
' i3 i4 W/ V G. ~( T \8 ?; i1 R; g8 j2 ^7 N9 v
cc3=[cc3;xx(i)];
' @8 _7 X' U5 ~8 N* E1 i9 ?8 c8 j5 D) h0 \! i
elseif idx(i)==4
& l" |- ~ Z5 ~- Y# {5 \* O) c' |( O' i4 x4 h% E0 }
cc4=[cc4;xx(i)]; M8 ?5 i% `. ^3 h
- w0 X1 X) v! @' G. r z
end
$ j- f# T# x: U% h" u. T& @% L/ ^) P+ Q8 f# T$ G- }& A3 ^& n
end
9 c6 k7 r- s* H, X8 X
$ a) c% i( z$ ~( L* O6 `: \disp('第一类边界')' J G ?1 H. j# ~- }( o
5 J/ r5 s6 H9 W8 k" ^[min(cc1),max(cc1)]
, l u& z7 V! K- l9 D' {" ^
* B$ z- W: @0 M! H8 hdisp('第二类边界')
5 z: W" Q8 t2 i, V: ?" E4 F" o+ q- I; O9 s" }
[min(cc2),max(cc2)]: {, ?) A" o/ Y. Y4 R3 r, J
% t% Q; f7 k6 m; }8 r
disp('第三类边界')
+ M: d7 R+ B7 I- o7 w9 d/ s4 g6 T* M9 U/ ?5 x# Y
[min(cc3),max(cc3)] * }: G$ v1 J- V6 V/ ~. n# @
8 g) _; B+ V9 o! J/ y8 W! ydisp('第四类边界')" J% Y6 Z* S" W t9 e5 [, z* D
1 z% Y9 d: ^* e3 A ?# k
[min(cc4),max(cc4)]
' {( V) z0 t: z: r3 Z7 {% B" d8 ]; ?3 ^% N
disp('四类中心')( v* g; c+ e8 E1 d* U
$ z8 S" T* @! n8 d8 Z
c4 V, Z9 P+ T' O: p/ [/ `+ M5 J' M' b
! m; i9 z1 R2 vh1=plot(xx,'w');grid on;hold on;
. N& r/ R9 ^+ M6 u
, m) K3 ]: X, ~6 [% G& cfor i=1:n
\: M1 s J: }& K% C6 v" u i/ y9 S7 |7 j' }$ M! M) G! _
if idx(i)==1
5 v5 v9 ?3 k# `) y$ h/ N" P0 i' C. k$ n
text(i,xx(i),num2str(idx(i)),'color',[1 0 0]);
/ c3 o# v0 k8 }. r2 R! @, ]( w- P7 Z! f/ P
elseif idx(i)==2
% @: |7 l' [8 U& l- @9 R" @0 E, p. ?9 f: ~
text(i,xx(i),num2str(idx(i)),'color',[0 1 0]);8 c5 H9 l2 M& b; Y v
' @# v3 A% ~+ u1 r$ l elseif idx(i)==3
$ Y4 Q1 P& s' ~& j7 Q, s5 _5 n! Z U0 O8 }, b n
text(i,xx(i),num2str(idx(i)),'color',[0 0 1]);( N; q+ q# V: H r
. G- ]: w& `, H, d
elseif idx(i)==47 {2 @4 [: Q* S% n
3 G) j K1 U# S
text(i,xx(i),num2str(idx(i)),'color',[1 0 1]);
: r3 c. h0 ?/ F) z, c* f5 t) w i# u. b6 A+ w7 W- h
end1 k# z7 k6 q2 @& ?7 ^
$ l" q S7 e( {end! c; x5 n( C6 P2 M! U& o
2 r+ W$ V7 m; cylabel('一维样本数据值')
$ L( ~' P+ b" R2 U, _) _4 |
. {# W- t; L* H' X6 uxlabel('样本序列')
+ G( o' j% L+ F
+ R3 v+ K" z# R$ A) Y+ H# G! p+ p! i9 s9 Q5 b, A4 |4 ~
2.二维数据的聚类分析 参考博文:https://blog.csdn.net/zpp1994/article/details/53456306 https://blog.csdn.net/wys7541/article/details/82153844
* y- L' x- F7 C————————————————
% L# V1 {. l' L& K3 f7 o版权声明:本文为CSDN博主「马马也」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。# n& i; ^# a0 S
原文链接:https://blog.csdn.net/machi1/article/details/98181621
" m, T( a9 F1 o
8 a" f4 `" I. Q7 K* n! f+ y, U @2 g( q+ ^& n4 f! Q( X) _
/ t' U4 t1 ~! t! g. { ~7 Z9 U9 ^0 u
" w4 K- i( ?* y" i1 e% n! |" v
2 y9 B6 j* ?* Q7 Q E+ _& X) @2 D, s- z+ ^$ l7 n6 Y
|