主成分分析

2018/6/18

主成分分析の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]]