実写版ウマ娘攻略（pythonで競馬予測モデルを作成してバックテストする方法～１章データ準備編～）

ウマ娘のブームにあやかって、競馬予測に興味を持ってくれる人がたくさん増えてくれると嬉しいです。
python3を使って競馬の予測を行い、予測結果に基づいて購入した結果（バックテスト）を処理するまで記載します。
今回は予測に使用するためのデータを準備するところまで説明します。
（正直、下準備するところまでが一番大変でした。本記事がご参考になれば嬉しいです）

#全体の流れ
今回の記事では「１．データ準備」を説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/36aa44f6-9a69-6b9a-90e2-781bee28a137.png)


#競馬DBの準備
まず、競馬予測するためにはレース情報のデータが必要となります。
今回はJRAVANという有料の情報を使って予測していきます。
https://jra-van.jp/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/3d36ba99-bc14-9385-3aab-d9f3e00c1c50.png)
別の方法としては、競馬サイトをスクレイピングして情報収集するやり方もありますが結構時間がかかるため（＆サイト負荷もかけてしまうため）今回は使用しません。

##JRA-VANに登録
JRA-VANは、JRAシステムサービスが運営する競馬情報サービスです。
今回、利用するのはJRA-VANデータラボです。
JRA-VANデータラボは、競馬データを収集してくれるソフトや独自の競馬予測ソフトなどを提供しています。
データラボの利用料金は月額2090円になりますが、
１か月の無料会員も利用できるのでそちらを使うこともできます。
データ収集を終えたら、月額会員を続けなくても解析することは可能です。

###ユーザー登録
下記URLから会員登録できます。
https://jra-van.jp/dlb/index.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/e2763842-2517-f947-6c0b-f70835042658.png)

##EveryDBのダウンロード
会員登録すると競馬ソフトウェアを利用することができます。
画面下部の「対応ソフト一覧ダウンロード」をクリックして一覧を表示します。
「EveryDB2」のソフトを使用しますのでそちらをダウンロードしてください。

Google Chromeからだとうまくダウンロードできない場合があるので、その時は他ブラウザでダウンロードを試してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/bafe772d-c50f-cc18-ca98-78877f93b5b3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/0a88b444-3778-5861-39be-d35ae464cecd.png)

###JV-linkのインストール
競馬ソフトウェア内で競馬情報を取得する際にJV-linkをインストールしている必要があります。
画面下部の「動作環境」からJV-Linkをインストールしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/41af4417-8d78-5d07-594e-5f30a639aef8.png)


##EveryDBの使用
先ほどダウンロードしたWveryDBのexeファイルを実行すると下記のようなファイルが生成されます。
「EveryDB2.exe」を実行するとEveryDB2を起動できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/7d7ceb5d-6e1d-f87e-a84b-5d90c577870c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/ebc96332-55c8-b5d6-2acb-facfb43c2aa0.png)

####JV-Linkの設定
まず初めにEveryDBにJV-Linkの利用キーを連携する必要があります。
JV-Linkの利用キーの確認方法は、JRA-VANの「マイページ＞ご利用状況の確認・サービス購入」のページを開き、データラボの「詳細」ボタンを押すと確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/16b9622d-46da-0e6e-6e6b-fe7b7f907b3b.png)

利用キーの確認ができたら、EveryDBの上部メニューから「JVLink」を押下して利用キーを入力してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/52e39eb4-bc10-0ae4-701c-4f632362dc7c.png)

####DBの接続設定
上部メニューの「接続設定」を押下して、テーブル作成を実行してください。
今回はSQliteに競馬データを保存していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/8b20acfe-bf46-b514-3f72-8a25a048e972.png)

接続確認でエラーが起きた場合は下記の「Microsoft Visual C++ 2010 再頒布可能パッケージ (x86)」をインストールしてください。
http://www.microsoft.com/ja-jp/download/details.aspx?id=5555

