Bonjour ! Dans la leçon précédente, nous avons appris à rendre nos programmes plus robustes en gérant les erreurs d'exécution avec les blocs try...except. Cette compétence est cruciale, mais un programmeur efficace ne se contente pas de gérer les erreurs ; il sait aussi s'appuyer sur le travail des autres pour construire plus vite et mieux. C'est là que les modules entrent en jeu.
Cette leçon vous ouvre les portes de la vaste bibliothèque standard de Python. Nous allons apprendre à importer et utiliser des fonctions de modules standards, en nous concentrant sur deux piliers de la programmation scientifique et du machine learning : math et random. Comprendre comment exploiter ces bibliothèques de code pré-écrit est une étape fondamentale qui décuplera votre efficacité et vous donnera accès à des outils puissants, sans avoir à réinventer la roue.
1. Qu'est-ce qu'un Module ?
Imaginez que vous construisiez une maison. Vous pourriez fabriquer chaque brique, chaque vis et chaque tuile vous-même, mais ce serait incroyablement long et fastidieux. Il est bien plus efficace d'utiliser des briques, des vis et des tuiles fabriquées par des spécialistes. En Python, les modules sont ces composants préfabriqués.
Un module est simplement un fichier Python (avec une extension .py) qui contient des fonctions, des classes et des variables que vous pouvez utiliser dans vos propres programmes. Python est fourni avec une vaste collection de modules appelée la Bibliothèque Standard, qui offre des outils pour une multitude de tâches.
Pour utiliser un module, nous devons l'importer. La meilleure pratique consiste à placer toutes vos instructions import au début de votre script.

