Logo de kxs.frCours d'informatique pour le lycée et la prépa

Choixpeau

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.