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.
72 lines
2.8 KiB
72 lines
2.8 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 analise import *
|
|
|
|
# Défini toutes les colonnes à garder dans le nettoyage des données
|
|
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',
|
|
|
|
'B_age', 'R_age','date','Winner','weight_class','B_Stance','R_Stance']
|
|
|
|
def swap_values(row):
|
|
# Choisi avec 1 chance sur 2 si le swap va être effectué
|
|
if random.random() > 0.5:
|
|
for column in columns:
|
|
if column.startswith('B_'):
|
|
# Si la colonne commence par B_, on l'échange par R_
|
|
opposite_column = 'R_' + column[2:]
|
|
row[column], row[opposite_column] = row[opposite_column], row[column]
|
|
if column.startswith('Winner'):
|
|
# Si la valeur de Winner est 0, on remplace par 2 et vice-versa
|
|
print(row[column])
|
|
if row[column] == 0:
|
|
row[column] = 2
|
|
elif row[column] == 2:
|
|
row[column] = 0
|
|
print(row[column])
|
|
return row
|
|
# retourne ligne inchangée si swap non effectué
|
|
return row
|
|
|
|
def getData():
|
|
df = pd.read_csv('archive/data.csv')
|
|
|
|
# Défini la date limite pour utiliser les données
|
|
limit_date = '2001-04-01'
|
|
df = df.loc[df['date'] > limit_date, columns]
|
|
|
|
label_encoder = LabelEncoder()
|
|
# Convertir les chaînes de caractères en nombres
|
|
for column in df.select_dtypes(include=['object']).columns:
|
|
# Encode pour chaque colonne de type chaînes de caractères en valeur numérique
|
|
df[column] = label_encoder.fit_transform(df[column])
|
|
|
|
df = df.apply(swap_values, axis=1)
|
|
|
|
# Remplace toutes les valeurs NaN par la valeur médiane associée
|
|
median_values = df.median()
|
|
df.fillna(median_values, inplace=True)
|
|
|
|
imp_features = ['R_age', 'B_age']
|
|
|
|
# On crée un dataframe sans colonne winner car c'est ce qu'on cherche à prédire
|
|
X=df.drop('Winner', axis=1)
|
|
# On crée un dataframe avec seulement la colonne winner pour vérifier les prédictions
|
|
y=df['Winner']
|
|
return X,y
|
|
|