Bevezetés

A Python programok elkészítéséhez használható eszközök közül többet bemutattam egy korábbi cikkben. Azonban egy fontos alternatíváról elfelejtkeztem, nevezetesen az egyik legegyszerűbb, legnépszerűbb Python IDE, a Jupyter Notebook részletes bemutatása kimaradt. 

Hé, mi az az IDE? Integrated Development Environment – én csak úgy hívom hogy PROGRAM amiben PROGRAMOZNI lehet. Amennyiben pontosan szeretném magyarra fordítani, akkor integrált fejlesztői környezetnek nevezzük, ahol a megadott programnyelveken programokat lehet készíteni és futtatni.

A Jupyter Notebook egy nyílt-forráskódú, interaktív IDE különböző programozási nyelvek számára.
A Jupyter Notebook egy nyílt-forráskódú, interaktív IDE különböző programozási nyelvek számára.

A Python programozás és a programok elkészítésének egyik kiváló eszköze a Jupyter Notebook. Nagyon hatékony a mesterséges intelligencia projektek fejlesztéséhez és bemutatásához is. Aki kezdőként találkozik a programozás kihívásaival, mindenkinek a Jupyter-t javaslom az alapok elsajátításához. Na de pontosan miért is?

Több oka van, az első és talán legfontosabb, hogy nem kell érte fizetni, azaz ingyenesen használható. Ahhoz hogy megértsük, hogyan működik, felfedjük az előnyeit, pár szóban beszélnék az unalmasnak tűnő (de annál fontosabb) működési mechanizmusról és egyéb alkalmazási lehetőségeiről is.

Egy kis háttérinformáció

A jelenleg elérhető Jupyter Notebook, a 2010-ben bemutatott IPython Notebook koncepciójára és rendszerére épül. Az IPython Notebook-ban a REPL modell segítségével oldották meg, hogy a Python kód a terminálon keresztül fusson le, kvázi mint egy felhasználói felületként működik a Python parancssor előtt.

A REPL modell az elnevezés az angol “read-eval-print-loop” szavak kezdőbetűiből származik.

Általánosságban egyszerű, interaktív programozási környezetet jelent, amely a felhasználói bemenetet kiértékeli (végrehajtja), majd az eredményt visszaadja a felhasználónak. A modell alkalmazásának köszönhető, hogy a Jupyter Notebook rendelkezik a legtöbb kényelmi funkciójával.

Amikor egy programkód fut le a Jupyter felületén, valójában az IPython Kernel hajtja végre a feladatokat és kommunikál a Jupyter Notebook felhasználói felületével.

Mivel a program nincs direktbe kötve a Python végrehajtó egységéhez, így lehetséges az hogy a rendszer adott esetben képes más nyelven írott kód kezelésére is. Természetesen ahhoz egy másik nyelv fordító vagy végrehajtó programját kell futtatni a Jupyter rendszerén keresztül. 

Jegyzetek és programkód kapcsolata a Jupyter Notebook felületén.
Jegyzetek és programkód kapcsolata a Jupyter Notebook felületén.

A Jupyter Notebook képes ezen felül tárolni a beírt kódot, valamint a kimenetet, illetve lehetőséget ad jegyzetek készítésére is. Ezt egy nagyon fontos kényelmi funkciónak tartom, mert így képesek vagyunk a programkód és az általa eredményezett kimenetel mellett megjegyzéseket, szöveges-képes magyarázatokat is a programunkba illeszteni.

Ez az egyik funkció, ami a REPL modell alkalmazásának köszönhető. Kvázi, elmesélő történetként tudjuk bemutatni a programunk működését és az eredményeket.

Jupyter Notebook telepítése

Mivel a programot Python kódok futtatására akarjuk alkalmazni, mindenképpen szükség van rá, hogy a gépünkön telepítve legyen a nyelv 2.7 vagy 3.+-os verziója. 

Pip segítségével

A Python beépített programcsomag telepítőjét használva (amennyiben ezzel sem rendelkezünk az alábbi linken letölthetjük), egyszerűen a Python parancssorba a

pip install jupyter

parancsot kell beírni és a telepítés automatikusan megtörténik.

Anaconda segítségével

Abban az esetben, ha kezdőként állunk neki a Python programozás elsajátításának és a Jupyter Notebook felfedezésének, a legjobban a korábbi cikkben is bemutatott Anaconda rendszerrel járunk. A weboldalon kiválasztott telepítő fájl letöltése és telepítése után a Python 3 rendszer és a Jupyter Notebook rögtön használható lesz a számítógépünkön.

