1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【2023年】プロ野球のセリーグの戦績でデータ分析 ver4 〜守備編〜

Last updated at Posted at 2023-10-16

はじめに

今回は投手の成績に注目してデータ分析を行います。

・前回の記事(打者成績)

引用したサイト

勝率との相関係数のランキング

スクリーンショット 2023-10-14 9.55.29.png

順位 項目 相関係数
1位 併殺 0.72
2位 捕逸 0.69
3位 刺殺 0.41
4位 守備率 -0.37
5位 失策 0.26
6位 補殺 -0.15
7位 守備機会 0.10

※相関係数は小数点第3位で四捨五入しています。
相関係数の絶対数が大きい順に並べています。

守備率、併殺との相関係数が-0.37、0.26で弱い相関を示しているため、守備率と失策が勝率に与える影響は小さいと思われます。
相関係数が0.72で強い相関を示しています。併殺が多ければ多いほど勝率が高くなる可能性が高まります。
刺殺との相関係数が0.41ですが、データがあれば内野手と外野手の刺殺の数別に見てみたいです。

各項目と勝率とのグラフ

・併殺
併殺を取れることが勝率を高める可能性が高いようです。
ピンチの場面で併殺を取り流れを持ってきて試合を有利に進めることが重要そうです。
阪神がリーグ最多の併殺を記録しています。二遊間の守備が固いのでしょうか。
ヤクルトはリーグ最低の併殺数でした。守備力やゴロピッチャーやフライボールピッチャーなど他の要因によるため別の側面で見る必要がありそうです。
Figure_併殺-勝率.png

・捕逸
捕逸は投手が投げたボールが捕手の守備範囲にありながら補球できず、走者を進めてしまったプレーです。
相関係数が0.69で正の相関を示しています。捕手の守備力は少なからず勝率に影響を与えていそうです。
Figure_捕逸-勝率.png

・刺殺
送球で走者をアウトにすることも少なからず勝敗に影響を与えています。
DeNAはこれまでの守備指標で平均以下ばかりでしたが、刺殺数ではリーグ最多となっています。
Figure_刺殺-勝率.png

・守備率
土の球場をホームとする阪神、広島で守備率が下位となっています。
Figure_守備率-勝率.png

・失策
巨人がリーグ最少の失策数でした。
Figure_失策-勝率.png

・補殺
補殺は走者を間接的にアウトにしたプレーです。
Figure_補殺- 勝率.png

・守備機会
以前の記事で示したようにチーム毎に投球回数が異なるためなのか、中日とヤクルトの
Figure_守備機会-勝率.png

環境構築

pip install pandas numpy seaborn matplotlib japanize-matplotlib

コード

データ分析に必要なライブラリをインポートします。

import pandas as pd
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
import japanize_matplotlib

pd.set_option('display.max_columns', None)

# セリーグのチーム打率のCSVを読み込む
df = pd.read_csv('baseball/data/npb_2023_central_difencer.csv')

# グラフの凡例のチームカラー
team_colors = {
    '阪神': 'yellow',
    '広島': 'red',
    'DeNA': 'blue',
    '巨人': 'orange',
    'ヤクルト': 'navy',
    '中日': 'cyan'
}

# チーム順位、勝率を追加
df['順位'] = ['4', '3', '5', '6', '2', '1']
df['勝率'] = [.504, .529, .407, .406, .532, .616]
df = df.sort_values(by='順位')

守備率と勝率の分析のコードです。

column = '守備率'
plt.figure(figsize=(10, 5))
sns.scatterplot(data=df, x=column, y='勝率', hue='チーム', palette=team_colors, s=100)
plt.title(f'{column}と勝率の関係')
plt.xlabel(column)
plt.ylabel('勝率')
plt.grid(True)
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
for i, row in df.iterrows():
    plt.text(
        row[column], row['勝率'], str(row['順位']), color='black',
        fontsize=10, ha='right', va='bottom'
    )
# 守備率と勝率の平均値を示す線を追加
plt.axvline(df[column].mean(), color='red', linestyle='--', label=f'{column}の平均')
plt.axhline(df['勝率'].mean(), color='blue', linestyle='--', label='勝率の平均')
#  相関係数
correlation_coefficient = np.corrcoef(df[column], df['勝率'])[0, 1]
plt.text(0.1, 0.9, f'r: {correlation_coefficient:.2f}', transform=plt.gca().transAxes)
# 回帰直線
slope, intercept = np.polyfit(df[column], df['勝率'], 1)
x = np.linspace(min(df[column]), max(df[column]), 100)
y = slope * x + intercept
plt.plot(x, y, color='black', label=f'回帰直線: y = {slope:.2f}x + {intercept:.2f}', alpha=0.2)
plt.show()

セイバーメトリクスの指標を用いて、より詳しく分析していきます。

・RF:9イニング当たりの刺殺、補殺数によって守備を評価する指標 式:9 × (刺殺+補殺) / 投球回
Figure_RF-勝率.png

・DEF:本塁打以外の打球を野球がどのくらいアウトにしたか 式:(打席-安打-四球-死球-三振-失策)/(打席-本塁打-四球-死球-三振)
Figure_DER-勝率.png

・dWAR:守備による勝利への貢献度
Figure_dWAR-勝率.png

中日は守備範囲が広いものの勝利への貢献(dWAR)が低く、勝利に結びついていないです。
ヤクルトは守備の指標は低めなので、守備の改善はマストでしょう。
阪神はRFはリーグ平均を下回ったものの、他の指標ではリーグ1位を記録しています。

防御率との相関係数

項目 相関係数
dWAR -0.70
DER -0.59
RF -0.39
併殺 -0.82
刺殺 -0.81
守備機会 -0.75
捕逸 -0.69
補殺 -0.54

おまけ

アメリカ🇺🇸のセイバーメトリクスに関するメディア

関連記事

投手編

打撃編

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?