Python Pour l’IA
Pr. EL AZAMI
[Link]@[Link]
Plan du cours
Chapitre 1 : Introduction à Python pour l’IA
Chapitre 2 : NumPy – Calcul scientifique
Chapitre 3 : Pandas – Manipulation de données
Chapitre 4 : Matplotlib et Seaborn : Graphiques et Visualisation
Chapitre 5 : Scikit-learn – Apprentissage automatique
Chapitre 6 : TensorFlow & PyTorch pour l’IA
elazami © 2024-2025 2
Support de cours
Google Classroom:
Python pour IA
Utilisez votre émail institutionnel
Code d’accès:
oi6l4c7y
elazami © 2024-2025 3
Chapitre 1: Introduction Python pour IA
elazami © 2024-2025 4
Introduction à Python pour l’IA
Pourquoi Python pour l’IA ?
• Simplicité : syntaxe claire, proche du langage naturel.
• Richesse : bibliothèques spécialisées (NumPy, Pandas, Scikit-
learn, TensorFlow, PyTorch…).
• Communauté : vaste support, tutos, forums.
• Interopérabilité : fonctionne avec C, C++, Java, R, etc.
elazami © 2024-2025 5
Introduction à Python pour l’IA
Outils indispensables
Il faut maîtriser les bases :
• Gestion des données :
NumPy → calcul matriciel
Pandas → manipulation de tableaux et séries
• Visualisation :
Matplotlib, Seaborn → graphiques et visualisation
• IA & Machine Learning :
→ apprentissage automatique classique
Scikit-learn
TensorFlow, PyTorch → deep learning
elazami © 2024-2025 6
Introduction à Python pour l’IA
Exemple simple : Régression linéaire avec Scikit-learn
import numpy as np
import [Link] as plt
from sklearn.linear_model import LinearRegression
# Données simulées
X = [Link]([[1], [2], [3], [4], [5]])
y = [Link]([1.2, 1.9, 3.2, 3.9, 5.1])
# Création et entraînement du modèle
model = LinearRegression()
[Link](X, y)
# Prédictions
y_pred = [Link](X)
# Visualisation
[Link](X, y, color="blue", label="Données réelles")
[Link](X, y_pred, color="red", label="Droite de régression")
[Link]()
[Link]()
elazami © 2024-2025 7
Introduction à Python pour l’IA
Exemple Deep Learning (PyTorch)
import torch
import [Link] as nn
import [Link] as optim
# Données simulées
X = [Link]([[1.0], [2.0], [3.0], [4.0]])
y = [Link]([[2.0], [4.0], [6.0], [8.0]])
# Modèle simple : une couche linéaire
model = [Link](1, 1)
# Fonction de coût et optimiseur
criterion = [Link]()
optimizer = [Link]([Link](), lr=0.01)
# Entraînement
for epoch in range(500):
y_pred = model(X)
loss = criterion(y_pred, y)
optimizer.zero_grad()
[Link]()
[Link]()
print("Paramètres appris :", list([Link]()))
elazami © 2024-2025 8
Introduction à Python pour l’IA
Parcours d’apprentissage
[Link] de Python (variables, boucles, fonctions, classes).
[Link] et Pandas pour la manipulation des données.
[Link] et Seaborn pour les graphiques et visualisation
[Link]-learn pour l’apprentissage automatique.
[Link] ou TensorFlow pour le deep learning.
[Link]-projets IA :
•Classification d’images
•Analyse de texte
•Prédiction de séries temporelles
elazami © 2024-2025 9
Chapitre 2: NumPy
• NumPy : manipulation de tableaux, calcul matriciel, opérations vectorisées.
elazami © 2024-2025 10
NumPy
NumPy : Le cœur du calcul scientifique en Python
Qu’est-ce que NumPy ?
• NumPy est la base du calcul scientifique en Python.
• Toutes les bibliothèques d’IA modernes (comme TensorFlow, PyTorch, scikit-learn,
pandas) reposent sur NumPy pour :
• Représenter les données sous forme de matrices (ndarrays: N Dimension Array)
• Effectuer des opérations mathématiques vectorisées très rapides
• Gérer les transformations de données avant l’apprentissage d’un modèle
elazami © 2024-2025 11
NumPy
Exemple de bases sur les tableaux
import numpy as np
# Création d'un tableau
a = [Link]([1, 2, 3, 4, 5])
print("Tableau a :", a)
print([Link]) # (5,)
print ([Link]) # 5
# Tableau 2D
b = [Link]([[1, 2], [3, 4], [5, 6]]) # array([[1, 2], [3, 4], [5, 6]])
print("Tableau b :\n", b)
print([Link]) # (3,2)
print([Link]) # 6
Les différences majeures entre les listes proposées par Python et les tableaux de Numpy
sont:
— dans un tableau, tous les éléments doivent être du même type ;
— les tableaux ont une longueur fixe, on ne peut directement ajouter une nouvelle valeur ;
— il y a un gain élevé de performance avec les tableaux.
elazami © 2024-2025 12
NumPy
Fonctions utiles
# Zéros, uns, aléatoires
z = [Link]((2, 3)) # tableau 2x3 rempli de 0
u = [Link]((2, 3)) # tableau rempli de 1
r = [Link](2, 3) # tableau aléatoire, la fonction
[Link](n) qui va
renvoyer un tableau avec n
valeurs comprises entre 0 et 1
# Opérations
a = [Link]([1, 2, 3])
b = [Link]([4, 5, 6])
print(a + b) # addition élément par élément
[5 7 9]
print(a * b) # multiplication élément par élément
[ 4 10 18]
print([Link](b)) # produit scalaire 32
elazami © 2024-2025 13
NumPy
Indexation et slicing
x = [Link]([10, 20, 30, 40, 50])
print(x[0]) # premier élément
print(x[-1]) # dernier élément
print(x[1:4]) # sous-tableau (indices 1 à 3)
Application pratique en IA
Supposons que tu as un vecteur de poids et un vecteur d’entrée d’un neurone :
w = [Link]([0.5, -0.2, 0.8]) # poids
x = [Link]([1.0, 0.4, 0.6]) # entrées
# Calcul sortie = somme pondérée
y = [Link](w, x)
print("Sortie du neurone :", y)
elazami © 2024-2025 14
NumPy
Générer des tableaux
Pour générer un tableau avec des données comprises dans un intervalle, on utilise
principalement deux fonctions:
arange (debut, fin, pas)
et linspace(debut, fin, quantité, dtype=np.float64) .
• La première est analogue à la fonction range.
• La seconde prend trois paramètres:
o le début de l’intervalle (inclus),
o la fin de l’intervalle (non inclus)
o et le nombre de valeurs que l’on veut entre ces deux valeurs.
elazami © 2024-2025 15
NumPy
Générer des tableaux
Par exemple:
[Link](0, 10, 5) # 5 nombres compris entre 0 et 10
Résultat: array([ 0. , 2.5, 5. , 7.5, 10. ])
[Link](1, 5, 0.5) # Nombres de 1 et à 5 (exclu) avec un pas de 0.5
Résultat: array([1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])
• Il y à aussi la fonction [Link](shape, valeur)
→ crée un tableau de la forme donnée rempli de la valeur spécifiée.
import numpy as np [[7 7 7 7]
[7 7 7 7]
A = [Link]((3, 4), 7) [7 7 7 7]]
print(A)
elazami © 2024-2025 16
NumPy
Générer des tableaux
• On trouve la fonction [Link](max, size=n) qui va retourner un tableau avec
n valeurs comprises entre 0 et max (exclu).
[Link](10, size=5)
Résultat: array([2, 8, 3, 7, 8])
• Cette bibliothèque permet aussi de générer des tableaux de nombres suivant une loi
de probabilité:
[Link](loc=10, scale=0.5, size=10) # Tableau de 10 éléments centré sur 10
Résultat: array([ 9.88225653, 10.4609955 , 9.51217795, 10.50906955, 10.52551522,
9.1359539 , 9.60488407, 10.53728603, 9.55069133, 10.4908086 ])
[Link](n=10, p=0.5, size=10)
Résultat: array([2, 7, 5, 5, 6, 6, 4, 7, 7, 3])
elazami © 2024-2025 17
NumPy
Rechercher dans un tableau
• La fonction [Link] prend en paramètre une condition sur les valeurs d’un tableau
et va retourner l’index des éléments qui vérifient la condition.
• La fonction [Link] renvoie les éléments qui vérifient la condition. Ce qui donne:
>>> tableau = [Link](1, 25) # Tableau avec les nombres entiers de 1 à 24
>>>
>>> [Link](tableau % 5 == 0) # L'index des nombres divisibles par 5
(array([4, 9, 14, 19])
>>>
>>> [Link](tableau % 5 == 0, tableau) # Les nombres divisibles par 5
array([5, 10, 15, 20])
• Pour la fonction extract, il faut préciser le nom du tableau en argument
elazami © 2024-2025 18
NumPy
Fonctions biens utiles
• Numpy propose aussi d’autres fonctions, voici une liste non exhaustive:
>>> tableau = [Link]([5, 1, 6, 9])
>>> [Link](tableau) # Trie le tableau
array([1, 5, 6, 9])
>>>
>>> [Link](tableau) # La moyenne
5.25
>>> [Link](tableau) # l’ecart-type
2.8613807855648994
>>> [Link](tableau) # La médiane C'est la valeur centrale d'une série de données
# une fois qu'elles sont classées par ordre croissant ou décroissant.
5.5
>>> np.count_nonzero(tableau) # Le nombre de valeurs différentes de 0
4 elazami © 2024-2025 19
NumPy
Les tableaux de deux dimensions
Numpy permet de créer des tableaux de plusieurs dimensions:
>>> tableau = [Link]([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> tableau
array([[1, 2, 3],
4, 5, 6],
[7, 8, 9]])
Pour parcourir ce tableau, on utilise alors deux boucles for imbriquées.
>>> tableau = [Link]([[1, 2, 3], [4, 5, 6]])
>>> for i in tableau:
... for j in i:
... print(j)
elazami © 2024-2025 20
NumPy
Les tableaux de deux dimensions
Dans le cas où on souhaiterait générer un tableau d’entiers compris entre 0 et n, il
faudra:
• utiliser la fonction [Link] avec le paramètre size,
• size: une liste contenant le nombre de lignes et de colonnes du tableau:
>>> [Link](5, size=[3, 2]) # Nombres compris entre 0 (inclus) et 5 (exclus)
array([[1, 0],
[2, 3],
[0, 4]])
elazami © 2024-2025 21
NumPy
Fonctions spécifiques aux tableaux de plusieurs dimensions
la fonction transpose permet d’échanger les lignes et les colonnes:
>>> tableau = [Link]([[1, 2, 3], [4, 5, 6]])
>>> tableau
array([[1, 2, 3],
[4, 5, 6]])
>>>
>>> [Link](tableau)
array([[1, 4],
[2, 5],
[3, 6]])
elazami © 2024-2025 22
NumPy
• NumPy propose la fonction reshape() qui permet de changer les dimensions d’un
tableau, sans changer les valeurs, si la taille est compatible:
>>> tableau = [Link]([1, 2, 3, 4, 5, 6])
>>> [Link](3, 2) # 3 lignes et 2 colonnes
array([[1, 2],
[3, 4],
[5, 6]])
>>> [Link](2, 3) # 2 lignes et 3 colonnes
array([[1, 2, 3],
[4, 5, 6]])
>>> [Link](3, 3) # Impossible, il faudrait que le tableau
ait une longueur de 9
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
[Link](3, 3)
ValueError: cannot reshape array of size 6 into shape (3,3)
elazami © 2024-2025 23
NumPy
• La méthode ravel() en NumPy permet de transformer un tableau multidimensionnel
(par exemple 2D ou 3D) en un tableau 1D (à une seule dimension) — c’est-à-dire de le
“aplatir”.
>>> tableau = [Link]([[1, 2, 3], [4, 5, 6]])
>>> tableau
array([[1, 2, 3],
[4, 5, 6]])
>>>
>>> [Link](tableau)
>>> array([1, 2, 3, 4, 5, 6])
elazami © 2024-2025 24
NumPy
• La méthode flatten() en NumPy permet de transformer un tableau multidimensionnel
(par exemple 2D ou 3D) en un tableau 1D (à une seule dimension) — c’est-à-dire de le
“aplatir”.
• Si tu veux simplement lire ou traiter les valeurs → ravel() est plus efficace.
• Si tu veux modifier le résultat sans affecter le tableau d’origine → utilise flatten().
A = [Link]([[1, 2], [3, 4]]) A B
B = [Link]() [[99 2] [1 2 3 4]
B[0] = 99 [ 3 4]]
print(A) Ici, A est modifié, car ravel() renvoie une vue (même mémoire).
print(B)
A B
A = [Link]([[1, 2], [3, 4]]) [[1 2] [1 2 3 4]
B = [Link]() [ 3 4]]
B[0] = 99 A ne change pas, car flatten() renvoie une copie.
print(A)
print(B)
elazami © 2024-2025 25
NumPy
Créer un tableau à partir d’un fichier
• La fonction [Link]() permet de charger des données enregistrées sur disque dans
un fichier créé avec [Link]() ou [Link]() (formats .npy ou .npz).
• C’est une fonction essentielle pour restaurer des tableaux NumPy sauvegardés
précédemment.
• Syntaxe de base:
[Link](file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII')
elazami © 2024-2025 26
NumPy
Paramètres principaux de [Link]():
Paramètre Type Description
file str ou file-like Nom du fichier à charger (.npy ou .npz).
Permet de charger le fichier en mémoire partagée (utile
mmap_mode str ou None
pour les gros fichiers). Exemples : 'r', 'r+', 'w+', 'c'.
Si True, autorise le chargement d’objets Python enregistrés
allow_pickle bool
avec pickle. Par défaut False pour des raisons de sécurité.
fix_imports bool Utilisé pour compatibilité entre versions Python 2 et 3.
encoding str Encodage utilisé pour les chaînes dans les fichiers Python 2.
elazami © 2024-2025 27
NumPy
Cas d’utilisation 1 : Charger un tableau .npy Cas d’utilisation 2 : Charger plusieurs tableaux .npz
Exemple : Un fichier .npz est une archive compressée
contenant plusieurs tableaux.
import numpy as np
import numpy as np
# Sauvegarde d’un tableau
x = [Link]([[1, 2, 3], [4, 5, 6]]) # Sauvegarde de plusieurs tableaux
[Link]('[Link]', x) a = [Link](5)
b = [Link](0, 1, 5)
# Chargement du tableau [Link]('multi_data.npz', array1=a, array2=b)
[[1 2 3]
data = [Link]('[Link]')
print(data) [4 5 6]] # Chargement
data = [Link]('multi_data.npz')
print(data['array1']) [0 1 2 3 4]
print(data['array2']) [0. 0.25 0.5 0.75 1. ]
elazami © 2024-2025 28
NumPy
Cas d’utilisation 3 : Chargement avec mémoire mappée (grands fichiers)
Si un tableau est trop grand pour la RAM, on peut ne pas tout charger en mémoire :
arr = [Link]('big_data.npy', mmap_mode='r')
print([Link])
• Cela crée une vue sur le fichier sans le charger entièrement, permettant d’accéder
partiellement aux données (utile pour le traitement de gros volumes).
Remarques de sécurité
• allow_pickle=False par défaut → empêche l’exécution de code malveillant lors du
chargement.
• Si tu as enregistré des objets Python non-NumPy (listes, dictionnaires, etc.), il faut :
[Link]('[Link]', allow_pickle=True)
elazami © 2024-2025 29
NumPy: Exercice
On veut manipuler des données numériques simulées à l’aide de NumPy.
Réalisez les étapes suivantes :
1. Importation et création de tableaux 4. Statistiques et agrégations
– Importez la bibliothèque numpy sous le nom np. Calculez :
La moyenne, le minimum et le
– Créez un tableau A contenant les entiers de 0 à 11 maximum de A.
inclus. La somme par ligne et par colonne.
– Transformez-le en matrice de 3 lignes et 4 colonnes. 5. Génération de nombres aléatoires
2. Indexation et slicing Créez un tableau C de taille (3,4) contenant
– Affichez la 2ᵉ ligne de A. des nombres aléatoires suivant une loi
– Affichez la 3ᵉ colonne de A. normale de moyenne 10 et écart-type 2.
Calculez la moyenne et l’écart-type de C.
– Affichez l’élément situé à la 2ᵉ ligne et 4ᵉ colonne. 6. Reshape et ravel
3. Opérations élémentaires Transformez A en une matrice de
– Créez un tableau B de même taille rempli de 2. dimension (4,3).
– Calculez : Aplatissez-la ensuite en un tableau 1D.
• A+B 7. Filtrage
Affichez tous les éléments de A supérieurs
• A*B à 5.
• A ** 2 (élévation au carré)
elazami © 2024-2025 30
NumPy: Solution # 4 Statistiques
print("Moyenne de A :", [Link]())
import numpy as np print("Minimum :", [Link]())
print("Maximum :", [Link]())
# 1 Création du tableau print("Somme par ligne :", [Link](axis=1))
A = [Link](12) # de 0 à 11 print("Somme par colonne :", [Link](axis=0))
A = [Link](3, 4) # 3 lignes, 4 colonnes
print("A =\n", A) # 5 Nombres aléatoires
C = [Link](loc=10, scale=2, size=(3, 4))
# 2 Indexation et slicing print("\nC =\n", C)
print("Deuxième ligne :", A[1]) # ligne d'indice 1 print("Moyenne de C :", [Link]())
print("Troisième colonne :", A[:, 2]) # colonne d'indice 2 print("Écart-type de C :", [Link]())
print("Élément (2,4) :", A[1, 3]) # ligne 2, colonne 4
# 6 Reshape et ravel
# 3 Opérations élémentaires A_reshaped = [Link](4, 3)
B = [Link]((3, 4), 2) # matrice remplie de 2 print("\nA reshape(4,3) =\n", A_reshaped)
print("A + B =\n", A + B)
print("A * B =\n", A * B) A_flat = A_reshaped.ravel()
print("A ** 2 =\n", A ** 2) print("A aplati (ravel) =", A_flat)
# 7 Filtrage
print("Éléments > 5 :", A[A > 5])
elazami © 2024-2025 31