From 16081a356487cf7f9998d0ff480fc8dcc4e08184 Mon Sep 17 00:00:00 2001 From: Wirusik Date: Sun, 20 Mar 2022 21:27:49 +0100 Subject: [PATCH] train dev and test subsets, basic statistics and preprocessing --- init.py | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 71 insertions(+), 2 deletions(-) diff --git a/init.py b/init.py index 46bf6bf..6a39873 100644 --- a/init.py +++ b/init.py @@ -1,10 +1,79 @@ 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 + +# Inicjalizacja danych file_exists = exists('./df_atp.csv') if not file_exists: subprocess.run(["pip", "install", "--user", "kaggle"]) - subprocess.run(["pip", "install", "--user","pandas"]) + subprocess.run(["pip", "install", "--user", "pandas"]) + subprocess.run(["pip", "install", "--user", "scikit-learn"]) + subprocess.run(["pip", "install", "--user", "matplotlib"]) subprocess.run(["kaggle", "datasets", "download", "-d", "hakeem/atp-and-wta-tennis-data"]) - subprocess.run(["unzip", "-o", "atp-and-wta-tennis-data.zip"]) \ No newline at end of file + subprocess.run(["unzip", "-o", "atp-and-wta-tennis-data.zip"]) + +atp_data = pd.read_csv('df_atp.csv') +print(atp_data) + +# Podział na podzbiory: trenujący, testowy, walidujący + +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("Elements of total set: " + str(len(atp_data))) +print("Elements of test set: " + str(len(atp_test))) +print("Elements of dev set: " + str(len(atp_dev))) +print("Elements of train set: " + str(len(atp_train))) + +# Ś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"])