Oorspronkelijk is Jupyter Notebooks ontworpen voor datawetenschappelijke toepassingen die zijn geschreven in Python, R en Julia, maar het is nuttig voor allerlei projecten. Via Jupyter Notebooks kun je Python-code en diens output delen met allerlei derden, code draaien met interactieve feedback of systematisch documenteren wat je aan het doen bent.

In dit artikel kijken we hoe je Jupyter Notebook voor Python installeert en configureert en hoe je de verschillende features van het programma gebruikt - of zij nu Jupyter geïnstalleerd hebben of niet.

Installatie

De makkelijkste en beste manier om Jupyter Notebooks te gebruiken is om Anaconda samen met Python te gebruiken. Anaconda is in het leven geroepen om makkelijker te werken met Python en diens uitgebreide systeem van datawetenschappelijke tools. Anaconda brengt die allemaal samen en Jupyter Notebook wordt standaard meegeleverd.

Anaconda levert verder een overzicht van communities, documentatie en hulpgidsen, en meerdere standaardpackages die je waarschijnlijk samen met Jupyter wilt gebruiken: Pandas, NumPy, TensorFlow, Matplotlib, enzovoorts. Anaconda maakt het verder makkelijker om je virtuele omgevingen te beheren en packages te importeren of bij te werken. Kortom, Anaconda is een goed beginpunt als je serieus met Python wilt werken.

Anaconda schept orde in een uitgebreide wereld van tools, plug-ins en community-hulp.

Er is een nadeel aan het gebruik van Anaconda: als je al langer met Python werkt en een hele workflow hebt opgebouwd, moet je die migreren naar de Anaconda-instance. Als je niet zo vast zit aan je originele omgeving, is dit de beste keus op de langere termijn. Maar als je gehecht bent aan je huidige IDE en tools, kun je Jupyter Notebooks ook handmatig installeren.

Starten van Jupyter

Het goede nieuws is dat dit ook vrij makkelijk is als je Python al gewend ben. Je kunt gewoon pip gebruiken om jupyter toe te voegen aan een Python-installatie met de opdracht python3 -m pip install jupyter Je kunt daarna Jupiter starten via de terminal op Linux of macOS, of via de opdrachtprompt in Windows door jupyter notebook te typen.

Als je Anaconda gebruikt, zit er een knop voor het starten van Jupyter Notebook in het hoofdvenster (direct op de eerste pagina onder Home) maar je kunt ook een snelkoppeling toevoegen of Jupyter starten via de terminal of snelkoppeling, afhankelijk van welke distributie je gebruikt. Let op: als je Jupyter in een virtuele omgeving voor Python gebruikt (een goed idee als je Anaconda niet gebruikt) zul je de omgeving moeten activeren voor je de opdracht kunt gebruiken.

Klik op de knop in Anaconda om een instance van de Jupyter-server te starten, waarna je standaardbrowser een lokale pagina opent om te navigeren. Je zit daar doorgaans de bestanden in je /home directory of gebruikersmap in Windows. Je kunt je daar de huidige mappenlijst doorzoeken naar projecten of een nieuw Notebook starten met New > Notebook: Python 3 rechtsboven.

Dit is Jupyter's bestandsnavigator: Notebooks met een groen pictogram zijn actief en draaiend.

Kernel en cell

Een Notebook van Jupyter heeft twee essentiële componenten: een kernel en cells.

  • Een kernel is een runtime-instance van de programmeertaal die je gebruikt in je Notebook. In ons geval gebruikt Jupyter een Python-instance (de IPython-kernel) met zijn eigen namespace en geheugentoewijzing. Een Notebook kan maar met één kernel tegelijk verbinden, maar je kunt ze omschakelen als je dat nodig vindt.
  • Cells kun je vergelijken met de cellen van een spreadsheet.

Elke cell bevat code, vrije tekst of andere content. Je kunt code van elke cell draaien en elke cell individueel draaien (zelfs in een andere volgorde). Ze zijn te starten vanaf een specifieke regel of van het begin om met een schone lei te beginnen. De staat van de code wordt gebruikt in de Notebook (denk aan global variables et cetera) en wordt bewaard, tenzij je Jupyter vertelt dat niet te doen. Cellen zijn te knippen, kopiëren, plakken en op te nemen met de pictogrammen bovenin.

Een simpel voorbeeld van een Notebook. De grafiek die je onderaan ziet is aangemaakt met de code in het midden die gemarkeerd is met In [9]:.

