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)

No description has been provided for this image

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.

No description has been provided for this image

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).

No description has been provided for this image

badge JupyterLite

No description has been provided for this image

Organisation matérielle¶

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

No description has been provided for this image

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

  • https://jupyterhub.ijclab.in2p3.fr/

Interface JupyterLab¶

No description has been provided for this image

Création d'un carnet avec JupyterLab¶

No description has been provided for this image

Édition d'un carnet¶

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

  • https://jupyter.gitlab.dsi.universite-paris-saclay.fr/tutoriel-jupyter/index.html

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)

No description has been provided for this image

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)

No description has been provided for this image

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

No description has been provided for this image

[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 ↓
No description has been provided for this image

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.

No description has been provided for this image

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

No description has been provided for this image

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)
No description has been provided for this image

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, ...).

No description has been provided for this image

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/

où 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
       ...
No description has been provided for this image

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]

No description has been provided for this image

Points faibles de Jupyter¶

Un environnement complexe [Massot 2023]

No description has been provided for this image

In [ ]: