Prognostizieren Sie Pferderennen durch maschinelles Lernen und streben Sie eine Wiederherstellungsrate von 100% an.
In Vorheriger Artikel habe ich die Daten aller Rennergebnisse im Jahr 2019 von netkeiba.com gestrichen. Dieses Mal möchte ich zusätzlich Daten wie Informationen zum Renntermin und den Zustand des Fahrplatzes kratzen.
Wenn Sie wie beim letzten Mal eine Liste von race_id einfügen, erstellen Sie eine Funktion, die das Scraping-Ergebnis im Wörterbuchtyp für jedes Rennen zurückgibt.
import requests
from bs4 import BeautifulSoup
import time
from tqdm.notebook import tqdm
import re
def scrape_race_info(race_id_list):
race_infos = {}
for race_id in tqdm(race_id_list):
try:
url = "https://db.netkeiba.com/race/" + race_id
html = requests.get(url)
html.encoding = "EUC-JP"
soup = BeautifulSoup(html.text, "html.parser")
texts = (
soup.find("div", attrs={"class": "data_intro"}).find_all("p")[0].text
+ soup.find("div", attrs={"class": "data_intro"}).find_all("p")[1].text
)
info = re.findall(r'\w+', texts) #Wenn Sie in Qiita den Back Slash treffen, wird ein Fehler verursacht, der groß geschrieben wird.
info_dict = {}
for text in info:
if text in ["Shiba", "Schmutz"]:
info_dict["race_type"] = text
if "Hindernis" in text:
info_dict["race_type"] = "Hindernis"
if "m" in text:
info_dict["course_len"] = int(re.findall(r"\d+", text)[0]) #Dies wird ebenfalls aktiviert.
if text in ["Gut", "Shige", "Schwer", "不Gut"]:
info_dict["ground_state"] = text
if text in ["Wolkig", "Fein", "Regen", "小Regen", "Leichter Schnee", "Schnee"]:
info_dict["weather"] = text
if "Jahr" in text:
info_dict["date"] = text
race_infos[race_id] = info_dict
time.sleep(1)
except IndexError:
continue
except Exception as e:
print(e)
break
return race_infos
Erstellen Sie die Race_id_list aus Zuletzt gescrappte Daten, machen Sie den DataFrame-Typ wie beim letzten Mal und führen Sie ihn mit den Originaldaten zusammen.
race_id_list = results.index.unique()
race_infos = scrape_race_info(race_id_list)
for key in race_infos:
race_infos[key].index = [key] * len(race_infos[key])
race_infos = pd.concat([pd.DataFrame(race_infos[key], index=[key]) for key in race_infos])
results = results.merge(race_infos, left_index=True, right_index=True, how='left')
Die fertigen Daten sehen so aus.
Wir haben eine ausführliche Erklärung im Video! Datenanalyse und maschinelles Lernen beginnend mit der Vorhersage von Pferderennen
Recommended Posts