Ce este Jupyter Notebook?
Jupyter Notebook este o platforma web interactiva open-source care permite crearea, rularea si distribuirea documentelor de tip notebook. Un astfel de document integreaza secvente de cod, vizualizari, descrieri in mod text, ecuatii, rezultate, resurse media, si reprezinta un mediu puternic atat pentru dezvoltarea codului, cat si pentru comunicarea rezultatelor.
In momentul de fata, Jupyter Notekook poate fi utilizat cu succes in diverse activitati din ingineria si stiinta datelor (Data Engineering and Science), precum: curatarea si transformarea datelor, analiza exploratorie a datelor, vizualizarea datelor, modelarea statistica, invatarea automata, invatarea profunda.
Tehnologia Jupyter Notebook a fost dezvoltata la nivelul Proiectului Jupyter, un proiect non-profit desprins din IPython in anul 2014 cu scopul de a dezvolta software open-source si servicii pentru calcul interactiv in toate limbajele de programare. Jupyter Notebook este construit din IPython, o modalitate interactiva de rulare a codului Python pe baza modelului Read-Eval-Print-Loop. Desi implicit sistemul Jupyter ruleaza doar un singur kernel IPython care permite utilizarea limbajului Python, acesta ofera suport pentru nu mai putin de 40 de alte limbaje de programare prin instalarea unor kerneluri suplimentare (Julia, R, Scala, Java, Matlab, Octave, JavaScript, Go, Haskell).
In afara tehnologiei Jupyter Notebook, proiectul Jupyter propune o suita de aplicatii software pentru calcul interactiv care include diverse pachete:
• JupyterLab: este noua interfata web dezvoltata in cadrul proiectului Jupyter, care ofera o structura modulara si o experienta mult mai apropiata de cea a lucrului intr-un mediu integrat de dezvoltare (IDE);
• Qt console: aplicatie cu interfata grafica similara terminalului IPython, dar care ofera o serie de facilitati suplimentare, precum: figuri inline, editare pe mai multe linii cu evidentierea sintaxelor, indicatii grafice;
• Jupyter nbviewer: este o unealta creata in cadrul comunitatii Jupyter pentru redarea online a notebookurilor sau pentru navigarea la nivelul colectiilor de notebookuri gazduite prin intermediul platformei GitHub;
• Binder: permite transformarea unui repository Git intr-o colectie de notebookuri interactive; este un serviciu open-source care ofera posibilitatea deschiderii notebookurilor intr-un mediu executabil, facand astfel codul imediat reproductibil de oricine, oriunde;
• JupyterHub: ofera o versiune multi-utilizator a notebookurilor conceputa pentru companii, sali de clasa sau laboaratoare de cercetare.
Instalare Jupyter Notebook
Jupyter Notebook nu este parte a distributiei oficiale Python, dar instalarea sa poate fi realizata foarte simplu din terminal prin intermediul managerului de pachete pip, folosind urmatoarea comanda:
C:\Users\airman>pip install notebook
Dupa finalizarea procesului de instalare, putem porni Jupyter Notebook folosind comnada jupyter notebook din terminal, asa cum se poate observa si mai jos.
C:\Users\airman\datalab>jupyter notebook [I 2022-01-18 22:25:23.128 LabApp] JupyterLab extension loaded from C:\Users\airman\anaconda3\lib\site-packages\jupyterlab [I 2022-01-18 22:25:23.128 LabApp] JupyterLab application directory is C:\Users\airman\anaconda3\share\jupyter\lab [I 22:25:23.137 NotebookApp] Serving notebooks from local directory: C:\Users\airman\datalab [I 22:25:23.138 NotebookApp] Jupyter Notebook 6.4.6 is running at: [I 22:25:23.138 NotebookApp] http://localhost:8889/?token=73c6aef40457a55f6961c65314cbf96c045f7407e3752b68 [I 22:25:23.138 NotebookApp] or http://127.0.0.1:8889/?token=73c6aef40457a55f6961c65314cbf96c045f7407e3752b68 [I 22:25:23.139 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [C 22:25:23.166 NotebookApp] To access the notebook, open this file in a browser: file:///C:/Users/airman/AppData/Roaming/jupyter/runtime/nbserver-19192-open.html Or copy and paste one of these URLs: http://localhost:8889/?token=73c6aef40457a55f6961c65314cbf96c045f7407e3752b68 or http://127.0.0.1:8889/?token=73c6aef40457a55f6961c65314cbf96c045f7407e3752b68
Imediat dupa rularea acestei comenzi putem vedea cum aplicatia Jupyter Notebook se deschide in browser la urmatoarea adresa http://localhost:8888/.
Se poate observa faptul ca Jupyter Notebook ruleaza in browser si afiseaza continutul unui folder de la nivelul sistemului de fisiere, locatie in care pot fi salvate si executate fisiere cu extensia .ipynb (notebookuri). In acest moment avem disponibil un server Jupyter functional, care ruleaza local.
O alta modalitate de utilizarea a Jupyter Notebook este disponibila prin intermediul distributiei Anaconda. Anaconda este cea mai utilizata distributie Python pentru stiinta datelor; distributia include o serie de unelte si biblioteci cu larga utilizare, precum Jupter Notebook, Pandas, NumPy sau Matplotlib.
Instalarea Anaconda de baza vine cu un singur mediu de dezvoltare Python (mediu Conda), cunoscut sub numele de base, mediu care include un set de pachete preinstalate. Un mediu Conda este un mediu de dezvoltare izolat, independent de instalarea de baza Python. Mediul implicit de la nivelul distributiei Anaconda (base) beneficiaza din start de o instalare Jupyter Notebook.
Daca se doreste insa instalarea Jupyter Notebook la nivelul unui nou mediu Conda, acest lucru poate fi realizat prin intermediul aplicatiei Anaconda Navigator, astfel:
• la nivelul noului mediu Conda utilizam optiunea de cautare a pachetelor precizand termenul notebook sau jupyter notebook;
• dupa filtrarea si afisarea pachetelor care includ unul din termenii specificati la pasul anterior, bifam campul de marcaj corespunzator pachetului notebook si selectam butonul Apply;
• la nivelul pachetelor disponibile in mediul Conda putem identifica pachetul instalat, dar si pachetele instalate odata cu acesta (necesare pentru utilizarea Jupyter Notebook).
Instalarea Jupyter Notebook intr-un nou mediu de dezvoltare poate fi realizata si prin intermediul Conda, managerul de pachete si medii de dezvoltare standard de la nivelul distributiei Anaconda. In acest caz rularea comenzii urmatoare din Anaconda Prompt asigura instalarea Jupyter Notebook.
(pid-env) C:\Users\airman>conda install notebook Collecting package metadata (current_repodata.json): done Solving environment: done ## Package Plan ## environment location: C:\Users\airman\anaconda3\envs\pid-env added / updated specs: - notebook ... Proceed ([y]/n)? y Preparing transaction: done Verifying transaction: done Executing transaction: done
Si in acest caz lansarea aplicatiei se poate realiza foarte simplu ruland comanda jupyter notebook din Anaconda Prompt, imediat dupa instalare.
(pid-env) C:\Users\airman\datalab>jupyter notebook [I 22:39:24.637 NotebookApp] Serving notebooks from local directory: C:\Users\airman\datalab [I 22:39:24.637 NotebookApp] Jupyter Notebook 6.4.6 is running at: [I 22:39:24.637 NotebookApp] http://localhost:8888/?token=daefc715b1be961a43c304e98996b2aacddd6d71c5165268 [I 22:39:24.637 NotebookApp] or http://127.0.0.1:8888/?token=daefc715b1be961a43c304e98996b2aacddd6d71c5165268 [I 22:39:24.637 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [C 22:39:24.676 NotebookApp] To access the notebook, open this file in a browser: file:///C:/Users/airman/AppData/Roaming/jupyter/runtime/nbserver-18876-open.html Or copy and paste one of these URLs: http://localhost:8888/?token=daefc715b1be961a43c304e98996b2aacddd6d71c5165268 or http://127.0.0.1:8888/?token=daefc715b1be961a43c304e98996b2aacddd6d71c5165268
Crearea si rularea unui notebook
Dupa lansarea Jupyter Notebook, in clientul web corespunzator statiei locale este disponibil panoul de control al aplicatiei (Notebook Dashboard). Acesta contine structura de fisiere si directoare a locatiei din care a fost pornit serverul sau structura de fisiere si directoare a unei locatii care este accesata de la nivelul panoului de control. Chiar daca Notebook Dashboard este construit explicit pentru administrarea fisierelor de tip notebook, el permite si gestionarea unor alte tipuri de fisiere, precum fisiere care contin date (.csv, .json), secvente de cod (.py, .html) sau chiar imagini (.png, .jpg).
Daca un notebook ruleaza (este activ), pictograma sa la nivelul panoului de control este de culoare verde. Un astfel de notebook este disponibil si in sectiunea Running -> Notebooks din Notebook Dashboard. Notebookurile inactive vor fi reprezentate cu culoare gri.
Cea mai simpla modalitate de creare a unui fisier de tip notebook (.ipynb) are in vedere accesarea butonului New din partea dreapta a panoului de control si selectarea kernelului care sa fie utilizat la nivelul notebookului (Python3). Intr-un nou tab de la nivelul clientului web va fi astfel deschisa interfata care permite editarea fisierului de tip notebook. Pentru notebookul introdus putem avea in vedere din start modificarea numelui implicit, din Untitled, in Introducere Jupyter Notebook. Operatia de redenumire poate fi realizata prin intermediul meniului File > Rename sau prin accesarea numelui notebookului.
Notebook-urile Jupyter reprezinta o modalitate eficienta de dezvoltare a secventelor de cod Python pentru analiza datelor. Acestea ofera posibilitatea de implementare si rulare individuala a liniilor de cod, fara a fi necesara scrierea intregului program. Mai mult, actualizarea si modificarea unor linii sau secvente de cod se realizeaza la fel de usor, totul fiind disponibil la nivelul unei interfete web.
Elementele de baza de la nivelul notebookurilor poarta numele de celule. Acestea pot fi de doua tipuri:
• celule de tip cod (Code Cell), permit introducerea de secvente de cod care pot fi rulate la nivelul kernelului; rezultatul rularii unei astfel de secvente este afisat sub celula care introduce secventa de cod;
• celule de marcare (Markdown Cell), contin text formatat cu ajutorul limbajului de marcare Markdown; celulele de marcare permit introducerea de titluri (headers), liste (bullet points), descrieri sau chiar secvente de cod pentru prezentari.
Intr-un notebook Jupyter, exista intotdeauna o celula activa evidentiata printr-un chenar a carui culoare indica modul de lucru, comanda sau editare. Modul de comanda este activat daca celula detine un contur albastru, in timp ce conturul verde indica modul de editare.
Implicit celulele de la nivelul unui notebook sunt celule de tip cod, dar acestea pot fi transformate in celule de marcare prin utilizarea optiunii M in modul de comanda. In acelasi mod de comanda este disponibila inclusiv transformarea unei celule de marcare in celula de cod, folosind optiunea Y.
Exemple de comenzi rapide de la tastatura pentru lucrul in Jupyter Notebook includ urmatoarele posibilitati:
• trecerea de la modul comanda la modul editare se poate face rapid cu Enter si Esc;
• in modul comanda optiunea M va transforma celula activa intr-o celula de marcare;
• in modul comanda optiunea Y va transforma celula activa intr-o celula de cod;
• optiunile A si B permit inserarea unei celule deasupra, respectiv sub celula activa, in modul comanda;
• stergerea unei celule active se poate realiza in modul comanda cu dublu D;
• rularea celulelor selectate poate fi activata in modul comanda prin Ctrl – Enter;
• salvarea continutului notebookului poate fi realizata cu Ctrl – S.
O lista completa a comenzilor din Jupyter Notebook poate fi consultata folosind combinatia de taste Ctrl + Shift + P (Open Command Palette).
Notebookurile Jupyter au la baza un format de document construit cu ajutorul JSON (JavaScript Object Notation). Acestea pastreaza istoricul complet al sesiunilor utilizatorului, inclusiv codul, descrierile text, formulele si rezultatele, la nivelul unor fisiere de tip .ipynb. Prin accesarea optiunii Edit > Edit Notebook Metadata din meniu exista chiar posibilitatea de a vizualiza metadatele fisierului stocate in format JSON.
{ "kernelspec": { "name": "python3", "display_name": "Python 3", "language": "python" }, "language_info": { "name": "python", "version": "3.8.12", "mimetype": "text/x-python", "codemirror_mode": { "name": "ipython", "version": 3 }, "pygments_lexer": "ipython3", "nbconvert_exporter": "python", "file_extension": ".py" } }
Kerneluri in ecosistemul Jupyter
Echipa Jupyter mentine proiectul IPython, care este instalat ca si kernel implicit (IPyKernel) intr-un numar de clienti Jupyter. In plus, pe langa limbajul Python la nivelul unui notebook mai pot fi utilizate si o serie de alte limbaje de programare. Comunitatea Jupyter ofera mai multe kerneluri pentru alte limbaje de programare, lista completa fiind disponibila la adresa urmatoare https://github.com/jupyter/jupyter/wiki/Jupyter-kernels.
Kernel | Link | Limbaj |
---|---|---|
IJulia | https://github.com/JuliaLang/IJulia.jl | Julia |
IPyKernel | https://github.com/ipython/ipykernel | Python |
IRKernel | http://irkernel.github.io/ | R |
IGo | https://github.com/takluyver/igo | Go |
IPerl | https://metacpan.org/release/Devel-IPerl | Perl |
IPHP | https://github.com/dawehner/ipython-php | PHP |
MATLAB Kernel | https://github.com/calysto/matlab_kernel | Matlab |
IJava | https://github.com/SpencerPark/IJava | Java |
mariadb_kernel | https://github.com/MariaDB/mariadb_kernel | SQL |
Un kernel reprezinta un proces specific unui limbaj de programare care ruleaza independent si care interactioneaza cu aplicatiile Jupyter si interfetele corespunzatoare acestora. Kernelul Jupyter implicit are la baza IPython, poarta numele de IPyKernel si ofera un mediu de lucru puternic pentru calculul interactiv in Python.
Scopul principal al mediilor de dezvoltare Python este acela de a dispune de un mediu controlat pentru proiectele Python. Acest lucru este util mai ales daca sunt necesare la nivelul proiectelor versiuni diferite de Python, pachete diferite sau versiuni de pachete diferite. Pentru a putea utiliza un notebook Jupyter intr-un mediu de dezvoltare, un kernel corespunzator mediului trebuie adaugat in lista de kerneluri disponibile pentru notebookurile Jupyter.
Consideram mediul de dezvoltare pid-env, mediu caruia dorim sa ii asociem un kernel care sa poate fi utilizat pentru rularea de notebookuri Jupyter care necesita lucrul cu pachetele instalate la nivelul mediul de dezvoltare.
(base) C:\Users\airman>conda activate pid-env
Oferirea mediului de dezvoltare pid-env ca si kernel Jupyter se realizeaza prin rularea urmatoarei comenzi. Aceasta va suprascrie orice kernel existent care detine numele precizat in parametrul –name. Daca este prezent, parametrul –display-name precizeaza numele sub care va fi afisat kernelul la nivelul meniurilor aplicatiei Jupyter Notebook.
(pid-env) C:\Users\airman>ipython kernel install --user --name pid-env --display-name PID Installed kernelspec pid-env in C:\Users\airman\AppData\Roaming\jupyter\kernels\pid-env
Dupa rularea comenzii, in locatia precizata in mesaj este disponibil si fisierul de configurare (kernel.json) al kernelului nou creat.
{ "argv": [ "C:\\Users\\airman\\anaconda3\\envs\\pid-env\\python.exe", "-m", "ipykernel_launcher", "-f", "{connection_file}" ], "display_name": "PID", "language": "python", "metadata": { "debugger": true } }
Din acest moment este posibila alegerea mediului de dezvoltare pid-env (PID), ca si kernel pentru notebookuri Jupyter.
(pid-env) C:\Users\airman\datalab>jupyter notebook [I 22:44:39.862 NotebookApp] Serving notebooks from local directory: C:\Users\airman\datalab [I 22:44:39.862 NotebookApp] Jupyter Notebook 6.4.6 is running at: [I 22:44:39.862 NotebookApp] http://localhost:8888/?token=2792debaa6ae764ce3bbe145b25f98b20bcc607e6a076a2b [I 22:44:39.862 NotebookApp] or http://127.0.0.1:8888/?token=2792debaa6ae764ce3bbe145b25f98b20bcc607e6a076a2b [I 22:44:39.862 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [C 22:44:39.895 NotebookApp] To access the notebook, open this file in a browser: file:///C:/Users/airman/AppData/Roaming/jupyter/runtime/nbserver-18664-open.html Or copy and paste one of these URLs: http://localhost:8888/?token=2792debaa6ae764ce3bbe145b25f98b20bcc607e6a076a2b or http://127.0.0.1:8888/?token=2792debaa6ae764ce3bbe145b25f98b20bcc607e6a076a2b
Vizualizarea kernelului care tocmai a fost adaugat in lista de kerneluri disponibile pentru notebookuri Jupyter se poate realiza prin rularea urmatoarei comenzi:
(pid-env) C:\Users\airman>jupyter kernelspec list Available kernels: pid-env C:\Users\airman\AppData\Roaming\jupyter\kernels\pid-env python3 C:\Users\airman\anaconda3\envs\pid-env\share\jupyter\kernels\python3
Cand nu mai este necesar, kernelul corespunzator mediului de dezvoltare poate fi sters din lista de kerneluri Jupyter.
(pid-env) C:\Users\airman>jupyter kernelspec uninstall pid-env Kernel specs to remove: pid-env C:\Users\airman\AppData\Roaming\jupyter\kernels\pid-env Remove 1 kernel specs [y/N]: y [RemoveKernelSpec] Removed C:\Users\airman\AppData\Roaming\jupyter\kernels\pid-env (pid-env) C:\Users\airman>jupyter kernelspec list Available kernels: python3 C:\Users\airman\anaconda3\envs\pid-env\share\jupyter\kernels\python3