前回の記事で、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パッケージを使うのが簡単です。
「競馬新聞&スピード指数(無料)」のレース結果の表は、「table.c1」というcssで識別できます。もしCSSの知識が曖昧ならこちらをどうぞ。これだけ知っていればスクレイピングには十分です。
「table.c1」というcssを手がかりに表を抽出して、あとは、不要な行、列をの削除、等の処理を行えば、スピード指数を取得することができます。
スピード指数スクレイピングのソースコードはこちらから
「競馬新聞&スピード指数(無料)」のページでは馬名は「エ<br>フ<br>フ<br>ォ<br>l<br>リ<br>ア」のような書き方で、データ処理が大変そうだったこと、race_idと馬番さえわかれば、netkeibaのスクレイピング結果から馬名に変換することはできるということから、今回、馬名の取得はしていません。
スクレイピングしたデータは以下のようになります。
このコードで、一晩で、10年分のデータを取得できました。
RでKeras/TensorFlowを使ったディープラーニングもできるようになったし、これで、スピード指数を使った勝ち馬予想、買い目の検討をする準備に移れます。
スピード指数を使って予測するなら、スピード指数の精度、誤差を押さえておかないと。
k近傍法はこちら
まとめ
今回のスクレイピングで「競馬新聞&スピード指数(無料)」のサイトからスピード指数データを取得することができます。でも、本文に記載の通り、このデータには馬名は含まれていません。馬名はnetkeibaからスクレイピングしたデータを用いで、race_idと馬番を対応させることで取得させることができます。
netkeibaからのスクレイピングはこちらから
集めたデータを可視化して出馬表をつくるだけで情報がこんなに整理されます。
毎週木曜日更新