競馬予想AIの作り方 〜 Rでスピード指数をスクレイピング

R

前回の記事で、netkeibaから、各レース結果をスクレイピングすることができました。これをもとに各馬の能力を測るスピード指数を作って、それをもとに、勝ち馬を予想して、それをもとに、買い目を提案するような方法を考えて、…と思っているんだけど、一番最初の「各馬の能力を測る指数を作る」って、何日かかる…?。一応、頭の中に構想はあるんだけど、でもね…。

というわけで、ここはスッパリ気持ちを切り替えました。自分なりの指数を作るのは一旦置いておいて、人様の考えた指数を使わせてもらって先に進むことにしました。というわけで、また、スクレイピング。

スクレイピングの対象

スピード指数データは「無料」「スピード指数」で検索して、トップに出てくる下記のサイトからを入手させていただくことにしました。

競馬新聞&スピード指数(無料)
URL : http://jiro8.sakura.ne.jp/

 

 

「競馬新聞&スピード指数(無料)」のサイトの構成

競馬新聞&スピード指数(無料)のサイトの構成を調べます。たとえば、2021年のダービーの結果ページのURLは以下のようになっています。

URL : http://jiro8.sakura.ne.jp/index.php?code=2105021211

この「2105021211」の部分が各レースごとに固有の値。

ん?各レース固有の値?netkeibaからのスクレイピングでも、各レース固有の値(race_idと呼んでいた値)がありました。それはnetkeibaのレースのURLに使われていました。netlkeibaの2021年のダービーのURLは以下のようになっています。

URL : https://db.netkeiba.com/race/202105021211/

2つのサイトのレース結果のURLに含まれている数字を見比べてみると、netkeibaの始めの2文字が競馬新聞&スピード指数(無料)にはないだけ。その他は全く同じ。

試しに幾つかのレースを確認してみましたが、すべて同じ状況でした。netkeibaのrace_idはすでにスクレイピング済みなので、その値から、始めの2文字を除いて、3文字目以降を取り出せば、「競馬新聞&スピード指数(無料)」のURLを生成することができるということです。

スクレイピング

Rでスクレイピングをするならrvestパッケージを使うのが簡単です。

Rでスクレイピングするならrvest 表もリンクもテキストも
Rでスクレイピングをするならrvestパッケージを使うのがベスト。表データ、リンク先URL、テキストなどのデータを簡単に入手できます。netkeibaのレース結果を題材にrvestパッケージの使い方をまとめています。

「競馬新聞&スピード指数(無料)」のレース結果の表は、「table.c1」というcssで識別できます。もしCSSの知識が曖昧ならこちらをどうぞ。これだけ知っていればスクレイピングには十分です。

スクレイピングに必要な最低限のHTML/CSSの知識
スクレイピングでデータを収集するためには、HTMLで書かれたWebページの文書構造を理解し、どこに目的のデータが記載されているかをコンピュータに教えてやる必要があります。このページではスクレイピングに最低限必要なHTML/CSSの知識をまとめています。

 

「table.c1」というcssを手がかりに表を抽出して、あとは、不要な行、列をの削除、等の処理を行えば、スピード指数を取得することができます。

スピード指数スクレイピングのソースコードはこちらから

Rで競馬スピード指数をスクレイピング:ソースコード
このページは以下の記事に対応するRのソースコードを記載しています。 データサイエンスで競馬に挑戦!Rでスピード指数をスクレイピング

「競馬新聞&スピード指数(無料)」のページでは馬名は「エ<br>フ<br>フ<br>ォ<br>l<br>リ<br>ア」のような書き方で、データ処理が大変そうだったこと、race_idと馬番さえわかれば、netkeibaのスクレイピング結果から馬名に変換することはできるということから、今回、馬名の取得はしていません。

スクレイピングしたデータは以下のようになります。

 

このコードで、一晩で、10年分のデータを取得できました。

RでKeras/TensorFlowを使ったディープラーニングもできるようになったし、これで、スピード指数を使った勝ち馬予想、買い目の検討をする準備に移れます。

RとKeras(TensorFlow)でディープラーニング
Keras/TensorFlowを使えばRでもディープラーニングを行うことができます。しかも、とても簡単に。Keras/TensorFlowのインストールから、簡単な例題までを、はじめてディープラーニングにトライする方に向けてまとめています。

スピード指数を使って予測するなら、スピード指数の精度、誤差を押さえておかないと。

競馬スピード指数 当たる?当たらない?精度を知ってうまく活用
競馬をやっている人なら一度は「スピード指数」という言葉を聞いたことがありますよね。「当たる」という人もいれば、「当たらない」という人も。おそらく日本でもっとも有名なスピード指数である「西田式スピード指数」について精度、誤差を評価してみました。精度、誤差を知って上手に活用しましょう。

k近傍法はこちら

k近傍法(k-Nearest Neighbor algorithm, k-NN法)
機械学習アルゴリズムの中で最も単純なものの一つで、分類を目的に使用されるk近傍法についてまとめています。

まとめ

今回のスクレイピングで「競馬新聞&スピード指数(無料)」のサイトからスピード指数データを取得することができます。でも、本文に記載の通り、このデータには馬名は含まれていません。馬名はnetkeibaからスクレイピングしたデータを用いで、race_idと馬番を対応させることで取得させることができます。

netkeibaからのスクレイピングはこちらから

競馬 過去データcsvをnetkeibaから無料で入手する方法
JRA-VANを無料で使えるのはお試し期間のみ。競馬のデータ分析を継続して行うには、どうしても過去の競馬レース結果データを自前で収集する必要があります。netkeibaからのスクレイピング方法やデータをcsv 形式で保存する方法について記述しています。

集めたデータを可視化して出馬表をつくるだけで情報がこんなに整理されます。

競馬予想 データを可視化 スピード指数を活用する
スピード指数を可視化して、出馬表をグラフィカルにするためのソースコードを公開します。データを可視化すれば、情報を適切に評価して、迷うことなく買い目を選択できるようになったり、競馬が上手な人にしかわからないことがわかるようになるなどの効果が得...

毎週木曜日更新

今週のメインレース の「血統指数」「タイム指数」「1着予想確率」
競馬予想に大切な要素である血統(父馬、母父馬)、過去の走破タイムを数値で評価。数値化することでこれまで競馬が上手い人にしかわからなかったこともクッキリ。