Pythonで現在のプロ野球の順位表を作ってみた

プロ野球も、交流戦が終わり、今週金曜日からリーグ戦が再開しようとしている。
そこで、私はPythonを使って現在のプロ野球の順位表を作成するのに興味を持った。

### プログラムコード
```
pip install pandas
import pandas as pd

# セントラルリーグのデータ
central_league_data = {
    "チーム": ["広島カープ", "阪神タイガース", "読売ジャイアンツ", "横浜ベイスターズ", "ヤクルトスワローズ", "中日ドラゴンズ"],
    "勝利数": [32, 32, 31, 32, 27, 27],
    "敗戦数": [25, 30, 30, 31, 33, 33],
    "引き分け数": [4, 4, 5, 1, 4, 5],
    "勝率": [0.561, 0.516, 0.5081, 0.5079, 0.45, 0.45],
    "ゲーム差": [None, 2.5, 0.5, 0, 3.5, 0]
}

# パシフィックリーグのデータ
pacific_league_data = {
    "チーム": ["ソフトバンクホークス", "千葉ロッテ", "日本ハム", "楽天イーグルス", "オリックス", "西武"],
    "勝利数": [41, 31, 32, 31, 29, 19],
    "敗戦数": [19, 27, 28, 31, 33, 44],
    "引き分け数": [2, 5, 5, 1, 2, 0],
    "勝率": [0.683, 0.534, 0.533, 0.5, 0.468, 0.302],
    "ゲーム差": [None, 9, 0, 2, 2, 10.5]
}

# DataFrameに変換
central_league_df = pd.DataFrame(central_league_data)
pacific_league_df = pd.DataFrame(pacific_league_data)

# 表示
print("セントラルリーグ順位表")
print(central_league_df.to_string(index=False))

print("\nパシフィックリーグ順位表")
print(pacific_league_df.to_string(index=False))
```

### 出力結果
```
セントラルリーグ順位表
      チーム  勝利数  敗戦数  引き分け数     勝率  ゲーム差
    広島カープ   32   25      4 0.5610   NaN
  阪神タイガース   32   30      4 0.5160   2.5
 読売ジャイアンツ   31   30      5 0.5081   0.5
 横浜ベイスターズ   32   31      1 0.5079   0.0
ヤクルトスワローズ   27   33      4 0.4500   3.5
  中日ドラゴンズ   27   33      5 0.4500   0.0

パシフィックリーグ順位表
       チーム  勝利数  敗戦数  引き分け数    勝率  ゲーム差
ソフトバンクホークス   41   19      2 0.683   NaN
     千葉ロッテ   31   27      5 0.534   9.0
      日本ハム   32   28      5 0.533   0.0
   楽天イーグルス   31   31      1 0.500   2.0
     オリックス   29   33      2 0.468   2.0
        西武   19   44      0 0.302  10.5
```
しかし、この場合、整った表として出力されていない。
ここで、pandasの、to_markdownを使い、整った表を出力できた。

### 修正したプログラムコード
```
import pandas as pd

# セントラルリーグのデータ
central_league_data = {
    "順位": [1, 2, 3, 4, 5, 6],
    "チーム": ["広島東洋カープ", "阪神タイガース", "読売ジャイアンツ", "横浜DeNAベイスターズ", "ヤクルトスワローズ", "中日ドラゴンズ"],
    "勝利数": [32, 32, 31, 32, 27, 27],
    "敗戦数": [25, 30, 30, 31, 33, 33],
    "引き分け数": [4, 4, 5, 1, 4, 5],
    "勝率": [0.561, 0.516, 0.5081, 0.5079, 0.45, 0.45],
    "ゲーム差": ["-", 2.5, 0.5, 1, 3.5, 3.5]
}

# パシフィックリーグのデータ
pacific_league_data = {
    "順位": [1, 2, 3, 4, 5, 6],
    "チーム": ["ソフトバンクホークス", "千葉ロッテマリーンズ", "日本ハムファイターズ", "東北楽天ゴールデンイーグルス", "オリックスバッファローズ", "埼玉西武ライオンズ"],
    "勝利数": [41, 31, 32, 31, 29, 19],
    "敗戦数": [19, 27, 28, 31, 33, 44],
    "引き分け数": [2, 5, 5, 1, 2, 0],
    "勝率": [0.683, 0.534, 0.533, 0.5, 0.468, 0.302],
    "ゲーム差": ["-", 9, 9, 2, 2, 10.5]
}

# DataFrameに変換
central_league_df = pd.DataFrame(central_league_data)
pacific_league_df = pd.DataFrame(pacific_league_data)

# 表示
print("セントラルリーグ順位表")
print(central_league_df.to_markdown(index=False, tablefmt="grid", floatfmt=".4f"))

print("\nパシフィックリーグ順位表")
print(pacific_league_df.to_markdown(index=False, tablefmt="grid", floatfmt=".4f"))
```

