{{tag>dev python jupyter}}
====== Jupyter notebook ======
Le nom Jupyter vient de la contraction des 3 principaux langages utilisés dans le domaine de la data science: **Ju**lia, **Pyt**hon et **R**. L'extension d'un fichier notebook produit par Jupyter est **.pynb** pour **IPy**thon **N**ote**B**ook, ancien nom du projet Jupyter.
Jupyter est à la fois:
* Une application Web interactive dans laquelle on peut développer, documenter, exécuter et partager du code.
* Un document qui intègre du code et des parties dynamiques ainsi que de la documentation formatée en Markdown ou Latex, des médias audio ou vidéo.
===== Installation =====
L'installation de jupyter notebook est détaillée dans le wiki [[dev:python:jupyter-notebook:install| installer jupyter notebook]].
===== Structure d'une note jupyter =====
Les notes (notebook) sont des fichiers texte au format JSON portant l'estension .pynb. Elles sont interprétées par le serveur Jupyter.
Une note est une séquence de cellules. Une cellule est une entrée texte multi-ligne pouvant être exécutée/interprétée via le bouton Play/Exécuter de la barre d'outil ou la combinaison Shift+Enter.
On parcours un notebook en frappant successivement les touches Shift+Enter permettant d'évaluer la cellule courante et de se placer sur la suivante.
Pour évaluer l'ensemble du notebook en une seule fois Menu **Cell** -> **Run All**.
3 types de cellules existent:
* **Code**: Permettant d'éditer/exécuter du code dans le langage correspondant au noyau actif. La sortie produite n'est pas limitée au texte (tableau HTML, images et graphiques matplotlib, insertion de fichiers audio ou vidéo et génération de liens etc)
* **Markdown**: Texte formaté en Markdown pouvant inclure des formules mathématiques en utilisant la syntaxe en ligne ''$..$'' LaTeX ou l'insertion d'une zone dédiée ''$$..$$''.
* **Cellule brute** offre un espace de sortie directe non interprétée par le serveur notebook.
Un exemple de notebook exploitant quelques éléments de la sortie enrichie est disponible à l'url https://nbviewer.jupyter.org/github/ipython/ipython/blob/master/examples/IPython%20Kernel/Rich%20Output.ipynb
Dans la plupart des cas, il est important d'évaluer les cellules dans l'ordre. Le fait d'évaluer un programme sous forme de notebook revient à le fragmenter (équivalent d'une exécution en débogueur avec des points d’arrêts). Si l'ordre d'exécution est modifié, le programme n'est plus le même.
===== Contrôle de l'interpréteur =====
* Pour supprimer les symboles courants **Kernel** -> **Restart**.
* Si une cellule ne rend pas la main suite a une modification inappropriée (boucle infinie par exemple) **Kernel** -> **Interrupt**
* Si trop de modifications sont apportées, il est possible recharger le notebook initial et de nettoyer les sorties menu **File** -> Reset to original**
===== Workflow =====
Le workflow est similaire à celui appliqué lors d'une session d'IPython à la différence qu'il est possible d’éditer une cellule autant de fois que nécessaire.
On décompose la problématique via les cellules en passant à la suivante lorsque la précédente s’exécute correctement.
Une note peut être téléchargée au format Python:
* File -> Download as -> Python
Une note peut être exposée en lecture seule pour relecture par un pair:
* File -> Share static version.
Dans ce cas une URL est générée qu'il suffit de copier et de partager.
===== Modes et raccourcis =====
Pour chaque action il existe un raccourcis clavier.
Deux modes existent: commande et édition
Presser Esc pour basculer en mode commande. Dans ce mode, on peut naviguer dans le document et lancer des commandes.
Presser Enter pour passer en mode édition. C'est dans ce mode que le contenu d'une cellule peut être édité.
===== Références =====
* https://jupyter-notebook.readthedocs.io/en/stable/notebook.html