5
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pandasを使って競馬のデータベースを取得してみた

Last updated at Posted at 2020-05-30

#はじめに

2020/06/19修正しました

 データ解析テーマとして、興味を持ったので実施してみました。

 参考にしたサイトはこちらです。

##競馬予測までの流れ

 一から予測モデルを構築しようとすると、下記手順を踏む必要があります。

  1. 競馬サイトからデータをスクレイピング
  2. データの前処理
  • 予測したい説明変数及び特徴量を決める
  • 文字列→数値型へ変換
  • カテゴリ変数のダミー変数化
  1. 訓練データとテストデータに分ける
  2. モデル構築
  • 訓練データで学習させたモデルでテストデータを確認
  • 過学習していればモデルの最適化
  1. 予測したいレースについて予測

今回は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→レース数

を示しています。

試しにこのような形で見ることができます。

image.png

基本pandasを用いてデータ解析を行っていきます。保存は安心のために、pickleファイルとcsvとして吐き出しておきます。

取得したデータをresluts_newに格納しているとすると、下記になります。

results_new.to_pickle('results_new2017-2020')
results_new.to_csv('results_new2017-2020.csv',encoding="SHIFT-JIS")

#終わりに

 簡単にデータ取得の方法をまとめました。

5
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?