NPBでOPSは本当に有効なのか?|2025年データで検証

この記事でわかること Key Points
  • OPSがNPBのチーム成績とどの程度関係しているのか
  • 出塁率と長打率を統合した指標の意味
  • Pythonを使ったチーム打撃指標の簡単な分析方法

1. 導入|Introduction

野球の打撃評価指標として広く使われているものの一つが OPS(On-base Plus Slugging) である。OPSは

  • 出塁率(OBP)
  • 長打率(SLG)

を単純に足し合わせた指標であり、打者の攻撃力を総合的に評価する指標としてメジャーリーグを中心に広く利用されている。

セイバーメトリクスの研究では、出塁能力と長打力の両方が得点創出に重要であることが知られている。OPSはこの2つを統合することで、打者の攻撃力を簡潔に表現することができる。

しかし、OPSはあくまで経験的に広まった指標であり、リーグ環境が異なる場合でも同様に有効なのかは検証が必要である。

特にNPBはMLBと比較して

  • 本塁打数が少ない
  • 打撃スタイルが異なる
  • 球場特性の影響が大きい

などの特徴を持つ。

そこで本記事では 2025年NPBのチーム打撃データ を用いて、OPSがチーム成績とどの程度関係しているのかを分析する。

2. 分析の問い|Research Question

本記事で検証する問いは次の通りである。

OPSはNPBにおいてもチームの攻撃力および順位と関係する指標なのか?

3. 仮説|Hypothesis

OPSは

  • 出塁能力
  • 長打力

という得点創出の重要要素を含んでいる。

そのため

OPSが高いチームほどリーグ順位も高くなる傾向がある

と予想される。

4. 使用データ|Data

本記事では以下のデータを使用した。


index
seasonteamABH2B3BHRBBHBPSF1BTBOBPSLGOPSrank
02025OR4913125219819100384543693517880.3137180.3639320.6776513
12025CD471210921892583338382679515800.2870550.3353140.6223694
22025EF4866120919531129399462885418530.3097960.3808060.6906012
32025MN479011531992073337653386116110.2976080.3363260.6339336
42025SE474211021702180346493483115540.2894990.3277100.6172095
52025CT481711842112171325442288116500.2981950.3425370.6407325
62025YS474211102021590383513080316120.2965810.3399410.6365226
72025RA482411791462670422544693715870.3095770.3289800.6385574
82025DB4772117722115110346563983117580.3028970.3683990.6712962
92025SB4785122918629101436503391317760.3233410.3711600.6945011
102025YG479911982061796402472787917260.3122270.3596580.6718863
112025HT477011681922493441412585916870.3126780.3536690.6663461
  • 対象リーグ:NPB(日本プロ野球)
  • 対象シーズン:2025年
  • サンプル数:12チーム
  • データ内容:チーム打撃成績
指標内容
OBP出塁率
SLG長打率
OPS出塁率+長打率
rankリーグ順位

OPSは次の式で計算される。

OPS=OBP+SLGOPS = OBP + SLG

5. 分析方法|Method

本記事では以下の方法で分析を行う。

① OPSと順位の関係

チームOPSと順位を比較する。

② OBPとSLGの分布

出塁率と長打率を2次元平面に配置し、チームの攻撃スタイルを可視化する。

Pythonコード例

import matplotlib.pyplot as plt

# リーグ分類
central = ["YG","HT","CD","YS","DB","CT"]
pacific = ["SB","OR","MN","EF","RA","SE"]

df["league"] = df["team"].apply(lambda x: "Central" if x in central else "Pacific")

# Aクラス / Bクラス
df["class"] = df["rank"].apply(lambda x: "A" if x <= 3 else "B")

# 色設定
league_color = {
    "Central": "tab:green",
    "Pacific": "tab:cyan"
}

# マーカー設定
class_marker = {
    "A": "o",
    "B": "x"
}

plt.figure(figsize=(8,6))

# プロット
for _, row in df.iterrows():
    plt.scatter(
        row["OBP"],
        row["SLG"],
        color=league_color[row["league"]],
        marker=class_marker[row["class"]],
        s=80
    )

# チームラベル
for i, team in enumerate(df["team"]):
    plt.text(df["OBP"][i], df["SLG"][i], r_team_map[team])

# 平均線
plt.axvline(df["OBP"].mean(), linestyle="--")
plt.axhline(df["SLG"].mean(), linestyle="--")

plt.xlabel("OBP[出塁率]")
plt.ylabel("SLG[長打率]")
plt.title("Team Offense Distribution (NPB 2025)")

