見出し画像

機械学習歴3ヶ月の素人がAIで競艇を攻略する (2)【過去データ取得 (スクレイピング)】

❇︎ ❇︎ ❇︎ ❇︎ ❇︎ ❇︎ ❇︎ ❇︎ ❇︎ ❇︎ ❇︎ ❇︎

このnoteは、プログラミング初心者から機械学習勉強中の方
競艇で不労所得を目指したい方に向けて、
「競艇で機械学習をお試しする」ハードルを下げまくるためのnoteです。

❇︎ ❇︎ ❇︎ ❇︎ ❇︎ ❇︎ ❇︎ ❇︎ ❇︎ ❇︎ ❇︎ ❇︎

このnoteは機械学習歴3ヶ月の素人がAIで競艇を攻略する (1)のつづきとなっています。
未読の方は先に読んでいただくと流れがわかりやすいかもしれません。


1. 今回やること

前回は筆者の紹介と、モデルのコンセプトについて説明しました。
今後はモデルの作成の流れに沿って実際のコードとその内容を説明していこうと思っています。

今後の流れ
a. スクレイピングをして過去データを取得する。
b. 特徴量の作成をしていく
 (ここが長くなると思います)
c. 予測を行う
d. 買い目の選択を行う

今回は a のスクレイピングについて書いていきます。
プログラミング初心者の方は頑張ってついてきてくださいね。
(偉そうですが私もついこないだまで初心者でした)


2017.01.01~2021.07.23の過去データを筆者がスクレイピングしたのち、今後本記事に沿って進めやすいように前処理を施したファイルを最後に載せています。

作業がめんどくさい方はそちらからダウンロードしてくださいね


2. スクレイピングしてみよう

スクレイピングとは、簡単に言えばプログラムを書いてブラウザを動かし、Web上からデータを取ってくることです。

今回は、学習させるために必要なデータを「BOAT RACEオフィシャルサイト」から取ってくることを考えます。

このサイトは一日単位でレースデータをまとめてダウンロードできるようにしてくれているのでとても助かります。
( 競馬の時は各レースの結果ページなどからひとつひとつスクレイピングしなければいけなかったので本当に助かる!)
(ただ、ダウンロードできるファイル形式の都合上、逆に増えてしまう作業もあってややこしいのですが...)

ここでは、Google Colaboratoryを利用しています。
初心者の方でも取り組みやすいと思いますので是非やってみてください。
(詳しい使い方などは他noteやQiitaにお任せします。ググってみてください)

実際のコードを書こうかと思ったのですが、私自身あるサイトのコードをほとんど丸パクりしてスクレイピングをしたので、ここではそのサイトを紹介させていただきます。

以下のリンクのコードを、適宜ディレクトリ名などを変更してコピペして実行してください。(以降の作業との関係上、他のページの作業は行わないでください。)
非常にわかりやすいブログですので、しっかりと読めば誰でもできるはずです。頑張ってください。

レース払い戻し結果のダウンロード
手順①手順②手順③
番組表(出走表)のダウンロード
手順①手順②手順③
レース結果詳細の取得
手順①

以上を実行することで、3つのCSVファイルを作成することができたかと思います。

めんどくさい方向けに完成品 (+前処理をしたもの)を最後に載せていますのでそちらからもどうぞ!


3. スクレイピングしたデータの確認

スクレイピングした過去データの内容を確認しておきます。

プログラミング初心者の方などはあまりしっかり見なくても大丈夫です。

色々出てきてややこしいかもしれませんが、太字にした項目をモデル作成に使用します。


【results.csv】

名前は違うかもしれませんが、払い戻しデータが入ったCSVファイルです。
pd.read_csvをしてcolumsを見てみると、下のようになっていると思います。

'タイトル', '日次', 'レース日', 'レース場', 'レース回', '3連単_組番', '3連単_払戻金', '3連複_組番', '3連複_払戻金', '2連単_組番', '2連単_払戻金', '2連複_組番', '2連複_払戻金'

これは最後に回収率をシミュレーションする際に使います。


【results_YYYYMMDD-YYYYMMDD.csv】

名前は違うかもしれませんが、レースの詳細データが入ったCSVファイルです。
pd.read_csvをしてcolumsを見てみると、下のようになっていると思います。

'レースコード', 'タイトル', '日次', 'レース日', 'レース場', 'レース回', 'レース名', '距離(m)', '天候',
'風向',
...
'6着_艇番', '6着_登録番号', '6着_選手名', '6着_モーター番号', '6着_ボート番号', '6着_展示タイム',
'6着_進入コース', '6着_スタートタイミング', '6着_レースタイム'

カラムが100個もありますが、レースの情報として以下の情報があり、

'タイトル', '日次', 'レース日', 'レース場', 'レース回', 'レース名', '距離(m)', '天候', '風向', '風速(m)', '波の高さ(cm)', '決まり手'

1着だった艇から6着だった艇のそれぞれに関して以下の情報があります。

'着順', '艇番', '登録番号', '選手名', 'モーター番号', 'ボート番号', '展示タイム', '進入コース', 'スタートタイミング', 'レースタイム'

あとは[results.csv]と重複する内容が入っていますね。


【timetable_YYYYMMDD-YYYYMMDD.csv】

名前は違うかもしれませんが、番組表データが入ったCSVファイルです。
pd.read_csvをしてcolumsを見てみると、下のようになっていると思います。

'タイトル', '日次', 'レース日', 'レース場', 'レース回', 'レース名', '距離(m)', '電話投票締切予定',
'1枠_艇番', '1枠_登録番号',
...
'6枠_今節成績_2-2', '6枠_今節成績_3-1', '6枠_今節成績_3-2', '6枠_今節成績_4-1',
'6枠_今節成績_4-2', '6枠_今節成績_5-1', '6枠_今節成績_5-2', '6枠_今節成績_6-1',
'6枠_今節成績_6-2', '6枠_早見'

これも176種類のカラムがあって頭が痛くなりますが、
レース情報として以下の情報があり

'タイトル', '日次', 'レース日', 'レース場', 'レース回', 'レース名', '距離(m)', '電話投票締切予定'

1枠から6枠までの選手に関して以下の情報があります。

'艇番', '登録番号', '選手名', '年齢', '支部', '体重', '級別'
'全国勝率', '全国2連対率', '当地勝率', '当地2連対率'
'モーター番号', 'モーター2連対率', 'ボート番号', 'ボート2連対率',
 '今節成績_1-1', '1枠_今節成績_1-2', '今節成績_2-1', '今節成績_2-2', '今節成績_3-1', '今節成績_3-2', '今節成績_4-1', '今節成績_4-2', '今節成績_5-1', '今節成績_5-2', '今節成績_6-1', '今節成績_6-2', '早見'

早見とは、同じ日に複数のレースに出走している場合にそれが何レース目かわかるものです。


以上が前回スクレイピングして取得した過去データの中身です。

めんどくさい方向けに完成品 (+前処理をしたもの)を最後に載せていますのでそちらからもどうぞ!

次回からは、上記の太字にした項目をベースに特徴量を用意していきましょう。



4. まとめ

今回は公式サイトから過去データをスクレイピングしてきました。

次回以降はこのCSVファイルを用いて特徴量の作成を行なっていきたいと思います。

最後まで読んでくださりありがとうございました。

ぜひ次回も読んでくださいね。

執筆モチベーションになるのでスキ♡やサポートなどいただけると嬉しいです。


↓↓ 配布用CSVファイルはコチラ! ↓↓

ここから先は

200字 / 3ファイル

¥ 700

この記事が気に入ったらサポートをしてみませんか?