Cursul de Algebra liniara prezinta metode liniare cu aplicatii in diverse domenii ale Computer Science (CS):
compresia datelor
cautare pe WEB
determinarea nodului central intr-o retea
designul sistemelor de recomandare de servicii si produse
analiza retelelor sociale
grafica 2D si 3D
procesarea imaginii
machine learning, data science
Metodele si tehnicile de baza pe care le studiem le experimentam prin calcul direct. Pentru aplicatiile in CS,
care implica folosirea matricilor 2D de dimensiuni mari, folosim pachetul numpy
si scipy
din Python
. In plus pentru vizualizarea datelor vom apela matplotlib
, iar pentru generarea si analiza retelelor, networkx
.
In [3]:
from IPython.display import Image
Image(url='https://www.python.org/static/community_logos/python-logo.png')
Out[3]:
Descarcati distributia Python 2.7, Anaconda, de la Continuum Analytics: ContinuumIO pentru sistemul de operare pe care il folositi.
Dupa instalare, sub Windows, identificati icon-ul Spyder si dati click pentru a-l lansa.
Sub Linux se lanseaza din terminal: spyder
In [4]:
Image(url='https://code.google.com/p/spyderlib/logo?cct=1379130103')
Out[4]:
Spyder este un mediu interactiv de dezvoltare (IDE) pentru Python, care permite editarea codului si executarea lui.
In [5]:
Image(filename='Imag/MeniuSpyderNB.jpg')
Out[5]:
De ce Python
?
Pentru ca este usor de invatat
Codul in Python este usor citibil si nu necesita managementul memoriei (alocare memorie si testare daca s-a facut alocarea, etc).
Python este open source si gratuit.
Exista o multime de tutoriale pe WEB si o comunitate activa de dezvoltatori, care acorda asistenta pe stackoverflow, grupuri si liste de discutii.
In Timisoara exista grupul pasionatilor de Python
, PyTim
.
PyTim is a Python user group which focuses on bringing together all the Python enthusiasts in Timisoara. Whether you are an experienced Python developer or just a beginner, join our community and meet, talk and learn from the best Python hackers in town.
Python
este considerat limbajul oficial la Google:
Python has been an important part of Google since the beginning, and remains so as the system grows and evolves. Today dozens of Google engineers use Python, and we're looking for more people with skills in this language." said Peter Norvig, director of search quality at Google, Inc
Fisierul pe care-l cititi acum este un IPython Notebook, convertit in fisier html
.
In [6]:
Image(url='http://ipython.org/ipython-doc/stable/_static/logo.png')
Out[6]:
Ce este IPython Notebook? Raspunsul este dat aici:
The IPython Notebook is a web-based interactive computational environment where you can combine code execution, text, mathematics, plots and rich media into a single document
Versiunea curenta de IPython Notebook, inclusa in distributia Anaconda
, este 2.3.1
IPython Notebook este o aplicatie WEB bazata pe structura server-client.
Dupa ce ati instalat Anaconda creati un folder numit, de exemplu, Nbooks.
Apoi din cmd
sub Windows sau terminal sub Linux, schimbati directorul:
cd Documents\Nbooks
respectiv
cd Nbooks
In cmd
sau terminal
invocati IPython Notebook:
ipython notebook
Aceasta comanda starteaza un server notebook. Acest server ruleaza pe adresa http://127.0.0.1:8888/ si este accesibil doar din localhost
.
Dupa ce serverul a fost startat de comanda ipython notebook
in bara browserului vedeti afisat
http://localhost:8888/tree
.
In browser apare dashboard-ul care vizualizeaza toate notebook-urile din director (fisiere cu extensia ipynb
).
Daca in prealabil ati descarcat in directorul Nbooks
acest notebook atunci dashboard-ul afiseaza numele acestui fisier.
Puteti crea unul nou, dand click pe butonul New Notebook
din dashboard.
In [7]:
Image(filename='Imag/dashboard.jpg')
Out[7]:
Dupa ce un fisier ipynb
a fost deschis este afisat urmatorul toolbar:
In [8]:
Image(filename='Imag/toolbar.jpg')
Out[8]:
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:
$A\in\mathbb{R}^{m\times n}, \quad Null(A)=\{v\in\mathbb{R}^n\:|\: Av=\theta\}$
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$
Intr-un notebook celulele de tip Code
sunt cele care incep cu In[n]
, unde n
este un numar intreg ce indica
a cata celula Code
este celula respectiva. Rezultatul rularii celulei n
este afisat in celula urmatoare, care incepe cu Out[n]
.
Daca s-au facut erori de editare, se selecteaza din toolbar Raw Text
(aceeasi locatie unde apare Code
si Markdown
). Dupa ce s-au facut corecturile in modul Raw Text
se selecteaza
tipul de celula adecvat si se ruleaza din nou. Prin experimentare veti realiza care este procedura.
Sa dam acum un exemplu de cod Python (mai multe detalii in urmatorul notebook ce se va posta). Acest notebook are scopul doar de a evidentia capabilitatile acestui instrument de predare/invatare.
In [9]:
# O linie care incepe cu diez # este o linie de comentariu
import numpy as np # importam modulul `numpy` ce contine functii ce opereaza asupra array-urilor
A=np.array([[2,-1],[3,4]], float)
print A # acum dam run si:
In [10]:
#calculam determinantul lui A
d=np.linalg.det(A)
print 'determinatul este: ', d
In [11]:
%matplotlib inline
# figurile generate sunt afisate instant in notebook
import matplotlib.pyplot as plt# importa biblioteca grafica
In [12]:
x=np.arange(0, 2*np.pi, 0.01)
y=np.sin(2*x)+0.5*np.cos(x)
plt.plot(x,y,'r')# deseneaza graficul functiei y(x)=sin(2x)+0.5 cos(x)
Out[12]:
Intr-o celula se poate rula si cod extern, de pe WEB, folosind comanda magica %load
. Codul este incarcat in celula imediat urmatoare si poate fi editat inainte de rulare.
In [13]:
%load http://matplotlib.org/mpl_examples/images_contours_and_fields/pcolormesh_levels.py
In [15]:
"""
Shows how to combine Normalization and Colormap instances to draw
"levels" in pcolor, pcolormesh and imshow type plots in a similar
way to the levels keyword argument to contour/contourf.
"""
import matplotlib.pyplot as plt
from matplotlib.colors import BoundaryNorm
from matplotlib.ticker import MaxNLocator
import numpy as np
# make these smaller to increase the resolution
dx, dy = 0.05, 0.05
# generate 2 2d grids for the x & y bounds
y, x = np.mgrid[slice(1, 5 + dy, dy),
slice(1, 5 + dx, dx)]
z = np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
# x and y are bounds, so z should be the value *inside* those bounds.
# Therefore, remove the last value from the z array.
z = z[:-1, :-1]
levels = MaxNLocator(nbins=15).tick_values(z.min(), z.max())
# pick the desired colormap, sensible levels, and define a normalization
# instance which takes data values and translates those into levels.
cmap = plt.get_cmap('PiYG')
norm = BoundaryNorm(levels, ncolors=cmap.N, clip=True)
plt.subplot(111)
# contours are *point* based plots, so convert our bound into point
# centers
plt.contourf(x[:-1, :-1] + dx / 2.,
y[:-1, :-1] + dy / 2., z, levels=levels,
cmap=cmap)
plt.colorbar()
plt.title('contourf with levels')
plt.show()
Parintele sistemului IPython (un shell interactiv pentru Python) este Fernando Perez de la University of California Berkeley.
In video-ul urmator Fernando prezinta evolutia proiectului IPython
in cei 12 ani de la startare.
In [18]:
from IPython.display import YouTubeVideo
YouTubeVideo('F4rFuIb1Ie4')
Out[18]:
Pentru a afisa un video de pe youtube sau vimeo este necesar doar id
-ul videoului.
In [19]:
from IPython.display import VimeoVideo
VimeoVideo(78015169)
Out[19]:
Intr-un IPython Notebook se poate crea si integra un audio control:
In [20]:
from IPython.display import Audio
Audio(filename="Data/ocean-flight.wav")
# ocean-flight downloaded from:
#http://www.freestockmusic.com/2013/classical-production-music/
#free-classical-production-music-ocean-flight/
Out[20]:
Intr-un frame se poate afisa linkul la un slideshow de pe slideshare.net
. embed_code
se identifica din sursa html
a paginii respective:
In [21]:
from IPython.display import IFrame
IFrame("http://www.slideshare.net/slideshow/embed_code/27653235", 400, 300)
Out[21]:
Ipython Notebook poate vizualiza si imagini de pe WEB, de exemplu de pe Facebook:
In [22]:
Image(url='https://scontent-a-fra.xx.fbcdn.net/hphotos-frc3/v/t1.0-9/1000243_629550250402307_1381858575_n.jpg?oh=f3dfbac3600974eb5621c570e773c371&oe=54D2E020')
Out[22]:
Din notebook se pot urmari cursuri online: Least Square Examples - KhanAcademy
In [23]:
YouTubeVideo('8mAZYv5wIcE')
Out[23]:
Aici este o galerie de IPython Notebooks.
In concluzie, Ipython si Ipython Notebook ofera instrumente open source pentru calcul interactiv in Python.
IPython Notebook afiseaza orice tip de date ce pot fi afisate in browser: imagini, video-uri, fisiere locale, etc
Noi vom folosi IPython Notebook pentru a crea cursuri si seminarii executabile. In celule cod vom introduce cod ce ilustreaza diverse metode liniare folosite in CS.
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 [24]:
Image(filename='Imag/download.jpg')
Out[24]:
Rularea celulelor 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!!!!!
Un IPython Notebook se poate converti intr-un fisier html
, static, dand comanda:
ipython nbconvert NumeNbook.ipynb --to hml
Fisierul NumeNbook.html
, generat, se insereaza apoi intr-o pagina WEB.
http://www.adresa.ro/FolderNbooks
,
doar fisierul ipynb
si apoi sa fie invocat serviciul WEB, gratuit, nbviewer
, notebook viewer, inserand in pagina linkul:http://nbviewer.ipython.org/url/adresa.ro/FolderNbooks/NumeNbook.ipynb
Pentru a putea afisa continutul oricarui IPython Notebook de pe web, 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
In [1]:
from IPython.core.display import HTML
def css_styling():
styles = open("./custom.css", "r").read()
return HTML(styles)
css_styling()
Out[1]: