主成分分析のPython3サンプルコード
# -*- coding:utf-8 -*-
#!/usr/bin/env python3
import numpy
import pandas
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from sklearn import decomposition
if __name__ == '__main__':
filename = './w0.dat'
png_filename = './pca_w0.png'
data = pandas.read_csv(filename, delimiter=' ')
print('平均や標準偏差、最大値、最小値などの要約統計量')
print(data.describe())
X = data.iloc[:, 1:].values
pca = decomposition.PCA(n_components=2)
XT = pca.fit_transform(X)
print('主成分の寄与率')
print(pca.explained_variance_ratio_)
print('主成分の累積寄与率')
print(pca.explained_variance_ratio_.cumsum())
print('主成分の固有ベクトル')
print(pca.components_)
plt.subplot(211)
plt.scatter(X[:,0],X[:,1])
for no,name in enumerate(data['name1']):
plt.annotate(name, (X[no,0],X[no,1]))
plt.subplot(212)
plt.scatter(XT[:,0],XT[:,1])
for no,name in enumerate(data['name1']):
plt.annotate(name, (XT[no,0],XT[no,1]))
#plt.show()
plt.savefig(png_filename)
実行の結果
平均や標準偏差、最大値、最小値などの要約統計量
height weight
count 15.000000 1.500000e+01
mean 0.000000 1.583918e-15
std 1.000000 1.000000e+00
min -1.565248 -1.402269e+00
25% -0.782624 -7.893138e-01
50% 0.000000 -1.118374e-01
75% 0.782624 7.269430e-01
max 1.565248 1.759288e+00
主成分の寄与率
[0.99774738 0.00225262]
主成分の累積寄与率
[0.99774738 1. ]
主成分の固有ベクトル
[[ 0.70710678 0.70710678]
[-0.70710678 0.70710678]]