【UM-AI 1】競馬データベースをローカル環境に作成する

競馬AI

競馬AI開発を始めて1年半が経過し、最近精度や予想効率の限界を感じ始めました。

もともと開発できるか半信半疑だったこともあり、まずは無料でスクレイピングでデータを集めてきて遊び感覚でやっていましたが、AI競馬予想マスターズというnetkeiba主催の大会に出場できたこともあり、正確なデータを使いもっと本気で開発しようを決心しました!
netkeibaがスクレイピング対策したこともありますが、、、

正確で大量のデータはお金がかかりますが、そこは必要経費だと割り切り、データベースの開発から再スタートを切ります。

リアルタイムで記事にしていくので、どこまでたどり着くかわかりませんがお付き合いいただけると幸いです。

データ取得元の選定

有料のデータベースを調べてみると以下のサイトがヒットしました。JRA公式のようなので、ここから取得するのが安心・安全ですね。

月額2,090円かかりますが、1か月の無料体験があるのでとりあえず無料体験を申し込んでみました。
※無料体験にプラスでDataLab.会員の申し込みが必要です。初月無料で2か月目以降料金が発生すると思うので注意してください。

この中に様々な競馬予想のためのツールがあり、それを使って予想していくというのが王道の使い方のようです。

私は他の人が作成したツールで予想したいわけではないので、さらに調べてみるとEveryDB2というツールにたどり着きました。

これを使うと、好きなDBMSをつかってデータベースが構築できるみたいです。

データベースの構築

私は仕事柄SQL Serverをよく使っていたので、SQL Serverが良かったのですが無料版は10GBまでしか持てないみたいなので、今回はMySQLにデータベースを構築していきたいと思います。

MySQLをGUIで操作するにはphpMyAdminというツールを使います。このツールを使うにはPHP・Apachなどが必要になってきます。

個別にインストールしてもよいのですが、XAMPPというものがすべてセットになっていて使いやすいようです。

XAMPPのインストール

XAMPPのインストール方法を初心者向けに徹底解説

ツールのインストールは本記事の本質ではないので割愛させていただきます。

SQL Server Management Studioのインストール

公式サイトからダウンロードしてきます。

参考サイト:SQL Server Management Studio (SSMS) のダウンロード

EveryDB2のインストール

JRA-VANのサイトからEveryDB2をインストールします。

参考サイト:EveryDB2 2.3

参考サイト:EveryDB2 概説書

接続設定

接続設定やデータベース・テーブルの作成はマニュアルに詳しく記載されているので、こちらを参照してください。

EveryDB2 概説書

更新設定

何も設定せずに更新処理をしてみたのですが、処理が動いていなかったようなので、更新設定ページを確認しました。

以下のように設定したら、無事更新処理が実行できました。

どんなデータが必要なのかわからないので、とりあえずすべてチェックし、2010年からのデータを取得するようにしました。しかし、票数のレコードがかなり多くインポートが進まなかったので、以下のチェックを外しました。

票数や確定オッズは予測には不要になるので。

  • RACE-H1 票数1
  • RACE-H6 票数6
  • RACE-O1 確定オッズ1
  • RACE-O2 確定オッズ2
  • RACE-O3 確定オッズ3
  • RACE-O4 確定オッズ4
  • RACE-O5 確定オッズ5
  • RACE-O6 確定オッズ6

画像はチェックを外していませんが、チェックを外して保存を押した後更新処理を実施します。

私の環境だけかもしれませんが、データベースの更新処理に失敗することがあります。タイミングとしてはいずれかのテーブルの更新が終了して、次のテーブルにデータを登録する時。

そういう時はアプリを一度終了し、再起動して更新処理を行うと続きから再開してくれます。
※これがわからずここに結構泣かされました、、、

ちなみに5日間くらいかかったので時間には余裕を持って実行してくださいw

データの確認

どのテーブルでも良いのですが、MySQLでテーブル名をクリックしてデータの中身を確認してみてください。

以下のようにデータが入っていれば成功です。

また以下のクエリで、すべてのテーブルのレコード数が確認できるので実行してみてください。
※test_dbは自分のデータベース名を指定してください

SELECT 
    TABLE_NAME AS TableName, 
    TABLE_ROWS AS RowCount 
FROM 
    INFORMATION_SCHEMA.TABLES 
WHERE 
    TABLE_SCHEMA = 'test_db';

まとめ

スクレイピングよりもはるかに早く、さらに多くの項目が取得できて感動しました。スクレイピングではコードを作成しテストし、データを取得しても間違っていたら再取得するなど、3週間以上かかったような記憶があります。
ちょっと躓きましたが、特にプログラミングすることなく5日間で必要なデータがすべて取得できました。

まだ中身をすべて確認できたわけではないので、どんなデータがあるか・どういったデータを使って競馬予想に使うかを考えていきます。

自分専用のWebサイトなども作れたら良いな~なんて思ったりもしています。

コメント