경마 AI~타임과 착차를 스크래핑~

타임과 착차가 스크래핑 할 수 없다. . .



전회, 경마 AI를 만들고 싶어서 netkeiba.com님으로부터 스크래핑 시켜 주었습니다. 그 때의 데이터가 이런 느낌입니다.


시간이 없다. . . ! ! !
순위인 랭크를 예측하고 싶기 때문에 일단 이것으로도 예측할 수 있습니다만, 역시 경마에 있어서 주파 타임은 소중해지고 있습니다. 유명한 것으로 주파 타임으로부터 계산한 니시다식 스피드 지수라고 하는 것이 있습니다. 이것은 다음 공식으로 표현됩니다.
西田式スピード指数=( 基準タイム - 走破タイム ) × 距離指数 + 馬場指数 + (斤量-55) × 2 + 80

자세한 해설은 여기이 참고가 되었습니다.

계산은 두고 어쨌든 주파 시간을 스크래핑하지 않으면 시작되지 않는다.

환경



Google Colab

주파 시간을 스크래핑



netkeiba.com에서 스크래핑합니다.

이쪽의 타임과 착차의 열을 스크레이핑 해 갑니다.
스크래핑의 흐름은
1 requests로 html 얻기
2 BeautifulSoup에서 원하는 요소를 (타임과 착차) 취득
이것을 레이스 ID별로 for문을 돌려서 취득하면 됩니다. 레이스 ID는 전회 스크레이핑 해 온 csv 파일의 Unnamed:0의 아래 2자리를 제외한 번호입니다.

requests를 사용하여 URL에 액세스하지만 위와 같은 결과 페이지의 URL은
https://race.netkeiba.com/race/result.html?race_id=레이스 ID&rf=race_list
되어 있습니다. 레이스 ID 부분을 for 문으로 돌리면서 시간과 착차를 취득해 갑니다.
원하는 요소는 오른쪽 클릭 → 검증으로 볼 수 있습니다.

그러면 span 태그의 RaceTime 클래스에 저장되어 있음을 알 수 있습니다.
전체 코드는 다음과 같습니다.
import requests
from bs4 import BeautifulSoup
import time

df_time_tyakusa = pd.DataFrame()
id=keiba_data["race_num"].unique().astype("str")
for h in id:
  time.sleep(1)
  url = "https://race.netkeiba.com/race/result.html?race_id=" + h + "&rf=race_list"
  urls = requests.get(url) #URLを取得
  soup = BeautifulSoup(urls.content, "html.parser") #htmlを解析する
  racetime = soup.find_all("span",class_="RaceTime") #spanタグのRaceTimeクラスにタイムと着差がある。
  for i in racetime:
    texts = i.text #テキストにする。
    s = pd.Series(texts)#Seriesにする。
    df_time_tyakusa=df_time_tyakusa.append(s,ignore_index=True) #DataFrameに追加する。

결과는 다음과 같습니다. (코드가 비효율적인 탓인지 2015~2018년 데이터만으로도 3시간 정도 걸렸습니다.)


짝수 행에 타임, 홀수 행에 착차가 들어간 Series를 취득할 수 있으므로, 그것들을 나누어도 원래의 keiba_data에 결합합니다.
df_time_tyakusa.columns=["time","tyakusa"] #カラム名を命名

tyakusa=df_time_tyakusa[1::2].reset_index(drop=True) #奇数行を取得

time=df_time_tyakusa[::2].reset_index(drop=True) #偶数行を取得

time_tyakusa=pd.concat([time,tyakusa],axis=1) #タイムと着差を結合

keiba_data = pd.concat([keiba_data,time_tyakusa],axis=1)#もとのデータに結合

결합 후에는 이런 느낌입니다.

제대로 결합할 수 있네요.
착차에 대해서는 곰팡이라든지 코를 몇 초라든지 고치는 편이 좋을 것 같네요. 곰팡이의 착차는 콤마 몇 초라든지라고 생각합니다만, 초에 고쳐 타임과 더하는 것으로 실제의 주파 타임을 계산할 수 있습니다.
타임에 대해서도 그대로 사용하면 누설을 일으키므로, 시계열로 정렬하여 과거의 데이터를 사용하는 등의 궁리가 필요합니다.
이것들을 사용하여 경마 AI를 업그레이드하십시오.
끝까지 봐 주셔서 감사합니다.

좋은 웹페이지 즐겨찾기