前回は「相関分析」を試してみました。
今回は「主成分分析」「因子分析」を試してみたいと思います。

代表的な分析手法の確認(相関分析)相関分析を行った後、ヒートマップで可視化します。...
今回の環境
今回利用するデータ
今回は「一般社団法人日本野球機構」の公式サイトより、2005年度から2021年度までの両リーグ個人打撃成績(規定打席以上)のデータをスクレイピングして取得したデータを使います。
今回試す分析手法
「主成分分析」で適切な要素数を求めた後、「因子分析」を行っていきます。
データの確保
データの取得方法は以前の記事をご参照ください。

代表的な分析手法の確認(カイ二乗検定、t検定)(追記)「一般社団法人日本野球機構」の公式サイトに格納されている2005年以降のセ・パ両リーグのデータを取得しました。...
データ分析
主成分分析とは
主成分分析とは、多変量データを統合し、新たな総合指標を作り出すための手法です。
出典:株式会社マクロミル
使用するライブラリ
- NumPy
数値計算を効率的に行うためのライブラリです。
- Pandas
データ分析用のライブラリです。
- matplotlib
グラフ描画用のライブラリです。
- scikit-learn
機会学習用のライブラリです。
仮説
今回は分析結果をイメージできていないので、仮説の立案は割愛します。
コードの実装
まずは主成分分析で因子分析に使う要素数の適正値を求めます。
なお、今回はこちらのサイトを多分に参考とさせて頂きました。
https://qiita.com/maskot1977/items/082557fcda78c4cdb41f
出典:Qiita(@maskot1977様)
# ライブラリのインポート
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import sklearn
from sklearn.decomposition import PCA #主成分分析器
# データの整形
df = pd.read_csv("2005-2021_batter_all.csv")
df = df.drop(columns=df.columns[0:4]) #関係ない列を削除
# 行列の標準化
dfs = df.iloc[:, :].apply(lambda x: (x-x.mean())/x.std(), axis=0)
dfs.head()
#主成分分析の実行
pca = PCA()
pca.fit(dfs)
# データを主成分空間に写像
feature = pca.transform(dfs)
# 主成分得点
pd.DataFrame(feature, columns=["PC{}".format(x + 1) for x in range(len(dfs.columns))]).head()
# 寄与率
pd.DataFrame(pca.explained_variance_ratio_, index=["PC{}".format(x + 1) for x in range(len(dfs.columns))])
# 累積寄与率を図示する
import matplotlib.ticker as ticker
plt.gca().get_xaxis().set_major_locator(ticker.MaxNLocator(integer=True))
plt.plot([0] + list( np.cumsum(pca.explained_variance_ratio_)), "-o")
plt.xlabel("Number of principal components")
plt.ylabel("Cumulative contribution rate")
plt.grid()
plt.show()
実行結果・考察
実行結果

考察
おおよそ6つの成分で2005年度から2021年度のセ・リーグのバッターに関する80%が説明できそうです。
まとめ
22種類のデータがたった6つの変数で説明できそうなことが分かりました。今回は元データも大した数ではありませんが、元データの数が増えれば増えるほど、この情報量の圧縮は効果を発揮するものと思われます。
次回は今回の結果を用いて、「因子分析」を行ってみたいと思います。