Python ja Jupyter Notebook

Valter Kiisk
TÜ Füüsika Instituut
Viimati muudetud: 31.03.2018
$\newcommand{\atan}{\mathop{\rm atan}\nolimits}$ $\newcommand{\arg}{\mathop{\rm arg}\nolimits}$ $\newcommand{\erf}{\mathop{\rm erf}\nolimits}$

Sissejuhatus

Tõenäoliselt tuntuim interaktiivne arvutuskeskkond on Matlab, millel on ka hulk vabavaralisi kloone, nagu Octave ja Scilab. Samas Matlab'i kood ei põhine ühelgi "tõelisel" ehk levinud ja üldotstarbelisel programmeerimiskeelel ja selle traditsiooniline kasutajaliides ei võimalda koodi, graafikuid, jooniseid ja teksti käsitleda ühe tervikliku dokumendina. Viimast võimaldavad suured kommertsiaalsed arvutuspaketid Maple ja Mathematica, kuid need on põhiolemuselt arvutialgebra suunitlusega ja nende programmeerimisvahendid on veelgi piiratumad. Üheks populaarseks vabavaraliseks alternatiiviks on kujunenud programmeerimiskeel Python ja sellel põhinevad arendusvahendid. Tegemist on lihtsa, lakoonilise ja väljendusrikka keelega, mis on vabalt saadaval enamikele arvutiplatvormidele. Võtmetähtsusega on mahukas teaduslik ökosüsteem, mis sisaldab hulga teadusarvutusteks hädavajalikke teeke (NumPy, SciPy, SymPy, Matplotlib, Astropy jt). Väheolulised pole ka riistvara juhtimise, graafilise kasutajaliidese tegemise jm võimalused.

Jupyter Notebook (endise nimega IPython Notebook) on veebilehitsejas toimiv rakendus, mis lubab Pythoni (või mõne muu interaktiivse keelega) suhelda samalaadse kasutajaliidese vahendusel mida on traditsiooniliselt kasutanud Maple ja Mathematica:

  • saab interaktiivselt käivitada lühikesi koodijuppe
  • kogu sisend-väljund säilitatakse töölehel, kõiki eelnevaid sisestusi saab redigeerida ja vastavaid arvutusi korrata
  • arvutuste vahele saab lisada rikkaliku kujundusega teksti, valemeid ja jooniseid

Seega tegemist on teatava interaktiivse "märkmeraamatuga" (notebook), mis ühelt poolt sobib matemaatiliseks eksperimenteerimiseks ja teiselt poolt arvutuskäigu dokumenteerimiseks. Seevastu mõned muud teadusliku suunitlusega Pythoni arendusvahendid (näiteks Spyder) on sarnaseimad just Matlab'ile.

Jupyter Notebook'i serverprogramm ja arvutusmootor ei pruugi asuda tingimata selles samas arvutis kus programmi kasutatakse (läbi veebibrauseri). Näiteks Jupyter Notebook'i võib koheselt veebis katsetada ilma arvutisse midagi installeerimata.

Käesolev kirjutis koondab sissejuhatavaid materjale mitmesuguste arvutus- ja andmetöötlusülesannete lahendamiseks Pythonis Jupyteri töölehe vahendusel. Näited on põhiliselt füüsika vallast. Eeldatakse, et lugeja on pealiskaudselt tuttav programmeerimise, matemaatika ja füüsika põhimõistetega. Mõned teemad lähevad matemaatilistesse detailidesse, mis on ette nähtud kursuse "Andmetöötlus ja teadusarvutused" kuulajaile.