設定が完了したら右上の×ボタンを押してください（ウィンドウの×ボタンの下にある×ボタンです）
（この×ボタンを押さないと他メニューが選べないです。これに気が付くまでに結構時間かかりました）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/b69603f1-4d93-5d7a-fe85-49f365b9b0e9.png)

###初期セットアップの設定
「更新設定」を開き、セットアップデータを選択します。
「更新範囲」の設定でデータ取得開始日を設定します。
デフォルトの設定のままだとすべてのデータを取得することになり膨大な時間がかかってしまいます。
そのため、今回は「2015年1月」からデータ取得するように設定しました。
次に、画面下部の「セットアップデータ種別」のチェックボックスをすべてONにします。
設定が完了しましたら、保存ボタンを押下してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/a7fa642d-8e7d-b284-e863-58f2357c5fe4.png)


###セットアップ実行
「更新処理」ボタンを押して「取得開始」を押下します。
ポップアップが出てきますのでOKを押すとデータ取得が開始されます。
10分ほどでデータ取得が完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/065bf3c7-ee86-5b70-91bb-2013b64d24cc.png)

###通常データの取得設定
「更新設定」を開き、セットアップデータを選択します。
「更新範囲」の設定でデータ取得開始日を設定します。
デフォルトの設定のままだとすべてのデータを取得することになり膨大な時間がかかってしまいます。
そのため、今回は「2015年1月」からデータ取得するように設定しました。
次に、画面下部の「通常データ種別」のチェックボックスをすべてONにします。
設定が完了しましたら、保存ボタンを押下してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/dce5879f-3047-01fc-ad2a-f4573afbe8e8.png)

###通常データ取得実行
「更新処理」ボタンを押して「取得開始」を押下します。
ポップアップが出てきますのでOKを押すとデータ取得が開始されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/065bf3c7-ee86-5b70-91bb-2013b64d24cc.png)

###取得したデータの確認
「SQL実行」ボタンを押して「テーブル一覧」の+ボタンを押すとDBテーブル一覧が表示されます。
取得したデータごとにテーブルわけして格納してくれます。
試しに「N_UMA_RACE」の確認する場合は下記を入力して「SQL実行」を押してください。

```sql
select * from N_UMA_RACE
```

下記にデータの仕様書がありますので、詳しく知りたい方はそちらをご参考にしてください。
https://jra-van.jp/dlb/sdv/sdk/JV-Data4515.pdf
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1186688/da27e58f-ffe7-b2a8-cbe9-08ab484aae60.png)

###データ加工
モデル作成に必要なデータを新しく列に挿入していきます。
ここではモデル学習の予想対象のデータを作成します。
今回作成するモデルは与えられたデータから１着かそれ以外かを予測するモデルを作る予定です。
いまのDBには各馬の確定順位のデータはありますが、それだと使いづらいのでデータ加工して、レースの着順が１位かそれ以外かを示す列を作成します。
N_UMA_RACEテーブルの「KakuteiJyuni」列を参照して１着の馬は「１」、それ以外の馬は「０」となるように値を設定します。
今回はテーブルN_UMA_RACEに新しい列「1inai」を追加します。
上記のSQL実行画面で下記を実行してください。

```sql
ALTER TABLE N_UMA_RACE ADD COLUMN "1inai" INTEGER
```

そうするとN_UMA_RACEの一番右端に「1inai」が作成されます。
いまの段階では「1inai」に何も値が入力されていません。
次に下記を実行してください。

```sql
update N_UMA_RACE set "1inai"=1 where cast(KakuteiJyuni as real) < 2;
update N_UMA_RACE set "1inai"=0 where cast(KakuteiJyuni as real) > 1;
```
これで1inaiに値が挿入されました。
下記を実行すると1inaiの列に「０」、「１」の値が入ってることがわかります。

```sql
select * from N_UMA_RACE
```





#次回
次回は予測モデルの作成をしていきます。
https://qiita.com/umaining/items/769fea8d5fb414d249ab