In [79]:
from pathlib import Path
import pandas as pd
import numpy as np
In [80]:
root=Path('../').resolve()
root
Out[80]:
In [81]:
val_pth=Path('../').resolve().joinpath('src','raw','ptest_data.xlsx')
val=pd.read_excel(val_pth.as_posix())
In [82]:
nci_val_pth=Path('../').resolve().joinpath('src','nci60.npy')
nci_val=np.load(nci_val_pth.as_posix(),mmap_mode='r')
In [83]:
val #assign datas in
Out[83]:
In [86]:
val=val.as_matrix()
val
Out[86]:
In [103]:
t_val=np.transpose(val)
mean_val=np.mean(t_val,axis=0)
print(mean_val)
t_val
Out[103]:
In [88]:
new_val=t_val-mean_val
print(new_val)
In [89]:
covMat=np.cov(new_val,rowvar=0)
covMat
Out[89]:
In [90]:
eigVals,eigVects=np.linalg.eig(np.mat(covMat))
In [91]:
eigVals
Out[91]:
In [92]:
eigVects
Out[92]:
In [93]:
n=3
eigValIndice=np.argsort(eigVals) #对特征值从小到大排序
n_eigValIndice=eigValIndice[-1:-(n+1):-1] #最大的n个特征值的下标
n_eigVect=eigVects[:,n_eigValIndice] #最大的n个特征值对应的特征向量
lowDDataMat=new_val*n_eigVect #低维特征空间的数据
reconMat=(lowDDataMat*n_eigVect.T)+mean_val #重构数据
In [94]:
reconMat
Out[94]:
In [95]:
lowDDataMat
Out[95]:
In [96]:
np.array(lowDDataMat[:,0]).flatten()
Out[96]:
In [97]:
#import matplotlib.pyplot as plt
#from mpl_toolkits.mplot3d import Axes3D
#import pylab
#fig = pylab.figure()
#ax = Axes3D(fig)
#x=np.array(lowDDataMat[:,0]).flatten()
#y=np.array(lowDDataMat[:,1]).flatten()
#z=np.array(lowDDataMat[:,2]).flatten()
#ax.scatter(x,y,z,s=50,marker=(5,3),c=['r','b'],alpha=0.5,lw=2)
#plt.show()
In [98]:
import sklearn
from sklearn.decomposition import PCA
import pylab
import matplotlib.pyplot as plt
In [99]:
pca= PCA(n_components=3)
X = pca.fit_transform(t_val)
(X)
Out[99]:
In [100]:
lowDDataMat
Out[100]:
In [102]:
fig = pylab.figure()
ax = Axes3D(fig)
x=np.array(lowDDataMat[:,0]).flatten()
y=np.array(lowDDataMat[:,1]).flatten()
z=np.array(lowDDataMat[:,2]).flatten()
#col=['r']*15+['b']*18+['g']*21+['y']*18+['k']*26+['c']*26+['m']*26+['#bcbcbc']*21+['#6d904f']*6+['#bc82bd']*23
ax.scatter(x,y,z,s=50,marker=(5,3),c='b',alpha=0.5,lw=2)
xx=np.array(X[:,0]).flatten()
yy=np.array(X[:,1]).flatten()
zz=np.array(X[:,2]).flatten()
ax.scatter(xx,yy,zz,s=50,marker=(5,3),c='r',alpha=0.5,lw=2)
plt.show()
In [ ]:
In [ ]: