3,322 views
この記事は最終更新から 2373日 が経過しています。
(81) 野球選手の成績を主成分分析 (続編1/2) で作ったデータを使って、
(80) 野球選手を測ってみる 2016年版 と同じ解析をやってみる。

目的はオリジナルの物差しを作ること。
1. 複数年度×複数リーグのデータを直列に繋ぐ
「(81) 野球選手の成績を主成分分析 (続編1/2)」で作ったデータを直列に繋ぎ、一つの入力データにする。その際に、各行(=各選手)の先頭列に年度値を埋め込んでおく。後で「○○○○年の和田はすごかった!」みたいな喜び方をしたいから。
import csv
def load_data(basepath):
files = glob.glob( basepath + '/*.csv')
ary=[]
for fpath in files:
year = fpath.split('/')[-1].split('_')[0]
f = open(fpath, 'r')
dr = csv.reader(f)
for row in dr:
row.insert(0, year)
ary.append(row)
return np.array(ary)
2. 12年間で延べ701人分の打撃結果を解析
12年間連続で規定打席に到達している人は1人で12人分カウントされる。
def calc_pca(X):
Xm = np.broadcast_to(X.mean(axis=0), X.shape)
Xs = np.broadcast_to(X.std(axis=0), X.shape)
Xv = (X - Xm) / Xs
R1 = np.corrcoef(Xv.T)
l,v = np.linalg.eigh(R1)
r = l / l.sum()
return v,r,Xv
def ctrl_proc():
basepath = '../0081/data'
ary_joined = load_data(basepath)
# 不要項目を削除
in_data = ary_joined[0::,6:24]
# PCA
X = in_data.astype(np.float64)
v,r,Xv = calc_pca(X)
return ary_joined,v,r,X,Xv
3. 結果は?
「(80) 野球選手を測ってみる 2016年版」と同じような物差しができた…
あんまりおもしろくないなぁ

第1主成分
よく試合に出場し、よくヒットを打ち、よくホームに帰り、長打も多く、打点も稼ぐ、スーパースターを見つけ出す物差し!
第2主成分
よく欠場するし、あんまりヒット打たないし、足遅くて併殺多いし、でもときどき一撃をくらわすパワーを持つ、ちょっとビミョーな準1流選手を見つけ出す物差し
12年間延べ701人の選手を物差しで測った結果は以下の通り。

アクセス数(直近7日): ※試験運用中、BOT除外簡易実装済2026-04-19: 2回 2026-04-18: 0回 2026-04-17: 0回 2026-04-16: 0回 2026-04-15: 0回 2026-04-14: 0回 2026-04-13: 0回