
DHあり vs なし、東京ヤクルトスワローズの得点力はどう変わる? ~シミュレーションによる得点を比較~ part①
現在、日本プロ野球において、セントラル・リーグでは指名打者(DH)制が導入されていません。一方、パシフィック・リーグではDH制が採用されており、両リーグ間の戦術や試合展開には違いが見られることがあります。このような違いから、このDH制の導入については、プロ野球ファンの間でも頻繁に議論が交わされ、賛否両論が存在しているかと思います。そこで今回は、このようなDH問題を題材に、データに基づいた議論を進めてみようと思います。
1. 経緯や背景
前述のように、DHの有無に関する議論は、プロ野球ファンの話題として頻繁に取り上げられています。また、このようなDH問題は、各リーグの戦略や選手起用にも大きくかかわってくることから、しばしばNPB全体の問題としても取り上げられる重要なテーマです。特に昨今では、東京ヤクルトスワローズに関して、高津監督がDH制導入に反対の立場を表明したことも記憶に新しいです。
このような件に対して、現状のままDH制を導入しないことを望む意見もある一方、東京ヤクルトスワローズは、本拠地・明治神宮野球場が打者に有利な球場とされること、また、チームの特徴として打撃力に優れた選手が多いこと等の理由から、DH制の導入することでより強力なチームになれるのではないかとの意見もあります。確かに、このようなスワローズというチームの特徴を踏まえた意見には共感できる点がありますが、これらの議論は主に定性的、感覚的なものが多く、定量的なデータに基づいた分析がなされることは少ないのが現状かと思います。
そこで本記事では、DHの有無が東京ヤクルトスワローズの得点力にどのような影響を与えるのかを具体的な数値で評価することを目指します。特に、野球のルールや試合の仕組みをモデル化し、Pythonを用いたシミュレーションによって、得点力がどの程度変化するのかを定量的に評価し、さらには他球団との比較も行うことで、DH制導入が戦力面でどれだけ有利(場合によっては不利)に働くのかを考察します。
2. 分析方法
今回は、1~9番打者からなる任意の打線を指定した場合に、その打線で9イニングの攻撃を行った際の総得点をシミュレーションにより算出することを目的とします。打撃のシミュレーションを行うにあたっては、各打者の実際の打撃成績に基づいて打撃結果を決定するようなシステムを想定します。
part①の本記事は、このようなシミュレーションを実施する準備段階として必要となる、データの取得、整形を行う作業を実施する内容となります。
2.1 シミュレーションの設定
攻撃シミュレーションを行うにあたり、各打者の実際の打撃成績に基づいて打撃結果を決定しますが、ここでは、その際の打撃結果を以下の6つの事象に分類します。
安打(single、シングルヒット)
二塁打(double)
三塁打(triple)
本塁打(hr)
四死球(walk)
アウト(out、凡退)
これらの事象が、各選手の打撃成績に基づいて決定されるシステムを作るために、ここでは、各選手におけるそれぞれの事象が発生する確率的な指標を設定します。そこで、各事象の発生確率(single%, double%, triple%, hr%, walk%, out%)を以下のように設定し、本記事では、各選手の実際の打撃成績に基づいてこれらの値を算出するPythonコードを作成します。
$${parameter = 打数 + 犠飛 + 四球 + 死球}$$
$${single\% = \frac{single}{parameter}}$$
(double%, triple%, hr%, walk%も対応する値で同様の計算)
$${out\% = 1 - (single\% + double\% + triple\% + HR\% + walk\%)}$$
今回は母数として、打席、犠飛、四球、死球の数の和を採用しています。これにより、犠打や各種妨害は対象外としつつ、ある打者がバッターボックスに立った際に、以上の6つの事象がそれぞれどの程度起こりうるのかを表す指標を算出することができます(なお、犠飛は打撃結果としては凡退であることから、ここではアウトとして扱います)。
2.2 対象データの選定
今回の対象データは、2024年シーズンの東京ヤクルトスワローズの打撃成績とします。特に前節のような確率指標を算出するにあたり、選手ごとの打数、安打数、二塁打数、三塁打数、本塁打数、四死球数、犠飛数を採用します。
3. 実装
3.1 データの取得
前章までで示したような2024年シーズンにおける東京ヤクルトスワローズの各選手の打撃成績を取得するにあたっては、Pythonを用いたWebスクレイピングを活用し、今回はデータソースとして「プロ野球データFreak」様(https://baseball-data.com/)を使用させていただきました。
3.2 コード
import requests
from bs4 import BeautifulSoup
import pandas as pd
from datetime import datetime
# 打撃成績URL
url = "https://baseball-data.com/stats/hitter2-s/tpa-1.html"
response = requests.get(url)
# HTML解析
soup = BeautifulSoup(response.text, 'html.parser')
# テーブル取得
table = soup.find('table')
# 各行からデータを抽出
rows = table.find_all('tr')
# ヘッダー行取得
columns = [th.text.strip() for th in rows[0].find_all('th')]
#print(f"Columns: {columns}") # デバッグ: 列名の確認
# テーブルのデータ取得
data = []
for row in rows[1:]:
cells = row.find_all('td')
data.append([cell.text.strip() for cell in cells])
df = pd.DataFrame(data, columns=columns)
df_player = df['選手名'].str.replace(' ', '')
df = df.drop(columns=['選手名'])
df = df.apply(pd.to_numeric, errors='coerce') # 数値変換
df['選手名'] = df_player
#print(df.head()) # デバッグ: dfの確認
# 各指標計算
df['母数'] = df['打数'] + df['犠飛'] + df['四球'] + df['死球']
df['single%'] = df['安打'] / df['母数']
df['double%'] = df['二塁打'] / df['母数']
df['triple%'] = df['三塁打'] / df['母数']
df['hr%'] = df['本塁打'] / df['母数']
df['walk%'] = (df['四球'] + df['死球']) / df['母数']
df['out%'] = 1 - df['single%'] - df['double%'] - df['triple%'] - df['hr%'] - df['walk%']
df = df[['選手名', 'single%', 'double%', 'triple%', 'hr%', 'walk%', 'out%']]
# 保存
today = datetime.now().strftime('%Y%m%d')
file_name = f"C:/baseball/ys_2024打撃成績_{today}.xlsx"
df.to_excel(file_name, index=False)
print(f"{file_name} に保存完了")
前回の記事では、pandasのread_htmlを使用したので、今回は勉強もかねてBeautifulSoupを利用してみました。
4.結果
今回は最終的に取得、整形したデータをExcelファイルに出力するように設定しました。以上を実行したところ、対応するExcelファイルが出力できており、また、その中身に関しても、以下のように選手ごとの各確率指標が正常に処理、保存できていることが確認できました。

5.まとめ
今回は、野球のルールや試合の仕組みをモデル化し、Pythonを用いたシミュレーションによって、DHの有無が東京ヤクルトスワローズの得点力にどのような影響を与えるのかを定量的に評価することをテーマとしました。そこで、本記事では、このようなシミュレーションを実施する準備段階として、分析に必要となるデータの取得、整形を行う作業を実施する内容についてまとめました。続くpart②では、このようにして得られたデータを用いて実際にシミュレーションを実施する段階について記載したいと思います。
参考文献
ヤクルト・高津監督がセ・リーグのDH制導入に明確に反対の立場示す「駆け引きがなくなってしまう」.スポニチ Sponichi Annex.
https://www.sponichi.co.jp/baseball/news/2025/01/20/kiji/20250120s00001173219000c.html東京ヤクルトスワローズ打者成績(基本成績)(打席数順).プロ野球データFreak.
https://baseball-data.com/stats/hitter2-s/tpa-1.html
(すべて最終閲覧2025/01/30)