Supposez à présent que vous ayez besoin de calculer la racine carrée d’un nombre dans le cadre d’un de vos notebooks. Il n’existe pas de fonction racine carrée native en Python. Vous pourriez naturellement l’écrire vous-même, mais hey, il y a sûrement eu un tas de personnes qui se sont déjà posé la même question. Et devinez quoi ? L’un d’eux a déjà écrit la fonction et l’a enregistrée dans un module !
Un module en Python
Un module est un fichier Python contenant un ensemble de fonctions, de classes et de variables prédéfinies et fonctionnelles, que vous pouvez utiliser comme bon vous semble dans votre code !
Par exemple, si vous travaillez sur une problématique faisant intervenir de la géométrie, vous pourriez avoir besoin de :
classes :
carré – défini par la longueur de son côté,
triangle – défini par la longueur de ses trois côtés,
cercle – défini par son rayon,
etc. ;
variables :
pi : constante indispensable pour calculer l’aire d’un cercle, égale à 3,1415...,
phi : constante représentant le nombre d’or, égale à 1,6180... ;
fonctions :
aire : qui prend en paramètre un objet géométrique (carré, triangle, etc.) et calcule son aire,
angles : qui prend en paramètre un triangle, et calcule les angles internes de ce dernier ,
etc.
Vous pouvez naturellement définir toutes ces choses dans votre notebook, mais cela ne ferait que l’alourdir. Le mieux est de stocker tout cela dans un fichier Python externe, que vous allez ensuite importer dans votre notebook : c’est un module !
Voici un exemple simplifié d'un module geometry :
'''
Module geometry.py
'''
# variables
pi = 3.14159265359
phi = 1.6180
# fonction qui calcule l'aire
def aire(obj):
if type(obj) == carre:
return obj.a**2
# definitions de quelques classes
class carre(object):
def __init__(self,a):
self.a = a
class triangle(object):
def __init__(self,a,b,c):
self.a = a
self.b = b
self.c = c
Pour pouvoir importer un module, vous allez avoir besoin du mot clé import
. Voici un exemple avec notre module geometry :
import geometry
Après avoir fait cela, vous pouvez utiliser les différents éléments définis dans votre module :
car = geometry.carre(4)
tri = geometry.triangle(3, 6, 5)
print(geometry.pi) # -> 3.14159265359
geometry.aire(car) # -> 16
Tous les éléments inclus dans le module geometry peuvent être utilisés via la notation nomModule.fonction()
ou encore nomModule.variable
. Si vous ne souhaitez pas réécrire geometry à chaque fois, vous avez deux autres options :
soit donner un alias au nom de votre module, pour n’avoir à écrire que l’alias :
import geometry as geo # on peut maintenant accéder à geo.aire() ou geo.pi
soit importer des fonctions spécifiques que vous pourrez ensuite utiliser comme des fonctions/variables Python natives (sans la notation
.
) :
from geometry import pi
print(pi) # -> 3.14159265359
Un cas particulier de cette dernière méthode est d’importer en une ligne tous les objets contenus dans un module via la notation *
. Néanmoins, ce n’est pas la méthode préconisée, afin d’éviter par exemple les conflits entre plusieurs modules qui pourraient avoir un nom de fonction identique.
from geometry import *
Quand un module ne suffit pas : les packages
Un package (appelé parfois librairie) est une collection, un ensemble de modules Python. Comme vous l’avez vu ci-dessus, un module est un fichier Python. Un package est simplement un dossier contenant plusieurs fichiers Python (.py) et un fichier additionnel nommé __init__.py
. Ce dernier différencie un package d’un dossier lambda contenant uniquement des codes Python.
Par exemple, vous auriez pu stocker votre module geometry dans trois fichiers différents au lieu d’un seul :
un pour les classes : classes.py ;
un pour les variables : variables.py ;
un pour les fonctions : fonctions.py.
On aurait dans ce cas le dossier suivant :
Vous aurez besoin d’utiliser l’opérateur .
pour accéder au module, après avoir importé le package :
import geometry # import all the geometry package
print(geometry.variables.pi) # -> 3.1415...
car = geometry.classes.carre(4)
geometry.fonctions.aire(car) # -> 16
Ou vous pouvez également importer seulement un module du package :
import geometry.variables as var # importer uniquement ce qui est défini dans variables.py
print(var.pi) # -> 3.1415...
Les packages dans l’analyse de données
Les packages sont omniprésents dans l’analyse de données avec Python. En effet, de nombreux packages ont été créés spécifiquement pour répondre aux problématiques du domaine. Au fur et à mesure de votre parcours, vous allez être amené à :
manipuler vos données pour en faciliter l’analyse ;
réaliser différents graphiques pertinents représentant le comportement de vos données ;
utiliser des méthodes statistiques ;
faire tourner des algorithmes de machine learning plus ou moins compliqués ;
etc.
Et pour réaliser tout cela, il vous sera indispensable de maîtriser les différents objets et fonctions issus des packages correspondants.
Pour revenir à votre problématique initiale (avoir une fonction racine carrée), il y a par exemple le package numpy qui en propose une – et bien d’autres choses !
import numpy as np
np.sqrt(16) # -> 4.0
Je vous propose de voir un exemple concret d’utilisation des packages math
et random
dans le prochain chapitre.
En résumé
Dans ce chapitre, nous avons vu ensemble les bases de l’utilisation des modules et des packages :
un module est un fichier contenant du code Python (extension .py) qui peut définir des fonctions, des classes et/ou des variables ;
vous pouvez importer n’importe quel module Python via le mot clé
import
;pour utiliser une fonction d’un module, ou une classe ou une variable, il faut utiliser l’opérateur
.
;un package est un ensemble de plusieurs modules Python ;
il existe de nombreux packages spécifiquement créés pour l’analyse de données.
Maintenant que vous savez en quoi consiste un module en Python, suivez-moi au prochaine chapitre pour découvrir le fonctionnement du module random.