You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
2.9 KiB

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sklearn as sk
from sklearn.preprocessing import LabelEncoder
from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
from models import *
import random
from analyse import *
# Définition des colonnes du dataframe à traiter
columns = ['B_fighter','R_fighter','title_bout',
'B_avg_BODY_landed', 'B_avg_HEAD_landed', 'B_avg_TD_att', 'B_avg_TOTAL_STR_landed',
'B_avg_opp_BODY_att', 'B_avg_opp_HEAD_landed', 'B_avg_opp_LEG_landed',
'B_avg_opp_SIG_STR_att', 'B_avg_opp_TOTAL_STR_att',
'R_avg_BODY_landed', 'R_avg_HEAD_landed', 'R_avg_TD_att', 'R_avg_TOTAL_STR_landed',
'R_avg_opp_BODY_att', 'R_avg_opp_HEAD_landed', 'R_avg_opp_LEG_landed',
'R_avg_opp_SIG_STR_att', 'R_avg_opp_TOTAL_STR_att','Winner','weight_class']
# Permet d'inverser le coté des combattants
# Permet ainsi de ne pas prendre en compte dans l'apprentissage le coté de départ (rouge ou bleu)
def swap_values(row):
if random.random() > 0.5:
return swap_values_withoutran(row)
return row
# Inverse le coté des combattants
def swap_values_withoutran(row):
for column in columns:
if column.startswith('B_'):
opposite_column = 'R_' + column[2:]
row[column], row[opposite_column] = row[opposite_column], row[column]
if column.startswith('Winner'):
if row[column] == 0:
row[column] = 2
elif row[column] == 2:
row[column] = 0
return row
# Récupere les données du fichier data.csv
def getData(label_encoder):
df = pd.read_csv('archive/data.csv')
#Avant avril 2001, il n'y avait presque aucune règle dans l'UFC (pas de juges, pas de limites de temps, pas de rounds,
#etc.). C'est à partir de cette date précise que l'UFC a commencé à mettre en place un ensemble de règles connu sous
#le nom de "Unified Rules of Mixed Martial Arts". Par conséquent, nous supprimons tous les combats antérieurs
#à cette mise à jour majeure de l'histoire des règles de l'UFC.
df = df.loc[df['date'] > '2001-04-01', columns]
# Copy le dataframe pour le traiter dans une autre fonction
dfc = df.copy()
# Permet d'encoder la totalité des valeurs string en index (Int)
for column in df.select_dtypes(include=['object']).columns:
df[column] = label_encoder.fit_transform(df[column])
# Permet de générer l'aléatoire sur le coté de départ des combattants (bleu ou rouge)
df = df.apply(swap_values, axis=1)
# Drop de la colonne 'Winner' pour effectuer l'apprentissage
X=df.drop('Winner', axis=1)
# Mise en place du y, montrant la réponse aux prédictions attendus
y=df['Winner']
return X,y,dfc