日付のデータ型を変更
netkeibaよりスクレイピングしたレース結果において、
日付は”2023年7月22日”という形(object型)で取得されます。この形ですとデータを扱いにくいため、
2023-07-22の形(datetime64型)に変更します。
import pandas as pd
keiba_data=pd.read_csv(r"〇〇") #〇〇には競馬データ.csvのファイルパスを入力
#日付データの形式を変更する。
keiba_data['日付'] = pd.to_datetime(keiba_data['日付'], format='%Y年%m月%d日')
上記のコードでは、
日付のカラムをto_datetime関数を用いて、データ型をdatetime64型に変更しています。
性齢のカラムを性と齢に分割
レース結果において各馬の性別と年齢は、性齢という形で一つのカラムにまとまっています。
こちらをstr.extractを用いて文字列を性と齢のカラムに分割します。
import pandas as pd
keiba_data=pd.read_csv(r"〇〇") #〇〇には競馬データ.csvのファイルパスを入力
#性齢を分割
sex=keiba_data["性齢"].str.extract("([牝牡セ])",expand=True)
year=keiba_data["性齢"].str.extract(r"(\d)",expand=True)
#keiba_dataに性と齢を追加し、性齢のカラムは消す
keiba_data["性"]=sex
keiba_data["齢"]=year
keiba_data=keiba_data.drop("性齢",axis=1)
馬体重(増減)を馬体重と馬体重増減に分割
レース結果において、馬体重は馬体重(増減)という形で、現在の馬体重と前回からの体重変化を記載しています。こちらを現在の体重である”馬体重”と、前回からの体重変化である”馬体重変化”という形でカラムを分割します。
import pandas as pd
keiba_data=pd.read_csv(r"〇〇") #〇〇には競馬データ.csvのファイルパスを入力
#馬体重(増減)を分割
weight=keiba_data["馬体重(増減)"].str.extract(r"(\d{3})",expand=True)
zougen=keiba_data["馬体重(増減)"].str.extract(r"\(([+-]?\d+)",expand=True)
#keiba_dataに馬体重と馬体重増減を追加し、馬体重(増減)のカラムは消す
keiba_data["馬体重"]=weight
keiba_data["馬体重増減"]=zougen
keiba_data=keiba_data.drop("馬体重(増減)",axis=1)
タイムを秒に変更
レース結果において、タイムは1:09といった形で分と秒で記載されています。こちらを秒のみの記載に変更します。(1:09→69)
変換にはto_datetime関数を用いて、タイムのデータ型をtimedelta64型にし、秒へと変更できる形にしています。
import pandas as pd
keiba_data=pd.read_csv(r"〇〇") #〇〇には競馬データ.csvのファイルパスを入力
#基準となる0分0秒を作成
base_time = pd.to_datetime('00:00.0', format='%M:%S.%f')
#馬のタイムから基準の0分0秒を引いて差分を出す。
keiba_data["タイム"] = pd.to_datetime(keiba_data["タイム"], format='%M:%S.%f') - base_time
#差分を秒に変換する。
keiba_data["タイム"]=keiba_data["タイム"].dt.total_seconds()
失格や中止、除外となった馬のデータを消す
レース結果において、競争前に失格や中止、除外となった馬は、レース結果データは空となり、データ分析する上でノイズデータとなるため、削除します。
失格や中止、除外になった場合、着順のカラムに失格や中止、除外と記載されるので、そちらを利用して削除します。
import pandas as pd
keiba_data=pd.read_csv(r"〇〇") #〇〇には競馬データ.csvのファイルパスを入力
#インデックス番号をリセットする。
keiba_data=keiba_data.reset_index(drop=True)
#着順が取消、除外、中止、失格となっている行をリスト化する。
delete=keiba_data.index[(keiba_data["着順"]=="取消") | (keiba_data["着順"]=="除外") | (keiba_data["着順"]=="中止")| (keiba_data["着順"]=="失格") ]
#着順が取消、除外、中止、失格となっている行を消す
keiba_data=keiba_data.drop(delete,axis=0)
#着順のデータ型をint型(整数型)に変更する
keiba_data['着順']=keiba_data['着順'].astype(int)
投稿者プロフィール
-
独学でpythonを学び競馬予測しています。これまでの競馬成績は以下の通り。回収率150%を目指します。
2021年回収率:119%
2022年回収率:104%
2023年回収率:121%
2024年回収率:88%
最新の投稿
- 競馬データの前処理・特徴量作成2024年12月30日騎手勝率
- 競馬よもやも話2024年11月28日競馬予想モデルと狙うべき馬券
- 競馬データの前処理・特徴量作成2024年11月27日馬年齢(日齢)と日齢を使った派生特徴量
- 競馬よもやも話2024年11月24日予想モデルの改良タイミング