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

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

# はじめに

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

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

[大井競馬で帝王賞を機械学習で当てた話 - Qiita](https://qiita.com/ishizakiiii/items/3b894b6e987fdf87093e)
[競馬の予測をガチでやってみた - stockedge.jpの技術メモ](http://stockedge.hatenablog.com/entry/2016/01/03/103428)

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

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

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

[JRA-VAN データラボの無料体験｜無料体験｜競馬予想・競馬情報ならJRA-VAN](https://jra-van.jp/trial/trial_dlb.html)

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


# データベースの構築

## MySQLの設定

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

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

![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/280372/fcadbd17-be41-a5f7-65bc-a06dd92b522f.png)

文字化けなどを防止するために、あらかじめ文字コードを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は作者の[概説書](http://cattle.x-winz.net/edb2_manual/)の内容も豊富で、非常に使いやすいです。

[EveryDB｜競馬ソフト使い放題の会員サービス DataLab.（データラボ）｜競馬情報ならJRA-VAN](http://jra-van.jp/dlb/sft/lib/everydb.html)

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

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/280372/afc19b80-b90b-d514-84c6-486b2f2cb1f2.png)

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

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

## データの流し込み

接続設定が終わると、実際にMySQLにデータを流し込んでいきます。基本的に、EveryDBの[概説書](http://cattle.x-winz.net/edb2_manual/)に従って、更新する日時の範囲や、取得するデータの内容を設定します。

今回は、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](https://sequelpro.com/)をインストールし、利用します。今回は、Windows端末とMac端末の両方とも、共通の自宅内LANに接続していたため、イントラネット経由で接続してみます。

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

![SS 1.png](https://qiita-image-store.s3.amazonaws.com/0/280372/91eacccb-de17-0a6d-58fa-7a610aec7c91.png)

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

![SS 2.png](https://qiita-image-store.s3.amazonaws.com/0/280372/e6dfcf68-5562-003f-e91d-0c31f219c27c.png)


# さいごに

## 失敗した点の共有

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

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

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

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

[Mysql8 でsequel pro がクラッシュした件　caching_sha2_password - ちょこっとプログラミング](https://stlisacity.hatenablog.com/entry/2018/07/15/170001)

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


## 分析に向けて

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

[データマイニング予測の仕組み｜JRA-VAN広場｜競馬情報ならJRA-VAN](http://jra-van.jp/fun/dm/mining.html)