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]: