68 lines
2.7 KiB
Python
68 lines
2.7 KiB
Python
|
import subprocess
|
||
|
from os.path import exists
|
||
|
import pandas as pd
|
||
|
import numpy as np
|
||
|
from sklearn.model_selection import train_test_split
|
||
|
import matplotlib
|
||
|
from pathlib import Path
|
||
|
import math
|
||
|
|
||
|
# Inicjalizacja danych
|
||
|
file_exists = exists("./df_atp.csv")
|
||
|
if not file_exists:
|
||
|
subprocess.run(["unzip", "-o", "atp-and-wta-tennis-data.zip"])
|
||
|
|
||
|
atp_data = pd.read_csv("df_atp.csv")
|
||
|
|
||
|
# Średnia ilość gemów w pierwszym secie zwycięzców meczu
|
||
|
print(atp_data[["Winner", "W1"]].mean())
|
||
|
|
||
|
# Minimalna ilość wygranych gemów w pierwszym secie osób wygrywających mecz
|
||
|
print(atp_data[["Winner", "W1"]].min())
|
||
|
|
||
|
# Maksymalna ilość wygranych gemów w pierwszym secie osób wygrywających mecz
|
||
|
print(atp_data[["Winner", "W1"]].max())
|
||
|
|
||
|
# Odchylenie standardowe wygranych gemów w pierwszym secie osób wygrywających mecz
|
||
|
print(atp_data[["Winner", "W1"]].std())
|
||
|
|
||
|
# Mediana wygranych gemów w pierwszym secie osób wygrywających mecz
|
||
|
print(atp_data[["Winner", "W1"]].median())
|
||
|
|
||
|
# Zmiana nazwy nienazwanej kolumny
|
||
|
atp_data.rename(columns={"Unnamed: 0": "ID"}, inplace=True)
|
||
|
|
||
|
# Jak często kto był zwycięzcą
|
||
|
print(atp_data.groupby("Winner")["ID"].nunique())
|
||
|
|
||
|
# Normalizacja rund -1: Finał, -2: Półfinał, -3: Ćwiartka, -4: Każdy z każdym
|
||
|
# 1: pierwsza runda, 2: druga runda, 3: trzecia runda, 4: czwarta runda
|
||
|
atp_data.loc[atp_data["Round"] == "The Final", "Round"] = -1
|
||
|
atp_data.loc[atp_data["Round"] == "Semifinals", "Round"] = -2
|
||
|
atp_data.loc[atp_data["Round"] == "Quarterfinals", "Round"] = -3
|
||
|
atp_data.loc[atp_data["Round"] == "Round Robin", "Round"] = -4
|
||
|
atp_data.loc[atp_data["Round"] == "1st Round", "Round"] = 1
|
||
|
atp_data.loc[atp_data["Round"] == "2nd Round", "Round"] = 2
|
||
|
atp_data.loc[atp_data["Round"] == "3rd Round", "Round"] = 3
|
||
|
atp_data.loc[atp_data["Round"] == "4th Round", "Round"] = 4
|
||
|
print(atp_data["Round"])
|
||
|
|
||
|
# Czyszczenie: W polu z datą zamienimy ######## na pustego stringa
|
||
|
atp_data.loc[atp_data["Date"] == "########", "Date"] = ""
|
||
|
print(atp_data["Date"])
|
||
|
|
||
|
# Podział na podzbiory: trenujący, testowy, walidujący w proporcjach 6:2:2
|
||
|
atp_train, atp_test = train_test_split(atp_data, test_size=0.4, random_state=1)
|
||
|
atp_dev, atp_test = train_test_split(atp_test, test_size=0.5, random_state=1)
|
||
|
|
||
|
# Wielkość zbioru i podzbiorów
|
||
|
print("\nElements of total set: " + str(len(atp_data)))
|
||
|
print("\nElements of test set: " + str(len(atp_test)))
|
||
|
print("\nElements of dev set: " + str(len(atp_dev)))
|
||
|
print("\nElements of train set: " + str(len(atp_train)))
|
||
|
|
||
|
# Stworzenie plików z danymi trenującymi i testowymi
|
||
|
atp_test.to_csv("atp_test.csv", encoding="utf-8", index=False)
|
||
|
atp_dev.to_csv("atp_dev.csv", encoding="utf-8", index=False)
|
||
|
atp_train.to_csv("atp_train.csv", encoding="utf-8", index=False)
|