Introduction
Dans Harry Potter, le Choixpeau détermine la « maison » de chaque nouvel arrivant. Nous allons tenter d’émuler le Choixpeau avec un algorithme des k plus proches voisins.
Présentation
Nous allons supposer que les élèves sont caractérisés par leur courage, loyauté, sagesse et malice. Nous disposons d’une liste d’élèves avec toutes leurs caractéristiques : http://kxs.fr/cours/algorithmes- premiere/choixpeau.csv. On donne le code pour importer les données sous forme de tuples :
import pandas
import matplotlib.pyplot as plt
eleve=pandas.read_csv("choixpeau.csv", sep=";")
nom=eleve.loc[:,"Nom"].to_list()
courage=eleve.loc[:,"Courage"].to_list()
loyaute=eleve.loc[:,"Loyauté"].to_list()
sagesse=eleve.loc[:,"Sagesse"].to_list()
malice=eleve.loc[:,"Malice"].to_list()
maison=eleve.loc[:,"Maison"].to_list()
# tab contient tous des tuples de
# la forme (nom, courage, loyaute, sagesse, malice, maison)
tab = []
for i in range(len(nom)):
tab.append((nom[i], courage[i], loyaute[i], sagesse[i], malice[i], maison[i]))
Et nous cherchons à attribuer une maison aux nouveaus élèves suivants :
Nom | Courage | Loyauté | Sagesse | Malice |
---|---|---|---|---|
Hermione | 8 | 6 | 6 | 6 |
Drago | 6 | 6 | 5 | 8 |
Chlo | 7 | 6 | 9 | 6 |
Cédric | 7 | 10 | 5 | 6 |
Travail
- Modifiez le code d’importation ci-dessus pour que les données importées soient sous forme de dictionnaire :
{'Nom': 'Bellatrix', 'Courage': 10, 'Loyauté': 4, 'Sagesse': 9, 'Malice': 9, 'Maison': 'Serpentard'}
-
Créez une fonction
distance(eleve1, eleve2)
qui donne la distance euclidienne entre deux élèves. -
Implémentez en Python l’algorithme des 7 plus proches voisins. L’algorithme doit retourner la maison du nouvel élève.
-
Déterminez alors les maisons affectées par le Choixpeau aux quatre nouveaux élèves.
Source
Cette activité est librement inspirée de l’activité sur le choixpeau de Philippe Boddaert.