Terug naar overzicht

Blog: Jupyter notebooks en nbgrader voor interactief computationeel onderwijs

Geschreven door Fleur Braunsdorf

Blog van Noor Seijdel en Lukas Snoek over hun Grassroot Jupyter notebooks en nbgrader voor interactief computationeel onderwijs.

Als PhD-student geef je vaak ook onderwijs. Zo geven wij, als PhD-studenten van de afdeling psychologie, ook twee vakken voor de Research Master Psychology over “neuroimaging”, een fancy term voor het meten van hersenactiviteit. Deze twee vakken gaan specifiek over het analyseren van (functionele) MRI data, waarbij je nogal wat kennis van statistiek en signaalanalyse nodig hebt. In plaats van de stof voornamelijk in hoorcolleges te behandelen, hebben we de focus in onze “neuroimaging” vakken gelegd op computerpractica, waarbij studenten zich de statistische en analytische concepten eigen maken door zelf (onder begeleiding) de analyses leren te programmeren. Voor dit grassroots project hebben we onze visie op “interactief computationeel onderwijs” (verder) uitgewerkt door het integreren van twee specifieke onderwijstools: “Jupyter notebooks” en “nbgrader” (waarover later meer).

1

Het resultaat van een fMRI analyses: een “breinplaatje”. Door John Graner, via Wikimedia Commons.

Waarom een focus op programmeren?

Richard Feynman zei ooit: “What I cannot create, I do not understand”. Daarom ligt onze focus niet op het klassikaal hoorcollege waarbij wij vertellen hoe een bepaalde computationele of statistische techniek werkt, maar laten wij studenten zelf, stapje voor stapje, de technieken zelf implementeren in code. Dit doen studenten van de neuroimaging vakken tijdens computerpractica van vier uur, waarbij ze zelf door een programmeer-tutorial (met opdrachten) heen lopen en vragen kunnen stellen aan medestudenten of aan ons. Deze programmeer-tutorials hebben geschreven in Jupyter notebooks en geïntegreerd met de feedback/nakijk tool nbgrader.

Wat is een Jupyter notebook en wat is nbgrader?

Een Jupyter notebook is een web-based editor waarin je makkelijk en overzichtelijk tekst, code, plotjes, plaatjes, en formules kan gebruiken. Dit format leent zich uitstekend voor onderwijs omdat je hierin niet alleen dingen kan uitleggen en laten zien (met code), maar ook studenten zelf kan laten programmeren! Voor een voorbeeld van zo’n Jupyter notebook, zie het plaatje hieronder.

2

Een screenshot van een Jupyter notebook waarin tekst, code, en plotjes in één documenten kan worden gecombineerd.

Tijdens de neuroimaging vakken lopen studenten elke week een Jupyter notebook door, waarin we de belangrijkste concepten van die week behandelen. Natuurlijk willen we niet dat studenten hersenloos (pun intended) de notebooks doorlopen, dus hebben we verschillende opdrachten op verschillende plekken in de notebooks gestopt, die we “ToDos” en “ToThinks” noemen. In ToDos krijgen studenten een (korte) programmeeropdracht om te checken of ze de stof tot dan toe hebben begrepen, zoals in het voorbeeld hieronder:

3

Een voorbeeld van een “ToDo”.

Naast ToDos bevatten onze notebooks ook ToThinks, waarbij studenten antwoord moeten geven op conceptuele/inhoudelijke vragen over de voorafgaande stof:

4

Een voorbeeld van een ToThink.

Door deze ToDos en ToThinks gaan studenten actief aan de slag met de stof en leren op deze manier, stap voor stap, de relevante concepten en technieken!

Vóór dit grassroots project gebruiken wij al deze Jupyter notebooks voor onze vakken, maar we liepen uiteindelijk tegen twee problemen op. Ten eerste bleek het ontzettend veel werk om gemiddeld 20 ToDos/ToThinks van ongeveer 30 studenten handmatig na te kijken en van feedback te voorzien! Ten tweede vertelden studenten ons dat ze de opdrachten fijn vonden, maar dat ze feedback misten: hoe konden ze weten of ze een opdracht goed of juist niet goed hadden gedaan? Gelukkig bleek hier een tool voor te zijn: nbgrader, een extensie voor Jupyter notebooks die het mogelijk maken om automatisch feedback te geven op opdrachten en deze ook (grotendeels) automatisch na te kijken!

De nbgrader tool werkt met het concept van “unit test”: code die checkt of andere code correct is en de verwachtte outputs geeft. Zie een voorbeeld van zo’n “unit test” voor de vorige ToDo hieronder.

5

Een voorbeeld van een een “unit test”. Deze test checkt eerst of de functie “compute_mean” überhaupt bestaat en checkt dan of de functie correct is geïmplementeerd.

Met dit soort tests kunnen we dus studenten automatisch van feedback voorzien, zodat ze op weg geholpen kunnen worden als ze vast zitten en weten wanneer ze de opdracht correct hebben gedaan. Maar wat doen nbgrader dan? Nou, nbgrader kan de opdrachten automatisch nakijken (“autograding”) door alle unit tests te runnen en te kijken welke tests wel en welke niet “falen”.

6

Met een druk op de knop (onder het kopje) “Autograde” kan een notebook nagekeken worden!

Natuurlijk kunnen alleen de ToDos automatisch nagekeken worden; de ToThinks moeten nog steeds handmatig nagekeken worden. Gelukkig heeft nbgrader hier ook een interface voor, waarbij je makkelijk punten kan toewijzen aan ToThink antwoorden en feedback kan leveren op zowel programmeeropdrachten (ToDos) en conceptuele opdrachten (ToThinks).

7

Een voorbeeld van de nbgrader-interface waarbij je feedback kan leveren op zowel programmeeropdrachten als conceptuele (schrijf)opdrachten.

Evaluatie en hoe nu verder?

Dusver is onze ervaring met Jupyter notebooks en nbgrader erg positief! De implementatie kostte nogal wat tijd, maar inmiddels scheelt het ons ontzettend veel tijd met nakijken, niet alleen omdat een deel automatisch nagekeken wordt, maar ook omdat de interface het feedback geven een stuk makkelijker maakt! We merken dat de meeste studenten in staat zijn om volledig zelfstandig de practica door te lopen en vooral vragen stellen over concepten die ze (nog) beter willen begrijpen.

Hoewel we al erg blij zijn met onze implementatie van deze tools dusver, is er natuurlijk altijd ruimte voor verbetering. Ten eerste zouden we bij studenten willen peilen wat ze wel en niet fijn vinden van de computerpractica. In het afgelopen jaar hebben we wel wat informele feedback gehad, maar dit jaar willen we dit uitgebreider navragen na afloop van het vak. Daarnaast vinden we het zonde om onze ervaring met deze fantastische tools voor onszelf te houden! We denken dat deze tools voor elk vak dat computationele methodes gebruikt (dat is: iets met programmeren doet) nuttig kan zijn. Echter is de implementatie van deze tools niet heel makkelijk en straightforward. Daarom willen we een gebruiksaanwijzing schrijven voor andere docenten met uitleg, tips & tricks, en voorbeelden hoe je Jupyter notebooks en nbgrader kan gebruiken voor interactief computationeel onderwijs. Als er voldoende animo voor is, zijn we ook bereid om een korte workshop te geven hierover!

Dus: stay tuned!