#はじめに
2020/06/19修正しました
データ解析テーマとして、興味を持ったので実施してみました。
参考にしたサイトはこちらです。
##競馬予測までの流れ
一から予測モデルを構築しようとすると、下記手順を踏む必要があります。
- 競馬サイトからデータをスクレイピング
- データの前処理
- 予測したい説明変数及び特徴量を決める
- 文字列→数値型へ変換
- カテゴリ変数のダミー変数化
- 訓練データとテストデータに分ける
- モデル構築
- 訓練データで学習させたモデルでテストデータを確認
- 過学習していればモデルの最適化
- 予測したいレースについて予測
今回は1.のスクレイピング関連について簡単にまとめます。
スクレイピングについて
net.keiba.comこちらのサイトからスクレイピングを行いました。
注意点
一度に大量のデータを取得すると、サーバーへの負荷となります。time.sleep(1)
を入れることで1秒ごとにrace_id_list
をリクエストする際に待つようにしています。これによるサーバー負荷軽減を行うことがマナーとされています。
import pandas pd
from tqdm import tqdm_notebook as tqdm
import time
def scrape_race_results(race_id_list):
race_results={}
for race_id in tqdm(race_id_list):
try:
url = 'https://db.netkeiba.com/race/'+ race_id
race_results[race_id]= pd.read_html(url)[0]
time.sleep(1)
except IndexError:
continue
except:
break
return race_results
このrace_id
に確認したいレースを入れます。例えば、202009020611
というIDがあったとします。
これは、
2020→開催年数
09→場所(09であれば阪神、10であれば小倉、等)
02→ 第~開催
06→ 第~開催の何日目
11→レース数
を示しています。
試しにこのような形で見ることができます。
基本pandasを用いてデータ解析を行っていきます。保存は安心のために、pickle
ファイルとcsv
として吐き出しておきます。
取得したデータをresluts_new
に格納しているとすると、下記になります。
results_new.to_pickle('results_new2017-2020')
results_new.to_csv('results_new2017-2020.csv',encoding="SHIFT-JIS")
#終わりに
簡単にデータ取得の方法をまとめました。