# 凡例作成
from matplotlib.lines import Line2D

legend_elements = [
    Line2D([0], [0], marker='o', color='w', label='Aクラス',
           markerfacecolor='gray', markersize=8),
    Line2D([0], [0], marker='x', color='gray', label='Bクラス',
           linestyle='None', markersize=8),
    Line2D([0], [0], marker='o', color='w', label='セリーグ',
           markerfacecolor='tab:green', markersize=8),
    Line2D([0], [0], marker='o', color='w', label='パリーグ',
           markerfacecolor='tab:cyan', markersize=8),
]

plt.legend(handles=legend_elements)
plt.savefig('Team-Offense-Distribution-npb2025.png')
plt.show()

結果を確認

このグラフにより

  • 出塁型チーム
  • 長打型チーム
  • バランス型チーム

を視覚的に確認することができる。

6. 分析結果|Results

2025年のチームOPSと順位を整理すると次のようになる。

TeamOPSrank
福岡ソフトバンクホークス0.6945011
北海道日本ハムファイターズ0.6906012
オリックス・バファローズ0.6776513
読売ジャイアンツ0.6718863
横浜DeNAベイスターズ0.6712962
阪神タイガース0.6663461
広島東洋カープ0.6407325
東北楽天ゴールデンイーグルス0.6385574
東京ヤクルトスワローズ0.6365226
千葉ロッテマリーンズ0.6339336
中日ドラゴンズ0.6223694
埼玉西武ライオンズ0.6172095

このデータから以下の傾向が確認できる。

上位チームはOPSが高い

リーグ上位チームを見ると

  • 福岡ソフトバンクホークス
  • 北海道日本ハムファイターズ
  • オリックス・バファローズ
  • 横浜DeNAベイスターズ
  • 読売ジャイアンツ

など、OPSが0.67以上のチームが多い

一方でOPSが低いチームは

  • 中日ドラゴンズ
  • 埼玉西武ライオンズ

など、比較的順位が低い傾向にある。

OBPとSLGの分布

OBPとSLGの分布を確認すると

  • 上位チームは右上に集中
  • 下位チームは左下に分布

する傾向が見られる。

右上に位置するチームは

  • 出塁率が高い
  • 長打率も高い

つまり 総合的な攻撃力が高いチームである。

7. 考察|Discussion

今回の結果から、OPSはNPBにおいても一定の説明力を持つ指標であることが確認できた。

その理由として、OPSが以下の2つの要素を含んでいる点が挙げられる。

出塁能力

出塁率は

  • 安打
  • 四球
  • 死球

を含むため、得点機会を直接増やす。

長打力

長打率は

  • 二塁打
  • 三塁打
  • 本塁打

などの長打を反映する。

長打は一度に複数塁を進めるため、得点効率を高める。

OPSはこの2つを同時に評価できるため、得点力をある程度表現できる指標となっている。

ただしOPSにはいくつかの限界もある。

代表的な問題は

出塁率と長打率を単純に足している点である。

実際の得点価値では

  • 出塁率の重要性
  • 長打の価値

は完全に同じではない。

そのため、より精密な分析では

  • wOBA
  • wRC+

などの指標が使用される。

8. 追加分析|Optional

OBPとSLGの分布を4象限に分けると、チームの打撃スタイルを分類できる。

象限特徴
右上強力打線
左上出塁型チーム
右下長打型チーム
左下攻撃力が低い

2025年NPBでは

ソフトバンク

  • 高いOBP
  • 高いSLG

を両立しており、典型的な強力打線である。

一方で

  • 出塁率は高いが長打が少ないチーム
  • 長打は多いが出塁率が低いチーム

など、チームごとの打撃スタイルの違いも確認できる。

このような分析は

  • チーム戦略
  • 打線構成

を理解する上でも有用である。

9. 結論|Conclusion

2025年NPBのチームデータを分析した結果、

OPSはチーム順位と一定の関係を持つ指標である

ことが確認された。

特に

  • 出塁率が高い
  • 長打率が高い

チームはリーグ上位に位置する傾向があり、OPSは攻撃力を簡潔に表す指標として有効である。

ただしOPSは単純な合計指標であり、得点価値を完全に表現するものではない。そのため、より精密な分析では他のセイバーメトリクス指標との併用が望ましい。

データの参考

以下のブログから分析に必要なデータを利用させていただきました。

年別のCSV - プロEYE球
試合結果、打撃、投球、守備のプロ野球統計データを選手またはチームごとにCSV形式でダウンロードできます