Jupyter Notebook indítása

Csak annyi a dolgunk hogy Windows rendszerben a START menü, JUPYTER kulcsszavakat használva, vagy a Python parancssorban a JUPYTER parancsot kiadva, elindítjuk a programunkat. Nem szabad meglepődni, az alapértelmezett böngészőnk fog megnyílni, ott egy böngésző lapon jelenik meg a Jupyter Notebook felhasználói felülete.

A Jupyter Notebook indítása böngészőablakban történik meg.
A Jupyter Notebook indítása böngészőablakban történik meg.

Hamar rá lehet jönni, hogy egy webes applikációt használunk, amely saját, lokális szervert vesz igénybe a programok futtatásához. A

http://localhost:8888/tree

elérési útvonalon minden esetben vissza lehet térni a kezdőoldalra.

Új Python Jupyter Notebook indítása.
Új Python Jupyter Notebook indítása.

A felhasználói felület jobb felső sarkában a New / Új parancs alatt, Python 3 opciót választva, egy új böngésző lapon indul el a programozási jegyzetfüzet. Minden jegyzetfüzet (avagy Notebook) külön böngésző lapon fut, így képesek vagyunk többet is futtatni párhuzamosan.

A kezdő oldalra visszalépve láthatjuk az imént elindított “Untitled.ipynb” névvel rendelkező fájlt. A Jupyter Notebook zöld ikonnal jelöli azokat a jegyzetfüzeteket, melyek aktuálisan meg vannak nyitva.

Miért használjuk az “.ipynb” kiterjesztést?

Aki találkozott már Python programmal, biztosan tudja hogy a fájlokat “.py” kiterjesztéssel tároljuk. Viszont a Jupyter Notebook egy speciális kiterjesztést használ, aminek a tárolási struktúrája eltér a normál fájloktól.

Minden “ipynb” kiterjesztéssel rendelkező file valójában szöveget tartalmaz, a  jegyzet tartalmát JSON formátumban tároljuk el. A tárolási rendszer a JavaScript nyelvből alakult ki, egyszerű adatstruktúrák és asszociációs tömbök mentésére szolgál.

A cikk elején bemutatott példa ipynb fálj részletei.
A cikk elején bemutatott példa ipynb fálj részletei.

A jegyzetfüzet minden egyes része, legyen az kód, szöveg, vagy kép, szöveg egységekbe konvertálnak, a szükséges metaadatokkal együtt. A jegyzetfüzetre jellemző metaadatokat mi is képesek vagyunk módosítani a Szerkesztés / Jegyzetfüzet, metaadatok szerkesztése menüpont alatt.

Jupyter Notebook kezelőfelületének használata

Két kiemelendő része van a jegyzetfüzetnek, a cellák (cells) és kernelek (kernels). A két elem funkciójának megismerése kulcsszerepet játszik a Jupyter Notebook működésének megértésében.

A kernel olyan program, ami értelmezi és végrehajtja a felhasználó által megadott programkódot. Amikor Python kódot írunk a Jupyter jegyzetfüzetbe, nincs extra feladatunk, mert a program beépített kernele ismeri a kígyós nyelvet. De lehetőség van egyéb kernelek segítségével, más nyelven írt programok futtatására is.

A cella maga a tárolóeszköz, amely a megadott szöveget jeleníti meg, vagy a beírt kódot futtatja a kernel segítségével.

Cellák

A cellák tehát azok az elemek, amelyek felépítik a jegyzetfüzetet. Funkció szempontjából 4 típusú cellát különböztetünk meg:

  • Kódot tartalmazó cella: ezekben adjuk meg a futtatandó kódot, a kernel segítségével értelmezi a program, és cella alatt megadja az esetleges kimeneteket.
  • Markdown cella: itt van lehetőség szöveges információ megjelenítésére, az elnevezés a Markdown jelölő nyelvre utal.
  • NBC konverter cella: ez a típus van segítségünkre, amikor konvertálni szeretnénk a jegyzetfüzetet (pl. PDF formátumra).
  • Címsor cella: Ahogy a webes alkalmazásoknál, itt is lehetőségünk van a Jupyter Notebook rendezetté tételére, címsorok, fejlécek használatával.
Jupyter Notebook cella típusok.
Jupyter Notebook cella típusok.