2. Les Différentes Façons d'Importer
Il existe plusieurs syntaxes pour importer des modules, chacune avec ses avantages et ses inconvénients. Comprenons-les en utilisant le module math.
30. Modular Programming and Modules | Python Tutorial
Cet article explique les différentes manières d'importer des modules et les bonnes pratiques associées.
Commencez par la section "Importing Modules", qui présente la syntaxe de base import math et l'accès aux fonctions avec la notation math.fonction(). Lisez ensuite la partie qui explique comment importer des objets spécifiques avec from math import sin, pi. Enfin, comprenez pourquoi l'importation "joker" (from math import *) est déconseillée en lisant le passage qui commence par "It's not recommended". Terminez par la section sur le renommage avec as, une pratique très courante. Lisez depuis "Another way to shrink".
Pour résumer, voici les méthodes d'importation que vous rencontrerez :
-
import math: C'est la méthode la plus sûre et la plus recommandée. Elle importe tout le module et vous devez utiliser le nom du module comme préfixe pour accéder à ses fonctions (ex:math.sqrt(16)). Cela évite les conflits de noms. -
from math import sqrt, pi: Importe uniquement les fonctionssqrtet la constantepidans votre espace de noms actuel. Vous pouvez alors les appeler directement (ex:sqrt(16)). C'est pratique, mais peut prêter à confusion si vous importez des fonctions du même nom depuis différents modules. -
import numpy as np: C'est une pratique extrêmement courante, surtout dans le domaine du machine learning. On importe le modulenumpyet on lui donne un alias plus court,np. On l'utilisera ensuite commenp.array(). -
from math import *: À éviter. Cette méthode importe toutes les fonctions et variables du module dans votre espace de noms, ce qui peut écraser vos propres variables sans avertissement et rendre le code très difficile à lire (d'où vient cette fonction ?).
Explorer le contenu d'un module
Comment savoir ce qu'un module contient ? La fonction intégrée dir() est votre amie.
import math
# Affiche une liste de tous les noms (fonctions, constantes, etc.) dans le module math
print(dir(math))
Cela vous donnera une liste complète, vous permettant d'explorer les capacités d'un module.
3. Le Module math
Étant donné votre formation universitaire en mathématiques, le module math vous semblera familier. Il fournit des fonctions pour les opérations mathématiques de base.
Python Tutorial for Beginners 9: Import Modules and Exploring The Standard Library
Corey Schafer, un excellent pédagogue, présente ici très clairement l'utilité du module math.
Regardez ce court segment sur le module math. Il montre comment l'utiliser pour des calculs simples comme la conversion de degrés en radians et le calcul du sinus.
Voici quelques fonctions du module math qui sont particulièrement pertinentes pour le machine learning :
math.sqrt(x): Calcule la racine carrée dex.math.exp(x): Calcule , la fonction exponentielle. Fondamentale dans les fonctions d'activation comme le softmax ou la sigmoïde.math.log(x): Calcule le logarithme naturel dex. Utilisé dans de nombreuses fonctions de coût.math.pow(x, y): Calcule .math.floor(x)etmath.ceil(x): Arrondissentxà l'entier inférieur ou supérieur le plus proche.math.pietmath.e: Constantes pour et .
import math
# Calcul de l'activation sigmoïde pour une valeur x
# C'est une fonction que vous retrouverez en régression logistique et dans les réseaux de neurones.
def sigmoid(x):
return 1 / (1 + math.exp(-x))
valeur = 0.5
activation = sigmoid(valeur)
print(f"La valeur de la fonction sigmoïde pour x={valeur} est : {activation}")
4. Le Module random
Le hasard joue un rôle central en machine learning : pour initialiser les poids d'un réseau de neurones, pour mélanger les données avant l'entraînement, ou pour sélectionner des échantillons aléatoires. Le module random est votre outil pour toutes ces tâches.
Hasard et Reproductibilité : la Graine (Seed)
Un point crucial à comprendre est que les ordinateurs génèrent des nombres pseudo-aléatoires. Ils suivent un algorithme déterministe qui produit une séquence de nombres qui semble aléatoire. Cet algorithme commence avec une valeur initiale appelée graine (seed). Si vous utilisez la même graine, vous obtiendrez toujours la même séquence de nombres "aléatoires".
How to Generate Random Numbers in Python
Cet article de Machine Learning Mastery explique très bien le concept de pseudo-aléatoire et l'importance de la graine, avant de détailler les fonctions clés du module random.
Lisez d'abord la section sur les générateurs de nombres pseudo-aléatoires pour bien saisir le concept de "seed". Ensuite, dans la section 2, parcourez les sous-sections qui expliquent comment utiliser les fonctions les plus importantes : seed(), random(), randint(), choice(), sample() et shuffle().
Pourquoi est-ce si important ? En machine learning, fixer la graine (random.seed(42) par exemple) garantit que vos expériences sont reproductibles. N'importe qui pourra relancer votre code et obtenir exactement les mêmes résultats, ce qui est fondamental pour la recherche et le débogage.
Fonctions clés du module random
Le module random offre une panoplie de fonctions.

Pour une démonstration pratique et complète, la vidéo suivante est excellente.
Python Tutorial: Generate Random Numbers and Data Using the random Module
Corey Schafer propose ici un tour d'horizon très pratique du module random, avec des exemples pertinents.
randint() : Pour générer des entiers, comme simuler un lancer de dé. choice() : Pour choisir un seul élément au hasard dans une liste. choices() : Pour choisir plusieurs éléments (avec remise possible) et même ajouter des poids pour biaiser la sélection (très utile !). shuffle() : Pour mélanger une liste. Attention, cette fonction modifie la liste en place. sample() : Pour obtenir un échantillon de plusieurs éléments uniques (sans remise). C'est ce que vous utiliserez pour créer des sous-ensembles de données.
5. Exercices Pratiques
Mettons ces nouvelles connaissances en action.
Exercice 1 : Calcul de la Distance Euclidienne
La distance euclidienne entre deux points dans un plan est une mesure fondamentale, utilisée par exemple dans l'algorithme des K plus proches voisins (K-Nearest Neighbors).
Créez une fonction calculer_distance(point1, point2) qui :
- Prend en entrée deux points, où chaque point est un tuple de deux nombres (par exemple,
(x1, y1)). - Utilise le module
mathpour calculer la distance euclidienne : . - Retourne la distance calculée.
Testez votre fonction avec les points (1, 2) et (4, 6). Le résultat devrait être 5.0.
Exercice 2 : Simulation d'un Partage de Données (Train/Test Split)
En machine learning, on sépare presque toujours nos données en un ensemble d'entraînement (train set) et un ensemble de test (test set).
Écrivez un script qui :
- Crée une liste représentant un jeu de données, par exemple
donnees = list(range(1, 21))(nombres de 1 à 20). - Utilise
random.seed(42)pour rendre le mélange reproductible. - Mélange la liste
donneesen utilisantrandom.shuffle(). - Crée une liste
train_setcontenant les premiers 80% des données mélangées. - Crée une liste
test_setcontenant les 20% restants. - Affiche les deux ensembles.
Solutions
Solution de l'exercice 1 :
import math
def calculer_distance(point1, point2):
"""Calcule la distance euclidienne entre deux points."""
x1, y1 = point1
x2, y2 = point2
# math.pow(base, exposant) calcule base à la puissance exposant
distance = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2))
return distance
# Test de la fonction
p1 = (1, 2)
p2 = (4, 6)
dist = calculer_distance(p1, p2)
print(f"La distance entre {p1} et {p2} est : {dist}")
Solution de l'exercice 2 :
import random
# 1. Créer le jeu de données
donnees = list(range(1, 21))
print(f"Données originales : {donnees}")
# 2. Fixer la graine pour la reproductibilité
random.seed(42)
# 3. Mélanger les données en place
random.shuffle(donnees)
print(f"Données mélangées : {donnees}")
# 4. & 5. Partager les données
taille_split = int(len(donnees) * 0.8) # 80% pour l'entraînement
train_set = donnees[:taille_split]
test_set = donnees[taille_split:]
# 6. Afficher les résultats
print(f"\nEnsemble d'entraînement ({len(train_set)} éléments): {train_set}")
print(f"Ensemble de test ({len(test_set)} éléments): {test_set}")
Conclusion
Félicitations ! Vous venez de débloquer une compétence essentielle en Python. Savoir importer et utiliser des modules vous fait passer du statut de quelqu'un qui écrit des scripts simples à celui de quelqu'un qui peut construire des applications complexes en s'appuyant sur l'écosystème Python.
Points clés à retenir :
- Les modules sont des bibliothèques de code réutilisable.
- La Bibliothèque Standard de Python est incluse par défaut et est très riche.
- La meilleure pratique est d'importer les modules avec
import nom_moduleet de placer les imports en haut du fichier. - Le module
mathfournit des fonctions mathématiques essentielles. - Le module
randomest crucial pour la simulation, le mélange de données et l'échantillonnage, des tâches omniprésentes en machine learning. - Utilisez
random.seed()pour garantir la reproductibilité de vos expériences.
Dans notre prochaine leçon, nous allons passer à la vitesse supérieure. Bien que les listes Python et le module math soient utiles, ils ne sont pas optimisés pour les calculs numériques à grande échelle. Nous allons donc introduire NumPy, la bibliothèque fondamentale pour le calcul scientifique en Python. Vous verrez comment les tableaux NumPy remplacent les listes pour effectuer des opérations mathématiques sur de grands ensembles de données de manière incroyablement efficace.