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

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