À un moment donné, nous devons tous montrer notre travail. La plupart des travaux de programmation sont partagés soit sous forme de code source brut, soit sous forme d'exécutable compilé. Certes, le code source fournit des informations complètes, mais d'une certaine manière, cela revient plus à « dire » qu’à « montrer ». L'exécutable montre ce que fait le logiciel, mais même lorsqu'il est livré avec le code source, il peut être difficile de comprendre exactement comment il fonctionne.

Et si l’on pouvait visualiser le code et l'exécuter dans la même interface utilisateur, de façon à pouvoir apporter des modifications au code et voir les résultats de ces modifications instantanément, en temps réel ? C'est exactement ce que permet Jupyter Notebook. Jupyter Notebook a été créé pour faciliter la présentation de son travail de programmation et permettre à d'autres personnes d'y participer. Il permet de combiner le code, les commentaires, le multimédia et les visualisations dans un document interactif - naturellement appelé notebook - qui peut être partagé, réutilisé et retravaillé. Et comme Jupyter Notebook fonctionne via un navigateur Web, le notebook lui-même peut être hébergé sur une machine locale ou un serveur distant.

Avantages de Jupyter Notebook

Développé à l'origine pour des applications de data science écrites en Python, R et Julia, Jupyter Notebook prouve son utilité de multiple façon et pour toutes sortes de projets :

- Visualisations de données. La plupart des utilisateurs se trouvent confrontés pour la première fois à Jupyter Notebook par le biais de la visualisation de données, sous forme d’un notebook partagé qui comprend un rendu de certains ensembles de données sous forme graphique. Jupyter Notebook permet d’éditer des visualisations, mais aussi de les partager et de permettre des modifications interactives du code et de l'ensemble des données partagés.

- Partage de code. Des services cloud comme GitHub et Pastebin permettent de partager du code, mais ils sont globalement non interactifs. Avec Jupyter Notebook, il est possible de visualiser le code, de l'exécuter et d’afficher les résultats directement dans son navigateur Web.

- Interactions en direct avec le code. Le code de Jupyter Notebook n'est pas statique ; il peut être édité et ré-exécuté incrémentalement en temps réel, avec une rétroaction qui apparait directement dans le navigateur. Les notebooks peuvent également intégrer des commandes utilisateur (par exemple, des curseurs ou des champs de saisie de texte) utilisables comme sources de saisie pour le code.

- Documenter des échantillons de code. Si le développeur dispose d’un morceau de code et qu’il veut expliquer ligne par ligne comment il fonctionne, avec un feedback en direct tout au long du processus, il peut l'intégrer dans un Jupyter Notebook. Mieux encore, le code restera entièrement fonctionnel – il est possible d’ajouter de l'interactivité avec l'explication, en montrant et en expliquant en même temps.

Les composants de Jupyter Notebook

Les Jupyter Notebooks peuvent contenir plusieurs types d'ingrédients, chacun étant organisé en blocs distincts :

- Texte et HTML. Du texte brut, ou du texte annoté dans la syntaxe Markdown pour générer du HTML, peut être inséré dans le document à tout moment. Le style CSS peut également être inclus en ligne ou ajouté au modèle utilisé pour générer le notebook.

- Code et sortie. Le code des notebooks Jupyter Notebook est typiquement du code Python, même s’il est possible d’ajouter le support d'autres langages comme R ou Julia dans son environnement Jupyter. Les résultats du code exécuté apparaissent immédiatement après les blocs de code, et les blocs de code peuvent être exécutés et réexécutés dans l'ordre voulu, aussi souvent que nécesssaire.

- Visualisations. Les graphiques et diagrammes peuvent être générés à partir du code, au moyen de modules comme Matplotlib, Plotly, ou Bokeh. En sortie, ces visualisations apparaissent en ligne à côté du code qui les génère. Cependant, il est également possible de configurer le code pour écrire ces données dans des fichiers externes si nécessaire.

- Multimédia. Parce que Jupyter Notebook est construit sur la technologie Web, il peut afficher tous types de multimédia pris en charge dans une page Web. Il est possible de les inclure dans un notebook en tant qu'éléments HTML, ou de les générer par programmation à l'aide du module IPython.display.

