Nous allons travailler sur les données contenues dans le fichier JoueursTop14.csv.
Analyser le fichier JoueurTop14.csv avec notepad++ par exemple.
Ecrire une fonction liste_joueurs
de paramètre un fichier csv
et qui renvoie une liste de dictionnaires contenant les données 'Poste', 'Taille (en cm)' et 'Poids (en kg)' du fichier.
Ecrire une fonction postes
qui a pour paramètre la liste des joueurs et qui renvoie un dictionnaire dont les clés sont les postes et les valeurs 0, plus tard cela correspondra au nombre de postes.
Ecrire une fonction liste_joueurs_par_rapport
qui a les paramètres taille
, poids
, liste des joueurs
qui renvoie une liste de dictionnaires ayant deux clés le poste et la distance par rapport aux 'taille' et 'poids' saisis.
Ecrire une fonction KNN
qui a les paramètres k le nombre de voisins
, taille
, poids
, liste des joueurs
qui renvoie le dictionnaire des postes mis à jour.
Ecrire une fonction prediction
qui a les paramètres taille
, poids
, k le nombre de voisins
, liste des joueurs
, qui renvoie une prédiction sur le 'Poste' le plus adapté...
Voici le nuage de points de cette série réalisée avec le module matplotlib
Il faut être dans un repère orthonormé pour utiliser la distance euclidienne
Voici le code :
import matplotlib.pyplot as plt
def representation(data=joueurs):
for i in range(len(data)):
lacouleur="tab:"
if(data[i]['Poste']=="Talonneur"):
lacouleur+="blue"
lemarker="x"
label="Avant"
elif(data[i]['Poste']=="Pilier"):
lacouleur+="red"
lemarker="+"
label="Mêlée"
elif(data[i]['Poste']=="2ème ligne"):
lacouleur+="red"
lemarker="+"
label="2ème ligne"
elif(data[i]['Poste']=="3ème ligne"):
lacouleur+="green"
lemarker="1"
label="3ème ligne"
elif(data[i]['Poste']=="Mêlée"):
lacouleur+="purple"
lemarker="."
label="Mêlée"
elif(data[i]['Poste']=="Ouverture"):
lacouleur+="purple"
lemarker="."
label="Ouverture"
elif(data[i]['Poste']=="Centre"):
lacouleur+="brown"
lemarker="*"
label="Centre"
elif(data[i]['Poste']=="Ailier"):
lacouleur+="blue"
lemarker="*"
label="Ailier"
else :
lacouleur+="orange"
lemarker="^"
label="Arrière"
plt.plot(int(data[i]['Poids']), int(data[i]['Taille']), color=lacouleur,marker=lemarker,label=label)
plt.xlabel("Poids (en kg)")
plt.ylabel("Taille (en cm)")
plt.axis('equal') #pour avoir un repère orthonormé
plt.show()
representation()