Choixpeau
![](img/choixpeau.png)
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
1) 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'}
2) Créez une fonction distance(eleve1, eleve2)
qui donne la distance euclidienne entre deux élèves.
3) Implémentez en Python l'algorithme des 7 plus proches voisins. L'algorithme doit retourner la maison du nouvel élève.
4) 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.