Tuleb rõhutada, et siinsed tekstid püüavad ainult demonstreerida (suuresti näidete varal), millised põhimõtted ja võimalused on üleüldse olemas. Kõikide funktsioonide ja nende kasutamise nüansside teadasaamiseks tuleb ikkagi lugeda Pythoni (või selle lisapakettide) dokumentatsiooni (vt ka linke Jupyter Notebook'i Help-menüüs).

Installeerimine ja käivitamine

Windows'i jaoks on olemas mitmeid teadusliku suunitlusega Pythoni distributsioone, nagu WinPython, Enthought Canopy ja Anaconda. Viimane on hetkel populaarseim ja selle täisversioon (~500 MB) sisaldab ka Jupyter Notebook'i. Alternatiivselt võib installeerida nuditud versiooni Miniconda (~30 MB). Sel juhul tuleb pärast installeerimise lõppu avada Anaconda käsurida (Start-menüüst Anaconda | Anaconda Prompt) ja käivitada käsk
conda install scipy matplotlib sympy jupyter
millega installeeritakse nii Jupyter kui ka paljud teadusarvutusteks vajalikud Pythoni teegid. Anaconda aluseks on paketihaldussüsteem Conda, mis lubab vastavalt vajadusele juurde installeerida ja uuendada Pythoni mooduleid jm komponente.

Windowsi Start-menüüsse tekib muuhulgas otsetee Anaconda | Jupyter Notebook. Sellel klikkides käivitatakse Jupyter Notebook'i serverprogramm ja selle graafiline liides avaneb veebilehitsejas (aadressil http://localhost:8888).

Jupyter Notebook'i käivitamisel avaneb töölaud (dashboard). Algselt kuvatakse failibrauser (vaheleht Files) juurkataloogi sisuga. Failibrauseriga saab teostada põhilisi faili- ja kaustatoiminguid (navigeerimine kaustapuus, uute alamkaustade loomine, jms). Jupyteri märkmeraamatuid esindavad failid laiendiga .ipynb. Hiireklikk faili nimel avab märkmeraamatu veebibrauseri uuel vahelehel. Uus Python-keelega seostatud töölehe fail tekib käsuga New | Python 3. Fail luuakse aktiivses kaustas (esialgu nimega Untitled.ipynb) ja avaneb kohe uuel vahelehel. Failinimi kuvatakse ka märkmeraamatu tiitelribal. Sellel klikkides saab failinime ära muuta.

Failibrauser kuvab algselt käivituskataloogi sisu, milleks vaikimisi on kasutaja kodukataloog (Windowsis C:\Users\Kasutaja). Töölehe faile saab luua või avada ainult käivituskataloogis ja selle alamkataloogides. Kui soovitav töökataloog asub mujal (võib-olla eraldi partitsioonil), tuleb otsetee seadetes näidata sobilik juurkataloog (jutumärkides) käsureal viimase parameetrina (algselt on seal süsteemimuutuja %USERPROFILE%, mis osutab kasutaja kodukataloogile). Kataloogi nime saab kopeerida näiteks Windows Exploreri aadressiribalt (kui kataloogi nimi on vigane, et pruugi Jupyter Notebook käivituda).

Jupyter Notebook'ile on saadaval rida kasulikke laiendusi (extensions). Suure hulga selliseid laiendusi saab installeerida käsuga
conda install -c conda-forge jupyter_contrib_nbextensions
Jupyteri töölauale tekib uus vaheleht Nbextensions, kus saab vajaliku laienduse aktiveerida ja seadistada.

Table of Contents: tekitab ja kuvab töölehe sisukorra
Collapsible Headings: võimaldab kinni/lahti voltida töölehe sektsioone
Equation Auto Numbering: seadistab MathJax valemite nummerdamise ja viitamise

Töölehed

Sissejuhatus IPYNB HTML
Arvud ja arvumassiivid IPYNB HTML
Graafikud (Matplotlib) IPYNB HTML
Interaktiivsed ja animeeritud graafikud IPYNB HTML
Lineaaralgebra IPYNB HTML
Tõenäosusteooria ja statistika IPYNB HTML
Interpoleerimine IPYNB HTML
Regressioonanalüüs
Vähimruutude meetod
Funktsioonide sobitamine
Optimeerimine
IPYNB HTML
Numbriline diferentseerimine ja integreerimine IPYNB HTML
Harilikud diferentsiaalvõrrandid IPYNB HTML
Osatuletistega diferentsiaalvõrrandid IPYNB HTML
Signaalitöötlus IPYNB HTML

Kirjandus

Programmeerimise algkursused

Järgnevad eestikeelsed tekstid ja videoloengud (kõik Pythoni baasil) pakuvad äkki midagi neile, kelle jaoks programmeerimine on täiesti võõras.

Teadusarvutustele pühendatud materjalid