1
/
5

Pythonと皐月賞の過去20年のデータで遊ぼう【株式会社ライトコード】

弊社エンジニアの記事になります。

データ準備

データはプライベートで使っている競馬DBからとってきてまとめました。
皐月賞に出た馬、皐月賞に出た馬のそれまでのレースを準備して、比較用に2023年の芝中距離(1600m〜2400m)の全レースのデータも用意しました。
さて、データを見ていきますがまずは...

df = pd.read_csv('satsuki_data_2004_2023.csv')
total_df = pd.read_csv('total_data_2023.csv')
satsuki = df[df.racename == "皐月賞"].copy()
satsuki.place.value_counts()


皐月賞といえば中山なんですが、2011年は東日本大地震の影響で東京競馬場で開催されています。
中山芝2000mと東京芝2000mでは舞台が全く異なるのでこの年のデータは除外しておきます。(ちなみにこの年に優勝したのはオルフェーヴル)

satsuki.drop(satsuki[satsuki.place == "東京"].index, inplace=True)
df.drop(df[(df.place=="東京") & (df.racename == "皐月賞")].index, inplace=True)

人気別成績

人気をすこしまとめたカテゴリ値にして集計してみます。競馬予想記事でよく出てくるようなやつですね。

satsuki["popularity_cat"] = satsuki.tanshou_odds_rank.map(
lambda x: " 1番人気" if x == 1 else " 2~3番人気" if x <= 3 else " 4~6番人気" if x <= 6
else " 7~10番人気" if x <= 10 else "11番人気~"
)
satsuki.groupby('popularity_cat')[[
"is_win", "is_win_fukushou", "tanshou_result", "fukushou_result"
]].mean().style.background_gradient()


is_win, is_win_fukushouはそれぞれ単勝馬券・複勝馬券が当たったかを表すので平均を取ると勝率・複勝率です。
tanshou_result, fukushou_resultはその馬の単勝馬券・複勝馬券を100円分買った場合の結果が入っているので平均を取ると単勝回収率・複勝回収率となります。

上位人気、特に3番人気までが強いようですが7〜10番人気の中穴もなかなか高い値です。
どのような馬が穴を開けたのか見てみましょう。

satsuki[(satsuki.popularity_cat == " 7~10番人気") & (satsuki.is_win_fukushou)][[
"date", "umaname", "tanshou_odds_rank", "tanshou_odds", "result"
]]


なかなか懐かしい穴馬がでてきました。(2016年、2018年、2021年は個人的にとてもよく覚えています。)
また、11番人気〜の馬はほとんど馬券になることがなく、最近では2017年のダンビュライトくらいです。(それでも56.1倍です。)

satsuki[(satsuki.popularity_cat == "11番人気~") & (satsuki.is_win_fukushou)][[
"date", "umaname", "tanshou_odds_rank", "tanshou_odds", "result"
]]

2023年の芝中距離全体での集計と比較してみましょう。

total_df.groupby('popularity_cat')[[
"is_win", "is_win_fukushou", "tanshou_result", "fukushou_result"
]].mean().style.background_gradient()


大穴の馬が来ることは滅多にないので全く来ないとはいえませんが、芝中距離の平均的なレースよりも皐月賞の方が大穴が馬券になりづらく、おいしくない馬券が多いように見えます。皐月賞は大穴に夢をみる人が多いレースなのかもしれません。
手広く抑えるにしても、10番人気以内や単勝オッズ50倍くらいまでにしておいたほうがいいかもしれませんね。

枠番別成績

皐月賞ともなると毎年ほぼフルゲートなので、頭数を気にせずに枠番別成績を見ることができます。
人気別成績と同じように集計してみます。

satsuki.groupby('wakuban')[[
"is_win", "is_win_fukushou", "tanshou_result", "fukushou_result"
]].mean().style.background_gradient()


5枠が1勝もしていません。
もうすこしデータで補足してみましょう。単勝人気順の平均を入れてみるようにします。また、1着の回数, 2着の回数, 3着の回数, 着外の回数 を表す着度数も集計するようにして関数にまとめました。

記事の続きは下のリンクをクリック!

https://rightcode.co.jp/blogs/45784

もっとワクワクしたいあなたへ

現在、ライトコードでは「WEBエンジニア」「スマホアプリエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「エンジニアリングマネージャー」「営業」などを積極採用中です!

有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。

  • もっと大きなことに挑戦したい!
  • エンジニアとしてもっと成長したい!
  • モダンな技術に触れたい!

現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?

ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。

株式会社ライトコード's job postings

Weekly ranking

Show other rankings
Invitation from 株式会社ライトコード
If this story triggered your interest, have a chat with the team?