Jupyter
Le carnet de bord interactif où l'on mélange du code Python, du texte explicatif et des graphiques dans un même document. L'outil de prédilection pour explorer des données, prototyper un modèle ou raconter une analyse.
À quoi ça sert
Quand tu écris un script Python classique, il s'exécute du début à la fin et tu vois tout le résultat à la fin. Pas pratique pour explorer : à chaque petite question (« combien de lignes a mon CSV ? », « à quoi ressemble la distribution de l'âge ? »), tu dois relancer le script entier.
Un notebook Jupyter, c'est un fichier découpé en cellules. Chaque cellule contient soit du code, soit du texte (Markdown). Tu lances une cellule à la fois — les variables restent en mémoire (le « kernel »), donc tu peux itérer rapidement. Les résultats (tableaux, graphiques) s'affichent juste sous la cellule qui les a produits.
C'est devenu le standard de fait pour :
- L'exploration de données — charger un dataset, regarder ce qu'il y a dedans, faire des graphiques en quelques lignes.
- Le prototypage de modèles ML — entraîner, ajuster, comparer sans recharger les données à chaque essai.
- La pédagogie et la communication — un notebook se lit comme un article, avec le code reproductible à côté du raisonnement.
Un notebook est un fichier .ipynb. Pour l'éditer,
tu as plusieurs interfaces : JupyterLab (la plus moderne,
recommandée), Jupyter Notebook (l'interface classique, plus
simple), ou directement VS Code via son extension Jupyter. Les
trois ouvrent les mêmes fichiers .ipynb.
Un exemple d'usage
Tu reçois un CSV avec les ventes mensuelles d'un magasin. Tu veux juste regarder avant de te lancer dans une analyse. Dans un notebook :
import pandas as pd
df = pd.read_csv("ventes.csv")
df.head()
Tu lances cette cellule (Shift+Enter), tu vois les 5 premières lignes. Tu enchaînes :
df.describe()
df["montant"].plot(kind="hist", bins=30)
Le DataFrame df est resté en mémoire entre les cellules. Tu n'as pas
rechargé le CSV. Tu peux modifier la cellule 3 (changer le nombre de bins,
sélectionner une autre colonne) et la relancer instantanément. C'est cette
boucle d'itération courte qui rend Jupyter indispensable en data.
How-to : installer et utiliser Jupyter
-
Installer JupyterLab dans ton projet
On reste dans la logique UV : on installe JupyterLab comme dépendance de développement.
bashuv add --dev jupyterlab pandas matplotlibjupyterlabest l'interface,pandasetmatplotlibsont les compagnons habituels pour l'exploration de données. -
Lancer JupyterLab
bashuv run jupyter labTon navigateur s'ouvre automatiquement sur
http://localhost:8888avec un token déjà rempli. Tu vois l'arborescence de ton projet à gauche. -
Créer ton premier notebook
Dans le panneau de gauche, clique sur « + » puis sur Notebook → Python 3. Un fichier
Untitled.ipynbs'ouvre. Renomme-le (clic droit → Rename) enexploration.ipynb.Tape ton premier code dans la cellule :
pythonprint("Hello Jupyter") 2 + 2Lance avec
Shift+Enter. Tu verras s'afficherHello Jupyteret le résultat4sous la cellule. Note que seule la dernière expression d'une cellule est affichée automatiquement (en plus desprint). -
Mélanger code et texte
Une cellule peut être en mode Code ou Markdown. Clique sur la cellule, puis utilise le menu déroulant en haut (ou le raccourci
Men mode commande) pour la passer en Markdown :markdown# Mon analyse des ventes On regarde d'abord la **distribution** des montants pour repérer d'éventuelles valeurs aberrantes.Lancer la cellule (toujours
Shift+Enter) la rend en HTML. C'est ce mélange code + texte qui fait qu'un notebook se lit comme un article. -
Maîtriser les deux modes (édition / commande)
Une cellule peut être en mode édition (bordure bleue, curseur dans le code) ou en mode commande (bordure grise, raccourcis clavier actifs). Bascule avec
EscetEnter.Raccourcis essentiels en mode commande :
A/B— insérer une cellule au-dessus / en-dessousD D— supprimer la celluleM/Y— passer en Markdown / CodeZ— annuler la suppressionShift+Enter— exécuter et passer à la suivanteCtrl+Enter— exécuter sans bouger
-
Utiliser Jupyter directement dans VS Code
Pas envie de jongler entre VS Code et un onglet de navigateur ? VS Code ouvre les
.ipynbnativement.- Installe l'extension Jupyter de Microsoft (et l'extension Python).
- Ouvre n'importe quel fichier
.ipynbdans VS Code. - En haut à droite, clique sur Select Kernel et choisis
l'interpréteur du
.venvde ton projet (celui créé par UV). - Tu peux lancer les cellules avec les mêmes raccourcis qu'en JupyterLab.
Astuce VS CodeDans un script Python normal (
.py), tu peux écrire# %%au-dessus d'une portion de code : VS Code la traite comme une cellule Jupyter exécutable. Tu obtiens le confort des notebooks sans les inconvénients des.ipynb(cf. ci-dessous). -
Bien gérer les notebooks dans Git
Un
.ipynbcontient le code et les sorties (graphiques inclus, parfois en base64). Résultat : des diffs Git énormes et illisibles dès que tu relances une cellule.Deux bonnes pratiques :
- Vider les sorties avant de commit : Edit → Clear All Outputs dans JupyterLab.
- Automatiser avec nbstripout :
uv add --dev nbstripout && uv run nbstripout --install— il vide les sorties à chaque commit, automatiquement.
Aide-mémoire
uv run jupyter lab # JupyterLab (recommandé)
uv run jupyter notebook # interface classique
uv run jupyter lab --port 9000
uv run jupyter nbconvert --to html notebook.ipynb # export HTML
uv run jupyter nbconvert --to script notebook.ipynb # export .py
# Mesurer le temps
%time df.describe() # une fois
%%timeit # sur toute la cellule (moyenne)
expensive_function()
# Recharger un module modifié sans redémarrer le kernel
%load_ext autoreload
%autoreload 2
# Exécuter une commande shell depuis une cellule
!ls -lh data/
!uv add seaborn
# Afficher les graphiques inline (rarement nécessaire avec JupyterLab récent)
%matplotlib inline
Jupyter et le reste de l'écosystème
Le notebook est un point d'entrée — il prend tout son sens quand on le branche aux autres briques d'un workflow data/ML.
-
UV — c'est UV qui fournit
l'interpréteur Python utilisé par le kernel Jupyter. Quand tu lances
uv run jupyter lab, le kernel pointe automatiquement sur le.venvdu projet, donc toutes les libs ajoutées avecuv addsont disponibles dans tes notebooks. -
MLflow — un notebook est l'endroit
naturel pour appeler
mlflow.start_run()et tester plusieurs modèles. Avecmlflow.sklearn.autolog(), chaque cellule d'entraînement crée un run trackable. Mais attention : pour la production, on ré-écrit en script.pypropre (cf. ci-dessous). -
Docker — l'image officielle
quay.io/jupyter/scipy-notebookdonne un JupyterLab préinstallé avec pandas/scikit-learn/matplotlib. Pratique pour partager un environnement avec un coéquipier sans qu'il ait à l'installer. -
pytest — le notebook est génial
pour explorer, mais pas pour tester. Le pattern habituel : extraire
les fonctions stables d'un notebook vers un module
.py, écrire des tests pytest dessus, et garder le notebook comme « scratchpad ». -
Sphinx — l'extension
nbsphinxpermet d'inclure des notebooks directement dans une documentation Sphinx. Utile pour des tutoriels où le code et les sorties graphiques sont essentiels.
Règle d'or en MLOps : un notebook sert à explorer. Dès qu'une
logique est stable et doit tourner en prod (entraînement régulier, API…),
on l'extrait dans des modules .py testés avec pytest. Le notebook
reste comme trace de la phase d'exploration, mais ce n'est pas lui qu'on
déploie.
Pour aller plus loin
- Site officiel : jupyter.org
- Documentation JupyterLab : jupyterlab.readthedocs.io
- Extension Jupyter pour VS Code : marketplace.visualstudio.com
- nbstripout (vider les sorties dans Git) : github.com/kynan/nbstripout