- Données. Les données peuvent être livrées dans un fichier séparé à côté du fichier.ipynb qui constitue un notebook Jupyter Notebook, ou elles peuvent être importées par programmation, en incluant par exemple du code dans le notebook pour télécharger les données d'un référentiel Internet public ou pour y accéder via une connexion de base de données.

Zoom sur des cas d’usage

Les cas d’usage les plus courants de Jupyter Notebook se situent dans le domaine des data sciences, des mathématiques et d'autres projets de recherche qui impliquent la visualisation de données ou de formules. Mais il existe de nombreux autres cas d’usage en dehors de ceux-là :

- Partager une visualisation, avec ou sans interactivité. Souvent, les résultats d'une visualisation de données sont partagés sous forme d’image statique, mais cela n'est utile que jusqu'à un certain point. En partageant un Jupyter Notebook, le développeur permet à son public cible de s’impliquer et de jouer avec les données. Celui-ci peut acquérir une compréhension approfondie des données, de manière interactive.

- Documenter un processus avec du code. Beaucoup de programmeurs qui partagent leurs expériences de programmation via un blog écrivent leurs messages dans un Jupyter Notebook. De sorte que d'autres peuvent télécharger leur notebook et recréer l'exercice.

- Documentation en direct pour une bibliothèque ou un module. La plupart de la documentation pour les modules Python est statique. Il est possible d’utiliser un Jupyter Notebook comme bac à sable interactif pour apprendre comment fonctionne un module. Tout module Python qui fonctionne correctement dans une interface de notebook (essentiellement, tout ce qui écrit sur stdout) peut convenir.

- Partage du code et des données en général. La seule chose à faire pour partager un Jupyter Notebook et ses fichiers de données associés est de le packager dans une archive.

Et aussi : le JupyterLab

JupyterLab est le nom de l’interface utilisateur de nouvelle génération pour Jupyter Notebook. Elle est désormais disponible et prête pour la production.

Comme l’explique le billet de blog annonçant sa disponibilité générale, JupyterLab est plus souple qu'un Jupyter Notebook classique. Elle permet aux utilisateurs de glisser-déposer des cellules dans et entre notebooks et d'organiser l'espace de travail en onglets et sous-sections séparés. Le code peut être exécuté directement à partir de fichiers texte ou de fichiers Jupyter Notebook, et de nombreux formats de fichiers courants pour le code et les données peuvent être rendus en prévisualisations directes.

Il est également possible de personnaliser JupyterLab avec des extensions pour ajouter de nouveaux formats de fichiers, enrichir l'interface ou fournir un certain nombre de fonctionnalités supplémentaires, ce qui élargit d’autant l’usage des notebooks par rapport à Jupyter Notebook lui-même. L'objectif à long terme est de remplacer l'interface actuelle de Jupyter Noebook par JupyterLab, mais seulement quand la stabilité et la fiabilité de JupyterLab auront été confirmées.

 

L’interface JupyterLab renouvellement entièrement le front-end de Jupyter Notebook. Elle accroit grandement la flexibilité dans l'organisation de l'espace de travail. Elle permet aussi plus de personnalisation grâce à des extensions. (Crédit : IDG)

Les limites de Jupyter Notebook

Même s’il est puissant et utile, Jupyter Notebook est contraint par certaines limitations dont il faut tenir compte.

- Les notebooks ne sont pas autonomes. C'est le plus gros inconvénient de Jupyter Notebook : les notabooks ont besoin du runtime Jupyter, et des bibliothèques que le développeur prévoit d'utiliser. Il existe des solutions pour créer des notebooks Jupyter autonomes, mais aucune d'entre elles n'est officiellement prise en charge. Il est préférable de distribuer les notebooks aux personnes qui disposent déjà de l'infrastructure nécessaire pour les utiliser, ou qui se moquent du setup (via Anaconda, par exemple).

- L'état de la session n’est pas facile à sauvegarder. L'état du code exécuté sur Jupyter Notebook ne peut pas être préservé et restauré avec le jeu d'outils par défaut. Chaque fois que l’on charge un notebook, il faut réexécuter le code qu'il contient pour restaurer son état.

- Pas de débogage interactif ou d'autres fonctionnalités IDE. Jupyter Notebook n'est pas un environnement de développement complet pour Python. Bon nombre de fonctionnalités que l'on peut s'attendre à trouver dans un IDE – comme le débogage interactif, la complétion de code et la gestion des modules - ne sont pas disponibles.