Python による主成分分析と因子分析

sklearn.decomposition.PCA を使い、主成分分析を行う。また、sklearn.decomposition.FactorAnalysis を使い、因子分析を行う。

Python を起動し、必要なライブラリを import する。

import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA, FactorAnalysis

通常は Excel 等で作成した CSV ファイルを pandas に読み込んで分析する。しかし、ここでは便宜的に以下の簡単なデータフレームを作成し、data という変数に格納しておく。

data = pd.DataFrame({"手術時間":[60,50,100,90,30,40,80,90], "出血量":[15,100,90,20,18,20,120,90], "結紮失敗回数":[0,1,2,3,2,1,5,1]})

data の内容を確認する。

data

data を標準化する。

sc = StandardScaler()
sc.fit(data)
data_s = sc.transform(data)

sklearn.decomposition.PCA を使い、主成分分析を行う。

pca = PCA()
pca.fit(data_s)
data_t = pca.transform(data_s)
 
data_t  #主成分得点

pca.explained_variance_ratio_  #寄与率
np.cumsum(pca.explained_variance_ratio_)  #累積寄与率

pca.explained_variance_ #固有値
pca.components_ #固有ベクトル

第1主成分(PC1)と第2主成分(PC2)で散布図を描きたい場合は matplotlib を使う。

from matplotlib import pyplot as plt
x = data_t[:, 0] #第1主成分を抽出
y = data_t[:, 1] #第2主成分を抽出
plt.figure()
plt.scatter(x, y)
plt.grid()
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.show()

sklearn.decomposition.FactorAnalysis を使い、因子分析を行う。ここでは因子数は 1、varimax 回転を選択している。

FA = FactorAnalysis(n_components = 1, rotation = "varimax") 
FA.fit_transform(data_s) #因子得点
FA.components_ #因子負荷量