Jupyter Notebook si Python

Pentru ilustrarea aplicatiilor Algebrei Liniare in diverse domenii din CS vom folosi Python si Jupyter Notebook. In acest notebook prezentam pe scurt ce este Jupyter Notebook si cum se instaleaza Python.

Proiectul Jupyter


In [2]:
from IPython.display import Image
Image(url='https://jupyter.org/assets/main-logo.svg')


Out[2]:

Proiectul Jupyter s-a desprins din proiectul IPython in vara acestui an. Proiectul Jupyter consta dintr-o multime de proiecte software, open-source, pentru calcul interactiv in browser.

Interfata cu utilizatorul este Notebook-ul. Notebook-ul este o aplicatie WEB ce ofera un mediu interactiv de calcul in care se combina executia codului (in cazul nostru cod Python), cu text explicativ scris uzual sau in format markdown.

In notebook se pot genera figuri, animatii sau se pot include si afisa imagini, video-uri, sunet, etc.

Codul din Notebook este rulat de un kernel, care este un motor de calcul ce ruleaza in background. La ora actuala exista kernele pentru aproape 40 limbaje de programare. Noi vom folosi un kernel Python.

Proiectul IPython Notebook (cu kernel Python) a fost lansat in 2011 la Universitatea din Berkeley, de catre o echipa condusa de Fernando Perez. In vara anului 2013 s-a lansat prima versiune stabila, care a avut un impact extraordinar asupra dezvoltarii Data Science.

Proiectul Jupyter este sponsorizat de Google, Microsoft, Rackspace si alte organizatii. Acum cateva zile s-a lansat Google Cloud Platform, Datalab, bazat pe Jupyter Notebook: https://cloud.google.com/datalab/.

IPython/Jupyter Notebook permite printre altele si generarea cursurilor si seminariilor interactive. In anul universitar 2013-2014 l-am adoptat si noi pentru cursul de Algebra liniara din semestrul I si Probabilitati si Statistica din semestrul II.

Numeroase cursuri online sunt bazate pe Jupyter Notebook, precum si cursuri in cele mai variate domenii, de la universitati din toata lumea.

Python


In [5]:
from IPython.display import Image
Image(url='https://www.python.org/static/community_logos/python-logo.png')


Out[5]:

Vom folosi distributia Python Anaconda, de la Continuum Analytics. Anaconda este o distributie Python gratuita ce contine aproximativ 100 de pachete Python necesare in procesarea si analiza datelor, calcul stiintific si ingineresc. Exista versiuni pentru Windows, Linux si OS X.

Se descarca de aici https://www.continuum.io/downloads Python 2.7. In momentul in care dati click pe acest link automat este identificat sistemul de operare pe care il aveti si va este afisat linkul de download. Voi doar trebuie sa alegeti intre versiunea pe 32, respectiv 64 de biti. Cred ca toti aveti laptop ce accepta versiunea pe 64 de biti.

  • Dupa descarcare, in Windows dati click pe fisierul descarcat si incepe instalarea.

  • Sub Linux, Python Anaconda se instaleaza intr-un mediu separat si nu va interfera cu Pythonul pre-instalat odata cu sistemul de operare. Dupa descarcare in terminal dati comanda:

bash Anaconda-2.3.0-Linux-x86_64.sh

  • Pentru OS X urmati detaliile din pagina de descarcare (eu am instalat doar pe Ubuntu si Windows).

Cum folosim Jupyter Notebook

Fisierul pe care-l cititi acum este un Jupyter Notebook. El are extensia ipynb (care vine de la IPython Notebook). Dupa ce ati instalat Anaconda Python, aveti automat instalate toate pachetele necesare pentru a crea si rula notebook-uri.

  • Creati un director numit, de exemplu, Jupyter. Cei care au Windows, aveti grija sa aveti calea spre acest director cat mai scurta. Sub Linux creati directorul Jupyter in Home.

  • Sub Windows deschideti o fereastra de comanda, iar sub Linux un terminal si schimbati directorul:

    cd Documents\Jupyter

    respectiv

    cd Jupyter

  • Apoi lansati notebook-ul cu comanda:

    jupyter notebook

  • Aceasta comanda starteaza un server notebook si se deschide o pagina ce are in bara browserului adresa http://localhost:8888/tree.

    In pagina respectiva sunt afisate toate fisierele din directorul Jupyter. Initial la voi acest director este vid. Asa ca veti crea primul notebook selectand New din coltul dreapta, sus, si apoi click pe Python 2. Sau descarcati acest notebook pe care sa-l re-rulati pentru a vedea cum functioneaza (mai jos este explicat cum il descarcati).

  • Dupa ce ati creat un fisier notebook sau l-ati deschis pe acesta, veti vedea meniul notebook-ului:


In [5]:
Image(filename='Imag/JupyterN.jpg')


Out[5]:

Un fisier ipynb este constituit dintr-o succesiune de celule Markdown si Code. In imaginea precedenta celula este setata pe Code.

Inainte de a edita o celula Markdown se selecteaza din toolbar Markdown.

Intr-o celula Markdown se scrie text uzual sau folosind sintaxa Markdown. De exemplu linkurile din acest fisier le-am inserat folosind regula de editare a link-urilor din Markdown.

Intr-o celula Markdown se pot insera si relatii matematice editate in LaTeX:

Matricea $A\in\mathbb{R}^{m\times n}$:

$$ A=\left[\begin{array}{cccc}a_{11}&a_{12}&\ldots &a_{1n}\\ a_{21}&a_{22}&\ldots &a_{2n}\\ \vdots&\vdots&\ldots&\vdots\\ a_{m1}&a_{m2}&\ldots &a_{mn}\end{array}\right]$$

are rangul $r$.

Dupa ce s-a editat celula, se ruleaza selectand din meniu butonul $\blacktriangleright$

Pentru a edita cod Python ce se ruleaza in browser se selecteaza din toolbar Code si dupa ce s-a editat se da din nou click pe run, adica pe $\blacktriangleright$

Daca s-au facut erori de editare, se selecteaza din toolbar Raw NBConvert (aceeasi locatie unde apare Code si Markdown). Dupa ce s-au facut corecturile in modul Raw NBConvert se selecteaza tipul de celula adecvat si se ruleaza din nou. Prin experimentare veti realiza care este procedura.

Exemplu de cod:


In [7]:
%matplotlib inline
import matplotlib.pyplot as plt

imag=plt.imread('Imag/mr_bean.png')
plt.imshow(imag)
plt.colorbar()
print 'Array-ul imag este un array 3D:', imag.shape


Array-ul imag este un array 3D: (529L, 500L, 3L)

Sa ilustram acum cum se pot insera fisiere multi-media in notebook.

Video

Pentru a insera un video de pe youtube sau vimeo avem nevoie doar de id-ul acelui video, care se identifica din adresa lui URL:


In [8]:
from IPython.display import YouTubeVideo
YouTubeVideo('9uq3w6JJS00') # adresa URL https://www.youtube.com/watch?v=9uq3w6JJS00


Out[8]:

Inserarea unui fisier audio


In [9]:
from IPython.display import Audio
Audio(filename="Data/ocean-flight.wav")
#http://www.freestockmusic.com/2013/classical-production-music/
#free-classical-production-music-ocean-flight/


Out[9]:

Animatie in notebook

In acest fisier am generat animarea acelor ceasornicului ca exemplu pentru o tema de curs din semestrul II, la Probabilitati: http://nbviewer.ipython.org/gist/empet/b1344d9bf0325bb4531b

Pe parcurs vom ilustra o multime de alte posibilitati oferite de Jupyter Notebook. Aici gasiti o Galerie de notebook-uri.

Pentru prima experimentare, puteti modifica fisierul ipynb al acestui notebook. Pentru a-l descarca dati click pe sageata ce este afisata in coltul dreapta sus al paginii ce o cititi acum:


In [10]:
Image(filename='Imag/download.jpg')


Out[10]:

In general rularea celulelor unui notebook se face succesiv. Daca incercati sa rulati mai intai o celula interioara s-ar putea sa genereze erori, pentru ca nu au fost rulate celulele precedente care importau diverse module sau functii din module!!!!!

Mai exista posibilitatea sa selectati din meniu Cell si apoi Run All. In acest caz sunt rulate cu un singur click toate celulele notebook-ului.

Dupa ce un Jupyter Notebook a fost rulat complet, se poate converti intr-un fisier html, selectand din meniu

File->Download as -> HTML.

Fisierul html, generat, se poate insera apoi intr-o pagina WEB.

Fisierele ipynb de pe WEB pot fi vizualizate in format html invocand serviciul WEB gratuit, nbviewer,
notebook viewer

  • Pentru a putea afisa continutul oricarui IPython/Jupyter Notebook de pe web, in browserul vostru, instalati extensia Chrome Open in nbviewer sau add-on pentru Firefox.

  • Extensia/add-on actioneaza astfel: dati click pe fisierul cu extensia ipynb (notebook-ul) si apoi click in bara browserului pe extensie/add-on. Automat fisierul este transmis nbviewer-ului si afisat in format html

  • Notebook-urile salvate pe https://github.com/ sunt afisate in format html printr-un singur click pe notebook.
  • Un notebook poate fi partajat direct din Dropbox adaugand

http://nbviewer.ipython.org/url/dl.

in fata adresei notebook-ului salvat in Dropbox si selectat prin click pe share.

Spyder, un IDE pentru Python

In distributia Python, Anaconda, aveti inclus si Spyder, un mediu interactiv de dezvoltare (IDE) pentru Python, care permite editarea codului si executarea lui. Acesta este logo-ul lui:


In [6]:
Image(url='https://avatars2.githubusercontent.com/u/1284937?v=3&s=200')


Out[6]:
  • Sub Windows, la instalare apare un icon Spyder si dand click se lanseaza.

  • Sub Linux se da in terminal comanda:

spyder

Rezultatele rularii in Spyder a unui cod Python sunt afisate in jumatatea dreapta a mediului de editare-rulare.

Selectand din meniu Console se poate seta Python Console si in acest caz dupa fiecare rulare se deschide o fereastra (consola) ce afiseaza fie erori, fie rezultatele rularii, inclusiv partea grafica.

Urmatorul notebook va fi o introducere in Python.


In [8]:
from IPython.core.display import HTML
def css_styling():
    styles = open("./styles/custom.css", "r").read()
    return HTML(styles)
css_styling()


Out[8]: