Ecosystème Jupyter#

Bruno Denis, mai 2024

Nuage des mots de l'écosystème Jupyter

Environnement open source qui propose

  • un format ouvert de carnet

  • des applications web pour

    • créer des carnets

    • partager des carnets

    • collaborer autour de carnets

  • des applications pour générer

    • des documents

    • des applications

NbViewer

Une enquête auprès des lecteurs de la revue « Nature » place « IPython Notebook » en troisième place par ordre d’impact sur le travail des chercheurs [Perkel 2021].

Année

Code informatique majeur

Description

Impact

1957

Fortran compiler

le langage pionnier

1er

1965

FFT (Fast Fourier Transform)

le traitement du signal

2e

1965

Atlas of protein sequence and structure

le catalogueur de molécules

7e

1969

Modèle de circulation générale

le leadeur de la prévision météo

10e

1979

BLAS (Basic Linear Algebra Subprograms)

pionnier du calcul matriciel

5e

1987

NIH Image

les bases de l’imagerie médicale

8e

1990

BLAST (Basic Local Alignment Search Tool)

le chercheur de séquence

6e

1991

arXiv.org

le serveur de preprints

4e

2011

IPython Notebook

l’explorateur de donnée, mais pas que…

3e

2012

AlexNet

deep learning basé sur les réseaux de neurones

9e

[Perkel 2021] J. M. Perkel, “Ten computer codes that transformed science,” Nature, vol. 589, no. 7842, pp. 344–348, Jan. 2021, doi: 10.1038/d41586-021-00075-2.

Carnet#

Carnet du scientifique#

Il sert à documenter les hypothèses, les expériences, les mesures, les analyses, les interprétations. C’est un outil d’aide mémoire et de réflexion, il organique du texte, des formules mathématiques, des données, des figures…

Exemples de carnet historiques

Carnet électronique#

exemple de notebook

Un carnet électronique est une succession ordonnée de cellules en langage naturel et en langage informatique.

Les cellules en langage naturel se composent de texte formaté, d’expressions mathématiques, de tableaux de données et/ou de médias (images, vidéos …)

Les cellules en langage informatique se composent d’une partie avec le code et d’une partie avec le résultat de l’exécution du code (donnée, graphiques…)

Structure d'un application

Techniquement, pour obtenir une interaction entre l’utilisateur et le code des cellules en langage informatique, les logiciels d’édition disposent de deux composantes

  • un noyau d’exécution (kernel) qui assure l’exécution des cellules de code de programmation et renvoie les résultats

  • une application avec deux aspects

    • une interface utilisateur (GUI ou front-end) qui gère les interactions avec l’utilisateur

    • une dorsale (back-end) qui, selon les demandes de l’utilisateur, émet des requêtes d’exécution de code au noyau et met à jour le fichier qui stocke le carnet électronique.

exemple de notebook mathematica

Le pionier : Mathematica#

  • Utilisation des carnets
    électroniques dès 1987
    [Wolfram 2023]

  • Format propriétaire
    qui limite sa diffusion

[Wolfram 2023] Stephen Wolfram, « Introducing Chat Notebooks: Integrating LLMs into the Notebook Paradigm, » Stephen Wolfram Writings, 2023

Carnet Jupyter (Jupyter notebook)#

Un carnet Jupyter est une succession de cellules de 3 types différents :

  • Texte brut

  • Texte formaté et enrichi d’expressions mathématiques des liens vers des images, des vidéos … (langage de balisage Markdown)

  • Code informatique (avec une partie dédiée aux résultats de l’exécution du code)

type de cellule

langage du contenu de la cellule

Texte brute

-

Texte formaté

Markdown (Tutoriel)

Code informatique

Python, Julia, R, C++, Matlab …

Un carnet Jupyter est sauvegardé dans un fichier à l’extension .ipynb (IPython notebook)

Le format de sauvegarde est ouvert (nbformat) et basé sur le format JSON (JavaScript Object Notation)

../_images/notebook_lokta_volterra_compare.png

Exemples de carnets Jupyter en ligne#

Titre et lien

Description

Auteurs

Équations Lotka-Volterra

Exemple basic intégré à ce livre et déjà présenté ci-dessus

Bruno Denis, ENS Paris-Saclay, France

Evaluation of a force sensor

Analyse de résultat de mesure en travaux pratiques

Andrés Marrugo, Universidad Tecnológica de Bolívar, Bolivie

Biharmonic equation and Stresses in Polar coordinates

Calcul symbolique pour obtenir l’équation \(\left ( \frac{\partial^4}{\partial x^4} + 2 \frac{\partial^4}{\partial x^2\partial y^2} + \frac{\partial^4}{\partial y^4} \right ) \Phi = 0\) en coordonnées polaires

Jeevanjyoti Chakraborty, IIT , Inde

Rigid-body transformations in a plane (2D)

Cours interactif sur les transformations planes appliquées aux chaines cinématiques avec Python

Marcos Duarte et Renato Naville Watanabe, Federal University of ABC, Brésil

logo Markdown

Langage Markdown#

Markdown est un langage de balisage pour le formatage de texte brut facile à lire et facile à écrire. Il inclus

  • les éléments localisés de type : accentuation, code, liens, images, équations

  • les blocs de type : paragraphe, titres, listes, block de code, bloc d’équation

Ecrire ou pour obtenir

*Italique*

_Italic_

Italic

**Gras**

__Gras__

Gras

# Titre 1

Titre 1
=======

Titre 1

## Titre 2

Titre 2
-------

Titre 2

### Titre 3

Titre 3
.......

Titre 3

#### Titre 4

Titre 4

Ecrire ou pour obtenir

[Link](https://a.org)

[Link][1]
⋮
[1]: https://a.org

Link

![Image](http://url/b.png)

![Image][1]
⋮
[1]: http://url/b.jpg

Ampoule

> Bloc de citation

 

Bloc de citation

* Liste
* Liste
* Liste

- Liste
- Liste
- Liste

  • Liste
  • Liste
  • Liste

1. Un
2. Deux
3. Trois

1) Un
2) Deux
3) Trois

  1. One
  2. Two
  3. Three

Ecrire

`Code` entre 2 accents grave

pour obtenir

Code entre 2 accents grave


Ecrire

``` Python
s = input("Taper un mot :")
print("Vous avez tapé", s)
```

pour obtenir

s = input("Taper un mot :")
print("Vous avez tapé", s)

Ecrire

Équation $E=mc^2$ en ligne

pour obtenir

Équation \(E=mc^2\) en ligne


Ecrire

Équation :

$$
E_c = \frac{1}{2} \int \int \int \rho v^2 \text{d}\tau
$$

pour obtenir

Équation :

\[ E_c = \frac{1}{2} \int \int \int \rho v^2 \text{d}\tau \]

Créer un carnet#

Logiciels de création de carnets Jupyter : Jupyter est une application web, l’utilisateur interagir au travers d’un navigateur web.

Interface utilisateur

Dorsale (back-end)

Noyaux d’exécution

Jupyter Notebook

Jupyter

Julia

Jupyter Lab

Jupyter Hub

Python

R

mais pas que …

En marge du projet Jupyter, le projet JupyterLite propose une structure logicielle plus compacte en intégrant le noyau d’exécution dans l’application web grâce à la technologie WebAssembly (wasm).

badge JupyterLite

../_images/qrcode_jupyterlite.png

Organisation matérielle#

Deux organisations matérielles pour la création d’un carnet Jupyter, à gauche une installation « locale » et à gauche une installation « distante ».

../_images/struct_authoring_web_with_device.png

Lancement de Jupyter#

Pour l’installation locale

  • depuis le navigateur Anconda

  • depuis le menu Windows

  • depuis une interface de commande

jupyter notebook
jupyter lab

Pour l’installation distante

Interface JupyterLab#

../_images/jupyter_lab_layout.png

Création d’un carnet avec JupyterLab#

../_images/jupyter_lab_launcher.png

Édition d’un carnet#

Voir le tutoriel ressource de l’Université Paris-Saclay :

Partager un carnet#

Il y a plusieurs usages liés au partage d’un carnet Jupyter. On peut souhaiter permettre à des personnes tierces extérieures de :

  • lire le contenu d’un carnet (transmission d’informations)

  • (ré)exécuter le contenu du carnet, éventuellement avec des données d’entrées différentes (reproductibilité des résultats, ou carnet comme outil de travail)

  • amender et compléter un carnet (travail collaboratif)

Lire un carnet partagé sur une forge#

Avec nbviewer (application web open source) soit

  • avec serveur interne

  • avec nbviewer.org (service hébergé gratuitement par OVHcloud et fastly)

../_images/nbviewer.png

Des services d’hébergement en ligne comme github.com ou gitlab.com proposent aussi la visualisation en ligne de carnet Jupyter.

Carnet Jupyter

lien de
visualisation

Evaluation of a force sensor
Andrés Marrugo, Universidad Tecnológica de Bolívar, Bolivie
Analyse de résultat de mesure en travaux pratiques.

NbViewer
GitHub

Biharmonic equation and Stresses in Polar coordinates
Jeevanjyoti Chakraborty, IIT , Inde
Calcul symbolique pour obtenir l’équation \(\left ( \frac{\partial^4}{\partial x^4} + 2 \frac{\partial^4}{\partial x^2\partial y^2} + \frac{\partial^4}{\partial y^4} \right ) \Phi = 0\) en coordonnées polaires.

NbViewer
GitHub

Rigid-body transformations in a plane (2D)
Marcos Duarte et Renato Naville Watanabe, Federal University of ABC, Brésil
Cours interactif sur les transformations planes appliquées aux chaines cinématiques avec Python

NbViewer
GitHub

Exécuter un carnet partagé sur une forge#

Avec la pile logicielle open source Binder qui construit l’environnement d’exécution adapté à un carnet, exécute cet environnement et propose l’interface utilisateur Jupyter Notebook ou Jupyter Lab pour interagir avec le carnet.

  • avec serveur interne

  • avec mybinder.org (service hébergé gratuitement par OVHcloud)

../_images/binder.png

Illustration du processus de partager des résultats reproductibles avec un carnet Jupyter [Beg 2021]

../_images/reproducible_notebook.png

[Beg 2021] Marijan Beg, Juliette Taka, Thomas Kluyver, Alexander Konovalov, Min Ragan-Kelley, Nicolas M. Thiéry, and Hans Fangohr. Using Jupyter for Reproducible Scientific Workflows. Computing in Science & Engineering, 23(2):36–46, March 2021. doi:10.1109/MCSE.2021.3052101.

Exemple#

Les carnets associés à cette présentation sont disponibles sur la forge de l’université Paris-Saclay

lien vers le dépôt

https://gitlab.dsi.universite-paris-saclay.fr/bruno.denis/intro_jupyter

lien vers le site mybinder.org

https://mybinder.org/v2/git/https%3A%2F%2Fgitlab.dsi.universite-paris-saclay.fr%2Fbruno.denis%2Fintro_jupyter/HEAD?labpath=notebooks%2Flokta_volterra.ipynb

Binder

Convertir un carnet#

Convertion
<source> \(\rightarrow\) <destination>

Outils
générateur

Résultat d’exécution
des cellules de code

carnet \(\rightarrow\) page html

nbconvert

statique

carnet \(\rightarrow\) fichier pdf

nbconvert

statique

carnet \(\rightarrow\) fichier Latex

nbconvert

statique

carnet \(\rightarrow\) script Python

nbconvert

statique

carnet \(\rightarrow\) diaporama html

nbconvert, dejavu

statique

carnet \(\rightarrow\) diaporama html

RISE

dynamique, avec le
noyau embarqué coté serveur

carnets + fichiers Markdown \(\rightarrow\) site web

jupyter-book

statique

carnet \(\rightarrow\) application web

voila

dynamique, avec le
noyau embarqué coté serveur

carnet \(\rightarrow\) application web

voici

dynamique, avec le
noyau embarqué coté client

Diaporama#

Les diaporamas générés à partir de carnets Jupyter sont construits avec la technologie open source Reveal.js

Concepts d’un diaporama Reveal.js :

  • format de fichier : html

  • organisation en série de diapositives

    • pour passer d’une série à une autre, utiliser les touches et

    • pour passer d’une diapositive à l’autre dans une même série, utiliser les touches et

Le diaporama intègre une vue « présentateur » qui s’affiche dans une autre fenêtre du navigateur web en appuyant sur la touche s.

Cette cellule contient une note pour le présentateur. Elle sera affichée dans une secondes fenêtre lorsque ce carnet est utilisé comme diaporama.

[1] : la métadonnée « slide_type »: « notes » est associée à cette cellule

Préparation d’un carnet Jupyter avant la génération du diaporama#

Associer une étiquette (tag) à chaque cellule du carnet pour lui attribuer un comportement dans le diaporama.

Tag

Comportement de la cellule dans le diaporama

-

La cellule prend place dans la diapositive en cours, à la suite des cellules qui y sont déjà présentes

Slide

La cellule débute une nouvelle série de diapositives

Sub-Slide

La cellule débute une nouvelle diapositive dans la série en cours

Fragment

La cellule prend place à la suite de la diapositive en cours, à la suite des cellules qui y sont déjà présentes et elles n’apparaissent qu’après une action du présentateur

Skip

La cellule n’apparait pas dans le diaporama

Note

La cellule sert de note pour l’orateur, elle pourra apparaitre sur une fenêtre du navigateur web, différente de celle des diapositives à destination de l’auditoire

Ajout de tag avec l’interface JupyterLab

Génération d’un diaporama#

En version statique (sans noyau d’exécution)

  • par le menu de JupyterLab
    file -> Save and Export Notebook As… -> Reveal.js Slides

  • par une interface de commande avec nbconvert, exemples
    jupyter nbconvert --to slides lokta_volterra_plotly.ipynb
    jupyter nbconvert --to slides --embed-images lokta_volterra_plotly.ipynb

En version dynamique (noyau d’exécution nécessaire à l’utilisation)

  • par l’extention RISE (Reveal IPython Slideshow Extension)

Jupyter book#

Le projet Jupyter Book propose de rassembler un ensemble de carnets en un livre unique cohérent (site web statique, document pdf ou LaTeX, …).

Le contenu type d’un répertoire de travail pour construire un livre Jypyter est le suivant :

monlivre/                 <- répertoire du libre
 │
 ├── _config.yml          )   fichiers de
 ├── _toc.yml             )  configuration
 │
 ├── intro.md             )
 ├── chap1.md             )  Contenu du livre,
 ├── chap2.ipynb          )  des carnets Jupyter
 ├── section2.1.md        )  ou des fichiers textes
 ├── section2.2.ipynb     )  (CommonMark,
 └── chap3.ipynb          )  MyST Markdown, ...)

Le fichier _toc.yml (table of content) organise le contenu en parties, chapitres, sections. Exemple :

# fichier _toc.yml
format: jb-book       # format du livre
root: intro           # page d'accueil du livre
chapters:             # une liste de chapitres va suivre
- file: chap1         # fichier qui contient les chapitre 1
- file: chap2         # fichier qui contient les chapitre 2
  sections:           # une liste de sections va suivre
  - file: section2.1
  - file: section2.2
- file: chap3         # fichier qui contient les chapitre 3

Le fichier _config.yml contient des informations et des directives pour l’application Jupyter Book. L’exemple minimal suivant fourni des informations pour la génération des hauts et des bas de page.

# fichier _config.yml
title:     Introduction à l'écosystème Jupyter
author:    Bruno DENIS (ENS Paris-Saclay)
logo:      https://jupyterbook.org/en/stable/_static/logo-wide.svg
execute:
  execute_notebooks: force

Pour générer le livre, il n’y a pas d’interface graphique utilisateur, il faut donc utiliser la ligne de commande. La génération type se fait par la commande suivante :

jupyter book build monlivre/

monlivre est le chemin d’accès au répertoire qui contient le livre. Par défaut, Jupyter Book construit l’ensemble des pages html nécessaires pour le site web du livre. Les fichiers sont placés dans le répertoire _build/html

monlivre/
 └──_build
    └── html
       ├── _images
       ├── _static
       ├── index.html
       ├── intro.html
       ...

Exemples#

Conclusions#

Les quatre axes de Jupyter [Massot 2023] :

  • Interopérabilité : plus de 40 langages de programmation, intégration d’images, de visualisations, de formules mathématiques, d’explications textuelles et même de vidéos.

  • Partage : grande facilité d’appropriation et de réutilisation. Les carnet peuvent être exportés au format HTML, PDF ou Markdown. Très pratiques dans le cadre de la recherche collaborative mais aussi dans un contexte d’enseignement.

  • Interactivité : les utilisateurs peuvent directement exécuter le code dans le carnet numérique, voir instantanément le résultat et le modifier si besoin.

  • Écosystème : les carnets Jupyter permettent d’interagir avec de nombreuses bibliothèques et profitent d’une communauté très active. Il est donc facile de trouver des ressources et de se faire aider pour résoudre des tâches spécifiques.

[Massot 2023] Marie-Laure Massot, Arnaud Picandet, Maxime Popineau, Émilien Schultz, Agnès Tricoche. Jupyter, un carnet numérique au service des SHS. Atelier Digit_Hum 2023. Oct 2023, Paris, France

Points forts de Jupyter#

Un support unique pour penser et raconter, avec du code et des données [Massot 2023]

../_images/jupyter_forces.png

Points faibles de Jupyter#

Un environnement complexe [Massot 2023]

../_images/jupyter_faiblesses.png