Amikor képet akarunk a füzetbe illeszteni, érdemes direkt linkeket használni. Lehetőség van a jegyzetbe történő rögzítésre is, azonban ez nagyban növeli a füzetünk méretét.

Kernelek

A Jupyter Notebook mögött esetünkben egy Python kernel fut. Amikor futtatunk egy kódot, az a kernel segítségével végrehajtódik és az eredmény, vagy kimenet visszakerül a cella struktúrába és megjelenik a felhasználó számára. Nagyon fontos hogy a kernelbe kerülő információk az egész jegyzetfüzetben az összes cella számára elérhetőek.

Például ha könyvtárakat importálunk az első cellában, és futtatjuk a programkódot, ezek után ha használni szeretnénk az importált elemeket, nincs szükség az újboli beolvasásra, mert a kernel eltárolta az adatokat. Hasonló a helyzet változók definiálása esetén is.

Az esetek nagy részében a jegyzetfüzetben lévő cellák értelmezés fentről lefelé történik. A kernel menüben van lehetőség a program futtatásába történő beavatkozásra.

A cellák bal margójánál van lehetőség az ott megadott programkódot futtatni (lejátszás ikon segítségével), és itt lehet látni ha egy program végtelen ciklusba kerül (folyamatos futás) vagy végrehajtódott.

Jupyter Notebook kernel parancsok.
Jupyter Notebook kernel parancsok.

A kernel menüben lehetőségünk van beavatkozni a programok futtatásába vagy jegyzetfüzet visszaállítására:

  • Restart parancs: újraindítja a kernelt és törli az összes változót,
  • Restart & Clear output parancs: a Restart parancson kívül, törli a kimeneti cellák tartalmát,
  • Restart & Run All parancs: kernel újraindítás, kimeneti cellák törlése és a cellák sorrendben történő futtatása.
  • Interrupt parancs: amennyiben olyan programot indítunk el, amely végtelen ciklusba kerül, vagy nem szeretnénk megvárni a futtatás végét, a megszakítás paranccsal tudjuk megállítani a folyamatot.

Jegyzetfüzet nevének megadása

Amint megnyitottunk egy Jupyter Notebook-ot, érdemes rögtön a “Untitled.ipynb” név helyett egy beszédesebbet választani. Ezt úgy tudjuk megtenni, ha a bal felső sarokban megjelenő fájlnévre kattintunk és rögzítjük a módosítást.

Egy másik módszer a megnyitott jegyzetfüzet Fájl / Átnevezés (File / Rename) funkció használata. Mindenképpen figyelni kell arra, hogy csak olyan jegyzetfüzetet lehet átnevezni, amely éppen nem futtat programkódot.

Másik megoldás a Notebook átnevezésére, a főoldalon található fájlban végrehajtott parancs segítségével történhet meg.

Jegyzetfüzet megosztása

Amikor a Jupyter Notebook megosztásáról beszélünk, általában kétféle célunk lehet. Vagy a csak beírt program részleteket szeretnénk megosztani, vagy kiegészítve azt a program futtatásának eredményeivel. A megosztott jegyzetfüzet pontosan úgy fog megjelenni az olvasó számára, ahogyan azt mi a Jupyter programban látjuk.

A megosztás előtt érdemes a korábban említett kernel parancsok vagy a kimeneti cellák törlésével (Cella / Minden kimenet / Törlés) és a Restart / Run All paranccsal újra futtatni az egész jegyzetfüzetünket.

Ezzel megvédjük magunkat attól, hogy az egyesével történő futtatások és a jegyzetfüzet felépítése során, a cellák nem tökéletesen definiált összefüggése miatt, nem fut le a teljes programkód. Ha ezzel végeztünk, a Fájl / Letöltés mint (File / Download as) paranccsal különféle formátumba lehet letölteni az elkészített munkát (PDF, HTML, ipynb, stb.).

Összefoglalás

Ebben a cikkben összefoglaltam a Jupyter Notebook alkalmazásának alapvető tudnivalóit, elsősorban azoknak üzenve, akik Python programok elkészítéséhez szeretnék alkalmazni ezt a remek és egyszerű rendszert. Ha túljutottunk a telepítésen és a felhasználói felület megismerésén, már könnyedén képesek vagyunk egyszerűbb programokat készíteni és azokat megosztani másokkal.

Egy következő cikkben bemutatom a Jupyter Notebook gyakorlati használatát, ahol programot fogunk készíteni egyszerű adatok beolvasásához és különböző (szöveges, grafikus) prezentáláshoz.