Prédisez les courses de chevaux par apprentissage automatique et visez un taux de récupération de 100%.
Dans Article précédent, j'ai récupéré les données de tous les résultats de course en 2019 sur netkeiba.com. Cette fois, en plus de cela, je voudrais récupérer des données telles que les informations sur la date de course et l'état du terrain de course.
Comme la dernière fois, si vous mettez une liste de race_id, créez une fonction qui renvoie le résultat du scraping en type dictionnaire pour chaque race.
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) #Frapper la barre oblique inverse dans Qiita provoque un bogue, il est donc mis en majuscule.
info_dict = {}
for text in info:
if text in ["Shiba", "saleté"]:
info_dict["race_type"] = text
if "Obstacle" in text:
info_dict["race_type"] = "Obstacle"
if "m" in text:
info_dict["course_len"] = int(re.findall(r"\d+", text)[0]) #Ceci est également capitalisé.
if text in ["Bien", "Shige", "Lourd", "不Bien"]:
info_dict["ground_state"] = text
if text in ["Nuageux", "Bien", "pluie", "小pluie", "Neige légère", "neige"]:
info_dict["weather"] = text
if "Année" 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
Créez race_id_list à partir de Last scraped data, faites-en un type DataFrame comme la dernière fois et fusionnez-le avec les données d'origine.
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')
Les données complètes ressemblent à ceci.
Nous avons une explication détaillée dans la vidéo! Analyse des données et apprentissage automatique à partir de la prédiction des courses de chevaux
Recommended Posts