[PYTHON] Créer une table d'enregistrement à partir des résultats de correspondance JFL

introduction

Créer un classement à partir des résultats des matchs JFL

Grattage

Identique au grattage du précédent Créer un classement à partir des résultats du match JFL

import requests
from bs4 import BeautifulSoup

url = "http://www.jfl.or.jp/jfl-pc/view/s.php?a=1542&f=2020A001_spc.html"

r = requests.get(url)
r.raise_for_status()

soup = BeautifulSoup(r.content, "html.parser")

data = []

for table in soup.find_all("table", class_="table-data"):

    trs = table.find_all("tr")

    th = int(trs[0].th.get_text(strip=True).strip("Section"))

    for i, tr in enumerate(trs[1:], 1):

        tds = [td.get_text(strip=True) for td in tr.find_all("td")]

        data.append([th, i] + tds)

Data wrangling

import pandas as pd

df = pd.DataFrame(
    data, columns=["section", "nombre", "Date", "temps", "domicile", "But", "Une façon", "Stade", "Remarques"]
)

df.set_index(["section", "nombre"], inplace=True)

df

df_score = (
    df["But"].str.split("-", expand=True).rename(columns={0: "Score à domicile", 1: "Score à l'extérieur"})
)

df_score["Score à domicile"] = pd.to_numeric(df_score["Score à domicile"], errors="coerce").astype("Int64")
df_score["Score à l'extérieur"] = pd.to_numeric(df_score["Score à l'extérieur"], errors="coerce").astype("Int64")

df1 = pd.concat([df, df_score], axis=1).dropna(subset=["Score à domicile", "Score à l'extérieur"])

#Résultats à domicile uniquement
df_home = df1.loc[:, ["domicile", "Une façon", "domicile得点", "Une façon得点"]].copy()
df_home.rename(
    columns={"domicile": "Nom de l'équipe", "Une façon": "Adversaire", "domicileBut": "But", "Une façonBut": "Concédé"}, inplace=True
)
df_home["Guerre"] = "H"
df_home.head()

#Résultats à l'extérieur uniquement
df_away = df1.loc[:, ["Une façon", "domicile", "Une façon得点", "domicile得点"]].copy()
df_away.rename(
    columns={"Une façon": "Nom de l'équipe", "domicile": "Adversaire", "Une façonBut": "But", "domicileBut": "Concédé"}, inplace=True
)
df_away["Guerre"] = "A"
df_away.head()

#Combinez la maison et l'extérieur
df_total = pd.concat([df_home, df_away])

df_total

jfl_2020 = [
    "Honda FC",
    "Sony Sendai FC",
    "Tokyo Musashino City FC",
    "Tegevajaro Miyazaki",
    "Honda Lock SC",
    "Verspa Oita",
    "FC Osaka",
    "MIO Biwako Shiga",
    "Viatin Mie",
    "FC Maruyasu Okazaki",
    "Suzuka Point Getters",
    "Courrier en ligne Aomori",
    "Nara Club",
    "Matsue City FC",
    "Iwaki FC",
    "Kochi United SC",
]

df_total

df_total["résultat"] = df_total.apply(
    lambda x: f'{x["But"]}△{x["Concédé"]}'
    if x["But"] == x["Concédé"]
    else f'{x["But"]}○{x["Concédé"]}'
    if x["But"] > x["Concédé"]
    else f'{x["But"]}●{x["Concédé"]}',
    axis=1,
)

df_total

#Total du tableau des records de bataille
pv_senseki = df_total.pivot(values="résultat", index=["Nom de l'équipe", "Guerre"], columns="対Guerre相手").fillna("")

new_idx = pd.MultiIndex.from_product(
    [jfl_2020, ["H", "A"]], names=pv_senseki.index.names
)

jfl_senseki = pv_senseki.reindex(new_idx, columns=jfl_2020)

jfl_senseki

print(jfl_senseki.to_markdown())
Honda FC Sony Sendai FC Tokyo Musashino City FC Tegevajaro Miyazaki Honda Lock SC Verspa Oita FC Osaka MIO Biwako Shiga Viatin Mie FC Maruyasu Okazaki Suzuka Point Getters Courrier en ligne Aomori Nara Club Matsue City FC Iwaki FC Kochi United SC
('Honda FC', 'H') 1△1 3○1 1△1 1○0
('Honda FC', 'A') 4○0 3○0 1△1 1○0
('Sony Sendai FC', 'H') 0●4 1△1 3○1
('Sony Sendai FC', 'A') 0●2 4○2 2○1 2○0 1●2
('Tokyo Musashino City FC', 'H') 2○0 1●2 2○1
('Tokyo Musashino City FC', 'A') 1△1 0●1 1△1
('Tegevajaro Miyazaki', 'H') 1△1 1●2 2○0
('Tegevajaro Miyazaki', 'A') 2○1 4○1 0△0 1○0
('Honda Lock SC', 'H') 0●3 1●2 0●4 0●3
('Honda Lock SC', 'A') 1△1 3○1 2○1 1○0
('Verspa Oita', 'H') 2●4 1○0 1●2 4○1
('Verspa Oita', 'A') 2○1 2○0 2○1
('FC Osaka', 'H') 1△1 1○0 1●2 0△0 2○1
('FC Osaka', 'A') 1●2 4○0 2●3
('MIO Biwako Shiga', 'H') 1●4 3△3 6○0 1○0
('MIO Biwako Shiga', 'A') 1●3 0●1 2○1 3○1
('Viatin Mie', 'H') 0△0 0●2 1●2 3○2
('Viatin Mie', 'A') 1△1 2○1 0●1 1●2
('FC Maruyasu Okazaki', 'H') 1●2 1●3 1△1 0●2
('FC Maruyasu Okazaki', 'A') 0●1 0△0 2●3 2○0
('Suzuka Point Getters', 'H') 0●1 1○0 0●1 1●2 1○0
('Suzuka Point Getters', 'A') 3△3 1○0 2△2
('Courrier en ligne Aomori', 'H') 0●2 3○0 1△1
('Courrier en ligne Aomori', 'A') 0●1 2○1 0●6 1△1
('Nara Club', 'H') 1●2 1○0 0●1 1△1
('Nara Club', 'A') 1△1 2○1 3○0 1●2
('Matsue City FC', 'H') 2○1 1●3 2○1 2○1
('Matsue City FC', 'A') 0●2 1●2 0●1 2○1 0●3
('Iwaki FC', 'H') 1●2 3○2 2○1 4○3
('Iwaki FC', 'A') 1●4 2○0 0●1 1△1
('Kochi United SC', 'H') 1△1 0●1 0●2 2△2
('Kochi United SC', 'A') 1●3 1△1 1●2 3●4

Recommended Posts

Créer une table d'enregistrement à partir des résultats de correspondance JFL
Créer un classement à partir des résultats des matchs JFL
Créer un classement des scores à partir des résultats de match JFL
Essayez de créer une table d'enregistrement de bataille avec matplotlib à partir des données de "Schedule-kun"
Créez un Dataframe pandas à partir d'une chaîne.
Comment créer un clone depuis Github
Créer un fichier deb à partir d'un package python
Comment créer un référentiel à partir d'un média
Créer un bloc de données à partir d'Excel à l'aide de pandas
Créez une table de correspondance entre le numéro CE et l'entrée Uniprot à partir d'enzyme.dat
Modifier Excel à partir de Python pour créer un tableau croisé dynamique
Comment créer un objet fonction à partir d'une chaîne
Créer un tableau C à partir d'une feuille Python> Excel
Créez une interface utilisateur de jeu à partir de zéro avec pygame2!
Créer une nouvelle tâche Todoist à partir d'un script Python
[python] Créer une table de pandas DataFrame vers postgres
Créer un arbre phylogénétique à partir de Biopyton en utilisant ClustalW2
Créer un arbre de décision à partir de 0 avec Python (1. Présentation)
Créer un objet datetime à partir d'une chaîne en Python (Python 3.3)
Créer un nuage de mots à partir de programmes académiques
Créer une table avec le notebook IPython
J'ai écrit du code Python pour créer un diagramme de dépendance de table (vue) (PlantUML) à partir de SQL
Pourquoi ne pas créer facilement une table élégante avec Python?
Script Python qui crée un fichier JSON à partir d'un fichier CSV
Rechercher la table à l'aide de sqlalchemy et créer un dictionnaire
Créez un environnement d'apprentissage automatique à partir de zéro avec Winsows 10
J'ai créé un outil pour générer automatiquement un simple diagramme ER à partir de l'instruction CREATE TABLE
[Python] Comment créer une table à partir d'une liste (opération de base de création de table / changement de nom de matrice)