ajout cours, fichiers données pokemons, et python

This commit is contained in:
2024-03-27 18:05:50 +01:00
parent 5ccf211758
commit 94dd0b4a7a
5 changed files with 158 additions and 1 deletions

View File

@@ -27,4 +27,12 @@ $$
- Distance de Hamming
Ici, il s'agit de compter le nombre de bits qui diffèrent entre deux mots binaires.
Exemple : si a = 0001 et b = 1101, alors d(a,b) = 2.
Exemple : si a = 0001 et b = 1101, alors d(a,b) = 2.
------------
Auteur : Florian Mathieu
Licence CC BY NC
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas dUtilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.

15
knn/EXERCICES.md Normal file
View File

@@ -0,0 +1,15 @@
### Exercices
1. **Écrire une fonction `calculer_distance`** qui prend en entrée les caractéristiques de deux Pokémon et retourne la distance euclidienne entre eux.
2. **Tester la fonction** avec des exemples simples pour vérifier son bon fonctionnement
Conseil : n'oubliez pas d'importer la bibliothèque `pandas`qui permet de travailler avec des fichiers csv (le cours se trouve [ici](../données_en_table))
Le fichier [pokemons.csv](pokemons.csv) qui va avec.
```python
import pandas as pd
pokemons = pd.read_csv('chemin/vers/pokemons.csv')
```

77
knn/IMPLEMENTATION.md Normal file
View File

@@ -0,0 +1,77 @@
### Implémentation de l'algorithme des K plus proches voisins.
On pourrait essayer de penser à un algorithme simple pour pouvoir implémenter l'algorithme knn en python:
- Il nous faut une liste d'échantillons de taille *n*
- La donnée que l'on veut classer, appellons là *mystere*
- Un entier *k* plus petit que *n*
- La règle de calcul des distances
Il nous faudra donc répéter ces trois étapes suivantes pour faire fonctionner l'algorithme:
1. Trier les échantillons selon une distance croissante avec *mystere*
2. Un tableau contenant les *k* premiers voisins de la liste triée
3. Renvoyer ce tableau.
---------------
### Et en langage Python ?
Nous allons utiliser la bibliothèque `Matplotlib`
#### Pourquoi utiliser`matplotlib` ?
- **Visualiser les données** : Avant de plonger dans des algorithmes complexes, il est essentiel de comprendre les données avec lesquelles on travaille. Un bon graphique peut révéler des tendances, des anomalies, des clusters ou des relations entre les variables bien mieux qu'une simple inspection des chiffres.
- **Communiquer des résultats** : Les graphiques aident à communiquer les résultats d'une analyse de manière efficace et intuitive, que ce soit entre scientifiques ou pour présenter à un public non spécialiste.
### Premiers Pas avec `matplotlib`
Pour commencer, il faut installer `matplotlib` si ce n'est pas déjà fait. Cela se fait généralement via pip :
```python
pip install -- update --proxy = 172.16.0.253:3128 matplotlib
```
Ensuite, pour utiliser `matplotlib`, on commence par importer le module `pyplot`, souvent sous l'alias `plt` :
```python
import matplotlib.pyplot as plt
```
### Exemple de Base
Imaginons que l'on souhaite représenter les statistiques d'attaque et de défense de quelques Pokémon.
```python
import matplotlib.pyplot as plt
# Supposons que ces listes contiennent les statistiques d'attaque et de défense de quelques Pokémon
attaques = [55, 75, 150, 45]
defenses = [45, 60, 50, 65]
noms = ['Pikachu', 'Bulbasaur', 'Charizard', 'Squirtle']
plt.figure(figsize=(10, 5)) # Définit la taille de la figure
plt.scatter(attaques, defenses, color='red') # Crée un nuage de points avec les statistiques d'attaque et de défense
# Ajoute des titres et des étiquettes
plt.title('Attaque vs Défense des Pokémon')
plt.xlabel('Attaque')
plt.ylabel('Défense')
# Ajoute des annotations pour chaque point
for i, nom in enumerate(noms):
plt.annotate(nom, (attaques[i], defenses[i]))
plt.grid(True) # Ajoute une grille pour une meilleure lisibilité
plt.show() # Affiche le graphique
```
Ce code génère un graphique en nuage de points où chaque point représente un Pokémon, avec son niveau d'attaque sur l'axe des x et son niveau de défense sur l'axe des y. Les annotations permettent d'identifier chaque Pokémon sur le graphique.
--------
Auteur : Florian Mathieu
Licence CC BY NC
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas dUtilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.

22
knn/poke.py Normal file
View File

@@ -0,0 +1,22 @@
import matplotlib.pyplot as plt
# On initialise des tableaux contenants des statistiques de Pokemon
attaques = [55, 75, 150, 45]
defenses = [45, 60, 50, 65]
noms = ['Pikachu', 'Bulbizarre', 'Salameche', 'Carapuce']
plt.figure(figsize=(10, 5)) # Définit la taille de la figure
plt.scatter(attaques, defenses, color='red') # Crée un nuage de points avec les statistiques d'attaque et de défense
# Ajoute des titres et des étiquettes
plt.title('Attaque vs Défense des Pokémon')
plt.xlabel('Attaque')
plt.ylabel('Défense')
# Ajoute des annotations pour chaque point
for i, nom in enumerate(noms):
plt.annotate(nom, (attaques[i], defenses[i]))
plt.grid(True) # Ajoute une grille pour une meilleure lisibilité
plt.show() # Affiche le graphique

35
knn/pokemons.csv Normal file
View File

@@ -0,0 +1,35 @@
nom,points de vie,Pokemons de type Eau,Pokemons de type Psy
Ecayon,49,49,
Tiplouf,53,51,
Carabaffe,59,63,
Prinplouf,64,66,
Gobou,50,70,
Gamblast,71,73,
Mateloutre,75,75,
Tarpaud,90,75,
Crocrodil,65,80,
Phione,80,80,
Rosabyss,55,84,
Bargantua,70,92,
Poissoroy,80,92,
Clamiral,95,100,
Octillery,75,105,
Aligatueur,85,105,
Nucleos,45,,30
Deoxys,50,,70
Deoxys,50,,95
Deoxys,50,,150
Deoxys,50,,180
Spoink,60,,25
Mesmerella,60,,45
Siderella,70,,55
Eoko,75,,50
Crefadet,75,,125
Munna,76,,25
Groret,80,,45
Okeoke,95,,23
Mew,100,,100
Mewtwo,106,,110
Mewtwo,106,,150
Mewtwo,106,,190
Symbios,110,,65
1 nom points de vie Pokemons de type Eau Pokemons de type Psy
2 Ecayon 49 49
3 Tiplouf 53 51
4 Carabaffe 59 63
5 Prinplouf 64 66
6 Gobou 50 70
7 Gamblast 71 73
8 Mateloutre 75 75
9 Tarpaud 90 75
10 Crocrodil 65 80
11 Phione 80 80
12 Rosabyss 55 84
13 Bargantua 70 92
14 Poissoroy 80 92
15 Clamiral 95 100
16 Octillery 75 105
17 Aligatueur 85 105
18 Nucleos 45 30
19 Deoxys 50 70
20 Deoxys 50 95
21 Deoxys 50 150
22 Deoxys 50 180
23 Spoink 60 25
24 Mesmerella 60 45
25 Siderella 70 55
26 Eoko 75 50
27 Crefadet 75 125
28 Munna 76 25
29 Groret 80 45
30 Okeoke 95 23
31 Mew 100 100
32 Mewtwo 106 110
33 Mewtwo 106 150
34 Mewtwo 106 190
35 Symbios 110 65