### 出力結果
```
セントラルリーグ順位表
+--------+----------------------+----------+----------+--------------+--------+------------+
|   順位 | チーム               |   勝利数 |   敗戦数 |   引き分け数 |   勝率 | ゲーム差   |
+========+======================+==========+==========+==============+========+============+
|      1 | 広島東洋カープ       |       32 |       25 |            4 | 0.5610 | -          |
+--------+----------------------+----------+----------+--------------+--------+------------+
|      2 | 阪神タイガース       |       32 |       30 |            4 | 0.5160 | 2.5        |
+--------+----------------------+----------+----------+--------------+--------+------------+
|      3 | 読売ジャイアンツ     |       31 |       30 |            5 | 0.5081 | 0.5        |
+--------+----------------------+----------+----------+--------------+--------+------------+
|      4 | 横浜DeNAベイスターズ |       32 |       31 |            1 | 0.5079 | 1          |
+--------+----------------------+----------+----------+--------------+--------+------------+
|      5 | ヤクルトスワローズ   |       27 |       33 |            4 | 0.4500 | 3.5        |
+--------+----------------------+----------+----------+--------------+--------+------------+
|      6 | 中日ドラゴンズ       |       27 |       33 |            5 | 0.4500 | 3.5        |
+--------+----------------------+----------+----------+--------------+--------+------------+

パシフィックリーグ順位表
+--------+------------------------------+----------+----------+--------------+--------+------------+
|   順位 | チーム                       |   勝利数 |   敗戦数 |   引き分け数 |   勝率 | ゲーム差   |
+========+==============================+==========+==========+==============+========+============+
|      1 | ソフトバンクホークス         |       41 |       19 |            2 | 0.6830 | -          |
+--------+------------------------------+----------+----------+--------------+--------+------------+
|      2 | 千葉ロッテマリーンズ         |       31 |       27 |            5 | 0.5340 | 9          |
+--------+------------------------------+----------+----------+--------------+--------+------------+
|      3 | 日本ハムファイターズ         |       32 |       28 |            5 | 0.5330 | 9          |
+--------+------------------------------+----------+----------+--------------+--------+------------+
|      4 | 東北楽天ゴールデンイーグルス |       31 |       31 |            1 | 0.5000 | 2          |
+--------+------------------------------+----------+----------+--------------+--------+------------+
|      5 | オリックスバッファローズ     |       29 |       33 |            2 | 0.4680 | 2          |
+--------+------------------------------+----------+----------+--------------+--------+------------+
|      6 | 埼玉西武ライオンズ           |       19 |       44 |            0 | 0.3020 | 10.5       |
+--------+------------------------------+----------+----------+--------------+--------+------------+
```
これで整った表として出力することができた。

### 考察

#### セントラルリーグの今後の展望
セントラルリーグでは、1位広島から4位横浜まで４ゲーム差、5位ヤクルトと6位中日まで7.5ゲーム差だ。まだ阪神タイガースも優勝圏内におり、球団史上初のセントラルリーグ連覇に期待してもいいだろう。

阪神タイガースが、セントラルリーグを連覇するには、投手力はいいだけに、もう少し打線が奮起する必要があると私は考えている。交流戦の平均得点も2.2点だったため、7勝11敗の借金4で交流戦を終えた。

阪神のAクラス入りの確率は68％、優勝確率24%,2位の確率は24%との統計が出ている。
広島のAクラス入りの確率は74%、優勝確率36%, 2位の確率は22%との統計が出ている。
これは、阪神と広島のゲーム差が2.5離れているから言えることだろう。

#### セントラルリーグのAクラス予想
セリーグのAクラスは阪神広島巨人との予想が高いだろう。
しかし、まだDeNA,中日、ヤクルトにも可能性がある。

#### パシフィックリーグの今後の展望
一方、パリーグに目を向けると、ソフトバンクホークスが2位ロッテと3位日本ハムに9ゲーム差も離している。柳田選手が怪我で離脱したにも関わらず、近藤山川栗原選手を始めとする強力クリーンアップで勝利を重ね続けている。交流戦の優勝こそは楽天イーグルスに譲ったが、それでも12勝6敗の2位で交流戦を終えた。

#### パシフィックリーグのAクラス予想

セントラルリーグとは対照的に、ソフトバンクが2位と９ゲームも離しているので、Aクラス入りする可能性は非常に高い。

ソフトバンクのAクラス入りは97％、優勝は71%との統計が出ている。
パリーグのAクラスはソフトバンク、日本ハム、ロッテとの予想が高いだろう。

引用元：https://eikai.co.jp/npb/

### 余談（ちなみに）
いずれにせよ、金曜日から再開する両リーグのリーグ戦が楽しみだ。
果たして阪神タイガースは、広島東洋カープから首位を奪い返して、昨年のように快進撃を続け、球団史上初のリーグ優勝を達成できるか目が離せない。

阪神タイガースは、金曜日から本拠地で横浜ベイスターズとの３連戦
ソフトバンクホークスは、金曜日から本拠地で千葉ロッテマリーンズとの３連戦に望む。

引用元：https://npb.jp/bis/2024/calendar/

一昨日のように、相手のバッテリーミスでサヨナラ勝ちするのではなく、ちゃんとした勝ち方で勝って欲しいのが私の本音だ。それには、もう少し打撃陣に奮起を求めたい。そうすれば、阪神タイガースのリーグ優勝の可能性も高まってくるだろう。