機械学習用に競馬のデータをMySQLに用意する


この記事のまとめ

  • MySQL上に、中央競馬のレース情報を蓄積したデータベースを作成しました
  • データソースには、JRAが提供する「データラボ 無料体験版DVD」を利用しました
  • データベースのサイズは16GB、構築に3日間かかりました

はじめに

モチベーション

機械学習の勉強を行う上で、自分の興味があるデータセットを準備することは、学習のモチベーションを維持するためにも重要な要素です。私は昔から、競馬の統計的な分析に興味があったため、今回は中央競馬のデータセットをMySQL上に構築してみました。

類似の取り組み

競馬のデータを収集する方法としては、一般的にWebページをクローリングする手法が用いられるケースが多いようです。以下は参考にさせていただいたWebページですが、いずれもクローリングを採用しています。

大井競馬で帝王賞を機械学習で当てた話 - Qiita
競馬の予測をガチでやってみた - stockedge.jpの技術メモ

ただ、クローリングのロジックを構築するにも時間がかかること、クローリングそのものにも時間がかかることなどを考慮して、今回、中央競馬を主催しているJRAが提供している、JRA-VANデータラボの無料体験版に付属するDVDのデータから、MySQLを構築してみました。

JRA-VANデータラボについて

JRAは、JRA-VANというサービスを通して、様々な競馬予想に関するデータや予想ツールを提供しています。今回利用する無料体験版のDVDは、以下のURLから申込を行うことができます。なお、無料体験版の利用期間は1ヶ月です(2018年10月現在)。

JRA-VAN データラボの無料体験|無料体験|競馬予想・競馬情報ならJRA-VAN

申し込んでから数日で、自宅にDVDが到着しました。

データベースの構築

MySQLの設定

残念なことに、DVDに付属するソフト「JV-Link」の動作環境はWindowsのみです。そのため、まずはWindows環境を用意し、DVDをセットし、JV-Linkをインストールします。

それと合わせて、Windows上にMySQLをインストールします。利用したバージョンは以下の通りです。

文字化けなどを防止するために、あらかじめ文字コードをutf8にしておきます。

mysql> show variables like "chara%";
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | utf8                                                    |
| character_set_connection | utf8                                                    |
| character_set_database   | utf8                                                    |
| character_set_filesystem | binary                                                  |
| character_set_results    | utf8                                                    |
| character_set_server     | utf8                                                    |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (2.21 sec)

これで、事前準備は完了です。

EveryDBのインストール

次に、JRA-VANのデータベースにあるデータを、MySQLに蓄積する作業を行います。そのために、EveryDBというソフトウェアを利用させていただきました。以下のサイトからダウンロードできます。EveryDBは作者の概説書の内容も豊富で、非常に使いやすいです。

EveryDB|競馬ソフト使い放題の会員サービス DataLab.(データラボ)|競馬情報ならJRA-VAN

ソフトウェアを起動し、「接続設定」をクリックし、MySQLとの接続設定を行います。以下は設定例です。

ここで「接続確認」を押すと、接続のチェックが行われるのですが、なぜか「データベースの接続に失敗しました」とのメッセージが。作者のFAQを見ると、C++の再頒布パッケージをインストールするよう書かれていたので、インストールを行い無事に解決しました。

その後、「データベース作成」「テーブル作成」と進んでいき、設定を終えます。

データの流し込み

接続設定が終わると、実際にMySQLにデータを流し込んでいきます。基本的に、EveryDBの概説書に従って、更新する日時の範囲や、取得するデータの内容を設定します。

今回は、2010年以降のレース情報のデータを取得しましたが、

  • テーブル数 102
  • データベースのサイズ 16.0GB

の分析用データベースを、MySQL上に構築することができました!ちなみに、丸3日、PCは起動しっぱなしでした...

おまけ:MacからMySQLに接続する

やはりWindowsだと、分析用の環境構築がいろいろと面倒なため、手元のMacからMySQLに接続できるようにしてみました。そのために、まずはMac用のユーザーを作成します。
hostには、一旦ワイルドカード(%)を指定し、どこからでもアクセスできるようにしておきます。

mysql> select user, host from mysql.user;
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| macbook       | %         |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
4 rows in set (3.43 sec)

Mac側のGUIクライアントツールには、 Sequel Proをインストールし、利用します。今回は、Windows端末とMac端末の両方とも、共通の自宅内LANに接続していたため、イントラネット経由で接続してみます。

接続設定の例は以下の通り。ホストには、プライベートIPアドレスを指定します。

「接続」ボタンを押すと、無事に接続できました!

さいごに

失敗した点の共有

EveryDBによるデータ取得時に、認証に失敗する

MySQLにデータを書き込むために、EveryDB画面上で「取得開始」ボタンを押したものの、認証エラーが帰ってくる現象が発生しました。原因はおそらく、 DVDの体験版の認証データが読み取れていないだけですので、しばらく待ってからもう一度試してみるとうまくいきました。

MySQL8系だと、Sequel Proから接続できない

MySQLも8系が出たので、実験がてら試してみようと思いましたが、Sequel Proとの接続でうまく行かず、詰んでしまいました。ぐぐってみると、同様の現象に遭遇しているいくつかのWebページが見つかりました。

Mysql8 でsequel pro がクラッシュした件 caching_sha2_password - ちょこっとプログラミング

どうやら、まだSequel Proとの相性が良くないみたいで、諦めて5系を入れました。

分析に向けて

実は、JRA-VANで提供されるデータの中には、「データマイニング予想」という、ニューラルネットワークを用いた成績予想の結果が含まれています。この値をうまく活用すれば、分析のコストを抑えられるかもしれませんね。

データマイニング予測の仕組み|JRA-VAN広場|競馬情報ならJRA-VAN