{"id":3184,"date":"2026-05-17T17:16:49","date_gmt":"2026-05-17T15:16:49","guid":{"rendered":"https:\/\/labodemaths.fr\/WordPress3\/?p=3184"},"modified":"2026-05-21T16:49:15","modified_gmt":"2026-05-21T14:49:15","slug":"nsi-knn-et-pokemon","status":"publish","type":"post","link":"https:\/\/labodemaths.fr\/WordPress3\/nsi-knn-et-pokemon\/","title":{"rendered":"NSI , KNN et Pokemons"},"content":{"rendered":"\n<h2>1. L\u00e9gendaires ou pas ? <\/h2>\n\n\n\n<p>T\u00e9l\u00e9charger le fichier csv ci-dessous.<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/qkzk\/data_colab\/blob\/master\/nsi\/algo\/knn\/pokemon\/pokemon_small.csv\">https:\/\/github.com\/qkzk\/data_colab\/blob\/master\/nsi\/algo\/knn\/pokemon\/pokemon_small.csv<\/a><\/p>\n\n\n\n<p>L&rsquo;ouvrir avec un tableur et \u00e9tudier les donn\u00e9es pour d\u00e9terminer quelles caract\u00e9ristiques permettent de diff\u00e9rencier les pok\u00e9mons des pok\u00e9mons l\u00e9gendaires.<\/p>\n\n\n\n<h2>2. Mise en place d&rsquo;un KNN<\/h2>\n\n\n\n<p>Mettre le fichier pokemon_small dans un r\u00e9pertoire knn_pokemons<\/p>\n\n\n\n<p>Ajouter un fichier python avec le code suivant<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import csv\npokemons=&#91;]\nwith open('pokemon_small.csv', newline='') as csvfile:\n    spamreader = csv.reader(csvfile)\n    for row in spamreader:\n        pokemons.append(row)\n    \n\ndef transformation_liste(pokemons):\n    '''\n    transforme la liste des pokemons\n    en une liste de dictionnaires\n    &gt;&gt;&gt;transformation_liste(pokemons)&#91;0]\n    {'name': 'Magmar', 'attack': '95', 'base_egg_steps': '6400',\n    'base_happiness': '70', 'capture_rate': '45',\n    'classfication': 'Spitfire Pok\u00e9mon', 'defense': '57',\n    'experience_growth': '1000000', 'height_m': '1.3', 'hp': '65',\n    'pokedex_number': '126', 'sp_attack': '100', 'sp_defense': '85',\n    'speed': '93', 'type1': 'fire', 'type2': '', 'weight_kg': '44.5',\n    'generation': '1', 'is_legendary': '0'}\n    '''\n    \n        \ndef distance(poke1,poke2):\n    pass\n\n\n<\/code><\/pre>\n\n\n\n<p>Compl\u00e9ter la fonction transformation pour qu&rsquo;elle r\u00e9ponde \u00e0 sa docstring.<\/p>\n\n\n\n<p>Mettre en place votre fonction distance()<\/p>\n\n\n\n<p>Reprendre la fonction plus_proches_voisins(fleur,liste_fleurs): du tp pr\u00e9c\u00e9dent et l&rsquo;adapter.\u00e0 votre tp pokemon<\/p>\n\n\n\n<p>Tester votre tp avec davantage de pok\u00e9mons :<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/qkzk\/data_colab\/blob\/master\/nsi\/algo\/knn\/pokemon\/pokemon_suspect2.csv\">https:\/\/github.com\/qkzk\/data_colab\/blob\/master\/nsi\/algo\/knn\/pokemon\/pokemon_suspect2.csv<\/a><\/p>\n\n\n\n<h2>proposition de correction<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>import csv\r\npokemons=&#91;]\r\nwith open('pokemon_small.csv', newline='') as csvfile:\r\n    spamreader = csv.reader(csvfile)\r\n    for row in spamreader:\r\n        pokemons.append(row)\r\n    \r\n\r\ndef transformation_liste(pokemons):\r\n    '''\r\n    transforme la liste des pokemons\r\n    en une liste de dictionnaires\r\n    >>>transformation_liste(pokemons)&#91;0]\r\n    {'name': 'Magmar', 'attack': '95', 'base_egg_steps': '6400',\r\n    'base_happiness': '70', 'capture_rate': '45',\r\n    'classfication': 'Spitfire Pok\u00e9mon', 'defense': '57',\r\n    'experience_growth': '1000000', 'height_m': '1.3', 'hp': '65',\r\n    'pokedex_number': '126', 'sp_attack': '100', 'sp_defense': '85',\r\n    'speed': '93', 'type1': 'fire', 'type2': '', 'weight_kg': '44.5',\r\n    'generation': '1', 'is_legendary': '0'}\r\n    '''\r\n    retour =&#91;]\r\n    for i in range(1,len(pokemons)):\r\n        mon_poke=pokemons&#91;i]\r\n        dico_poke={}\r\n        for j in range(len(mon_poke)):\r\n            cle=pokemons&#91;0]&#91;j]\r\n            val=mon_poke&#91;j]\r\n            dico_poke&#91;cle]=val\r\n        retour.append(dico_poke)\r\n    return retour\r\n\r\npokemons=transformation_liste(pokemons)\r\npoke1=pokemons&#91;18]\r\npoke2=pokemons&#91;19]\r\n           \r\ndef distance(poke1,poke2):\r\n    '''\r\n    Renvoie la distance euclidienne entre deux\r\n    pokemons en consid\u00e9rant la\r\n    base_egg_steps et la base_happiness\r\n    '''\r\n    x1=int(poke1&#91;'base_egg_steps'])\r\n    y1=int(poke1&#91;'base_happiness'])\r\n    x2=int(poke2&#91;'base_egg_steps'])\r\n    y2=int(poke2&#91;'base_happiness'])\r\n    d=((x1-x2)**2+(y1-y2)**2)**0.5\r\n    return d\r\n\r\ndef plus_proches_voisins(poke,pokemons):\r\n    '''\r\n    renvoie la liste des plus proches\r\n    voisins par distance croissante\r\n    '''\r\n    liste=pokemons.copy()\r\n    retour=&#91;]\r\n    # tant que retour n'a pas la taille voulue\r\n    while len(retour)!=len(pokemons):\r\n    # on cherche le poke le plus proche\r\n        d_min=distance(poke,liste&#91;0])\r\n        poke_min=liste&#91;0]\r\n        for f in liste:\r\n            if distance(poke,f)&lt;d_min:\r\n                d_min=distance(poke,f)\r\n                poke_min=f\r\n    # on l'ajoute au retour\r\n        retour.append(poke_min)\r\n    # on l'enleve de la liste\r\n        liste.remove(poke_min)\r\n    # on renvoie ce qu'il faut\r\n    return retour\r\n    \r\ndef k_plus_proches_voisins(k,poke,pokemons):\r\n    '''\r\n    renvoie la liste des k plus proches\r\n    voisins\r\n    '''\r\n    liste_plus_proches_voisins=plus_proches_voisins(poke,pokemons)\r\n    return liste_plus_proches_voisins&#91;:k]\r\n\r\ndef pourcentages_legendaires_k_plus_proches_voisins(k,poke1,pokemons):\r\n    '''\r\n    >>>pourcentages_legendaires_k_plus_proches_voisins(1,poke1,pokemons)\r\n    1\r\n    >>>pourcentages_legendaires_k_plus_proches_voisins(4,poke1,pokemons)\r\n    0.5\r\n    >>>pourcentages_legendaires_k_plus_proches_voisins(5,poke1,pokemons)\r\n    0.4\r\n    '''\r\n    pass\r\n\n    \n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>1. L\u00e9gendaires ou pas ? T\u00e9l\u00e9charger le fichier csv ci-dessous. https:\/\/github.com\/qkzk\/data_colab\/blob\/master\/nsi\/algo\/knn\/pokemon\/pokemon_small.csv L&rsquo;ouvrir avec un tableur&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/labodemaths.fr\/WordPress3\/nsi-knn-et-pokemon\/\">Read the post<span class=\"screen-reader-text\">NSI , KNN et Pokemons<\/span><\/a><\/div>\n","protected":false},"author":2,"featured_media":3185,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[57],"tags":[],"_links":{"self":[{"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/posts\/3184"}],"collection":[{"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/comments?post=3184"}],"version-history":[{"count":6,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/posts\/3184\/revisions"}],"predecessor-version":[{"id":3193,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/posts\/3184\/revisions\/3193"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/media\/3185"}],"wp:attachment":[{"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/media?parent=3184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/categories?post=3184"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/tags?post=3184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}