Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 31

Using Python's Built-in Modules

Recommended resources

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.

Cet extrait de code illustre la convention de placer toutes les instructions `import` en haut du fichier. Cela rend le code plus lisible en indiquant clairement les dépendances du script dès le départ.

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 fonctions sqrt et la constante pi dans 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 module numpy et on lui donne un alias plus court, np. On l'utilisera ensuite comme np.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 de x.
  • 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 de x. Utilisé dans de nombreuses fonctions de coût.
  • math.pow(x, y): Calcule .
  • math.floor(x) et math.ceil(x): Arrondissent x à l'entier inférieur ou supérieur le plus proche.
  • math.pi et math.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.

Ce tableau résume la syntaxe et l'usage des fonctions de base du module `random` comme `random()`, `randint()`, et `randrange()`.

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 :

  1. Prend en entrée deux points, où chaque point est un tuple de deux nombres (par exemple, (x1, y1)).
  2. Utilise le module math pour calculer la distance euclidienne : .
  3. 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 :

  1. Crée une liste représentant un jeu de données, par exemple donnees = list(range(1, 21)) (nombres de 1 à 20).
  2. Utilise random.seed(42) pour rendre le mélange reproductible.
  3. Mélange la liste donnees en utilisant random.shuffle().
  4. Crée une liste train_set contenant les premiers 80% des données mélangées.
  5. Crée une liste test_set contenant les 20% restants.
  6. 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_module et de placer les imports en haut du fichier.
  • Le module math fournit des fonctions mathématiques essentielles.
  • Le module random est 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.