De meestgebruikte opdrachten in een Notebook zijn beschikbaar in het uitvouwmenu of in de toolbar boven de cel. Een goede manier is door op het pictogram van een toetsenbord in de toolbar te klikken. Dit opent het venster met opdrachten en deze lijst is te verfijnen door te typen waar je naar op zoek bent:

Een goede manier om Notebooks in de vingers te krijgen is door met bestaande te spelen. De makers van Jupyter hebben een galerij van Notebooks gemaakt die een breed scala aan applicaties tentoonstellen en veel voorbeelden geven van wat doorgaans gedaan wordt in Notebooks, zoals het genereren van visualisaties aan de hand van data.

Cell-formaten

Code. Er is geen praktische grens aan de hoeveelheid Python-code die je kunt toevoegen aan een cell, maar het is voor het overzicht handiger om lange lappen code op te breken in blokken. Je hoeft niet te knippen en plakken, door Ctrl, Shift en - in te toetsen maak je een losse cell aan.

Markdown. Met Markdown voeg je notities, comments, inline afbeeldingen en andere elementen die geen uitvoerbare code zijn toe. Markdown-cells kunnen zelfs bijvoegde afbeeldingen bevatten die worden opgeslagen in de Notebook. Gebruik menu-optie Edit > Insert Image om een afbeelding toe te voegen.

Heading. Oude Notebooks gebruikten een speciale cell 'Heading' om notebooks in secties te verdelen. Dit bestaat niet meer in nieuwe Notebooks: gebruik Markdown voor deze feature.

Raw NBConvert. Cells die zijn gemarkeerd met Raw NBConvert worden zo gelaten als ze zijn en er wordt niets geconverteerd door Jupyter. Dat is nuttig als je tekst wilt toevoegen die door een third party-toepassing wordt verwerkt, bijvoorbeeld LaTex voor wiskundige formules.

Cells in een Jupyter Notebook. Van boven naar beneden: een Markdown opgemaakte cell, eentje met Python-code en een raw NBConvert-cell.

Cells in Python kun je voorzien van een % of %% om magic commands te maken. Die zijn specifiek voor de Python-kernel in Jupyter en bepalen hoe de kernel interfacet met de Notebook en de omgeving.

Het draaien van code

Code in een Notebook kan je in één keer draaien of in delen. Als een cell geselecteerd is, kun je op de knop Run klikken om de inhoud van dat deel te draaien en verder te gaan met de volgende cell. Het is hetzelfde als single-stepping in een debugger, maar nu ga je per cell in plaats van per regel.

Let op: Als je een cell of meerdere cells draait, wordt de staat daarvan opgeslagen in de kernel zolang deze actief is. Als je bijvoorbeeld een module importeert, blijft deze geladen in de kernel, zodat een volgende import zich net als een tweede instance van de import in een traditioneel Python-script gedraagt.

Resetten

Als je de kernel wilt herstarten en de context voor de Notebook wilt resetten, maar de resultaten die je tot nu toe hebt weergegeven wilt behouden, klik je op de knop restart the kernel (with dialog) bovenin (het pictogram met de pijl in een cirkel). Als je de hele Notebook van bovenaf opnieuw wilt draaien met een vers gestarte kernel, waarbij alle vorige weergegeven resultaten worden gewist, klikt dan op de dubbel pijl-knop (een paar knoppen rechts van Run).

Mocht je een Notebook interactiever willen maken, kun je de ipywidgets add-on importeren. Met ipywidgets kunnen cellen GUI-elementen als schuifknoppen en invoervelden genereren. De waardes die gebruikers ingeven met deze invoermiddelen kunnen worden gebruikt in andere cellen van de Notebook.

Een Notebook kun je opslaan en herstellen om later mee te werken: je slaat dan de tekstuele inhoud van elke cell op, alsmede de output van de laatste keer dat je hem draaide. De staat van de kernel - variabelen en datstructuren die werden aangemaakt bij de laatste run - wordt niet opgeslagen. Je kunt dat eventueel doen met een third party-module als dill in Python, maar het opslaan van de kernelstaat wordt niet standaard ondersteund.

Er is een simpele manier om de recentste wijziging ongedaan te maken. Bij het opslaan wordt een 'checkpoint' gemaakt van de staat vóór de laatste opslagactie en je kunt daar naar terug met File > Revert to Checkpoint en daar zie je de datum en tijd van de laatste checkpoint. Als je meer kopietjes wilt, kun je het beste een versiebeheersysteem als Git gebruiken.