Python

代表的な分析手法の確認(主成分分析⇒因子分析)①

前回は「相関分析」を試してみました。

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

代表的な分析手法の確認(相関分析)相関分析を行った後、ヒートマップで可視化します。...

今回の環境

今回利用するデータ

今回は「一般社団法人日本野球機構」の公式サイトより、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つの変数で説明できそうなことが分かりました。今回は元データも大した数ではありませんが、元データの数が増えれば増えるほど、この情報量の圧縮は効果を発揮するものと思われます。

次回は今回の結果を用いて、「因子分析」を行ってみたいと思います。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA