三流院生のデータ解析忘備録

データ解析等の情報をメモ書き程度のクオリティーで更新。Python, Fortran, bash, ArcGIS, Microsoft Office (Word, Excel, PowerPoint).

Pythonで主成分分析

主成分分析に必要なライブラリはScikit-learn  Numpyだけ。

 

今回は時系列データに対して主成分分析を行う場合を考える。

地球物理の分野ではEOF解析とも呼ばれる。

 

n地点×24時間分の気温観測値が与えられているとする。

主成分分析によって気温の時間変動特性を調べたい場合には、各地点の日平均気温からの偏差dTi,j (i = 1, 2, …, 24: j = 1, 2, …, n)を用いる。

解析に用いるデータ(pcadata.csv)の並びは

dT1,1  dT2,1 …  dT24,1
dT1,2  dT2,2 …  dT24,2
︙   ︙     ︙
dT1,n  dT2,n …  dT24,n

となる。

 

以下、スクリプト

-----

# -*- coding:utf-8 -*-

import numpy as np
from sklearn.decomposition import PCA

 

# 1. 入力データの読み込み

temp = np.loadtxt('pcadata.csv', delimiter=',')

# 2. 主成分分析を行う(第5主成分まで)

pca = PCA(n_components=5)

pca.fit(temp)

 

# 3. 主成分の数

print pca.n_components_

# 4. 固有値

print pca.explained_variance_

# 5. 寄与率

print pca.explained_variance_ratio_

# 6. 累積寄与率

print np.cumsum(pca.explained_variance_ratio_)

# 7. 固有ベクトル

print pca.components_

# 8. 第1主成分の固有ベクトルのみ

print pca.components_[0,0:24]

-----

 

pca.components_で算出される値は、因子負荷量ではなく固有ベクトル(ノルム1だから)かと。

主成分得点は自分で計算するしか無いようだ。

が、dT1,j dT2,j …  dT24,j 固有ベクトルをかけて足し合わせるだけなので、そこまで手間な作業ではない。