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