2,647 views
この記事は最終更新から 1880日 が経過しています。
(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人の選手を物差しで測った結果は以下の通り。