computação científica com python, numpy e scipy

34
Computação Científica com Python A cobra também é inteligente! 1

Upload: marcel-caraciolo

Post on 18-Dec-2014

10.964 views

Category:

Technology


12 download

DESCRIPTION

Palestra sobre Computação Científica com Python, Scipy e Numpy ministrada durante o XVI Encontro do Grupo de Usuários de Python de Pernambuco, Recife - Pernambuco - 03/09/2011 por Marcel Pinheiro Caraciolo

TRANSCRIPT

Page 1: Computação Científica com Python, Numpy e Scipy

Computação Científicacom Python

A cobra também é inteligente!

1

Page 2: Computação Científica com Python, Numpy e Scipy

Membro do Muriçoca Labs - Labs de Projetos com Machine Learning

2

Page 3: Computação Científica com Python, Numpy e Scipy

!"#$%&$'()*')+,-$,&(&./-)*')&01-)#23'0) 444)5-()%(&)

6"#1&7')6"(+0'6)')89:"0)*')&+,'#*',)

444);(&)<"<0"-1':&)$"$&#1')+&*,/-444)

444)=)+&:-1'6)+>):90:%0-?)

*&*-6?+,-:'66&('#1-?)"#1',8&:'@)

!"#$%&'()*+&)*,'&-."&#&#$&/0121345&&&!"#$%&#&

6)%!7.%7#819:#;+1<=>;+1;+?@1,&

:%+!A*1*.:BA%*1-#7A*1"ACAD1,&

6=7%#E!)")F#C>)&&G."#A$%)F.&H&.8IA%.*1&-=$:#.$)7,J&

O que é Python ?

Marcel Caraciolo - @marcelcaraciolo3

Page 4: Computação Científica com Python, Numpy e Scipy

Ciclo de Desenvolvimento em P&D

!"#$%&'$()*+,$-.$/&0(12

345&/&67*28$2.98*/2

3(:;&/$28*/2.98*/2

3#%$/$()967*2$2<&/59;&=967*2

Marcel Caraciolo - @marcelcaraciolo4

Page 5: Computação Científica com Python, Numpy e Scipy

Ciclo de Desenvolvimento em P&D

!"#$%&'$()*+,$-.$/&0(12

345&/&67*28$2.98*/2

3(:;&/$28*/2.98*/2

3#%$/$()967*2$2<&/59;&=967*2

Marcel Caraciolo - @marcelcaraciolo5

Page 6: Computação Científica com Python, Numpy e Scipy

Uso de software facilita muito!

!"#$%&'$()*+,$-./$0&1(**

!"#"$%&'()*)+,-$

!"#$%&'()"()$%*('+,"()$%*--%

!"#"$%-"./*)*$

.'/,'#$%.'/0"1'23'*

012*2-#"+,-$3$4)*(".)5"+,-$

4(5657$%8%

Marcel Caraciolo - @marcelcaraciolo6

Page 7: Computação Científica com Python, Numpy e Scipy

Uso de Python facilita mais ainda!!

!"#$%&'$()*+,-$./0$1&2(++

!"#$%$&'()*+),-*(%)

!"#$%&$'()#*+,-./*"0+,1,

,-.-)!/-01%$%)

2$34/+,(-54/+,1+

23+%+/.-4(/)5)6$%#-0$7-4(/!

6#.*').'57+,4/8.+,1,

Marcel Caraciolo - @marcelcaraciolo7

Page 8: Computação Científica com Python, Numpy e Scipy

8

Page 9: Computação Científica com Python, Numpy e Scipy

Aquisição de Dados

Repositórios de DadosUCI, MovieLens, AWS, KDD, etc.

http://archive.ics.uci.edu/ml/

Marcel Caraciolo - @marcelcaraciolo9

Page 10: Computação Científica com Python, Numpy e Scipy

Usando o loadtxt()

Marcel Caraciolo - @marcelcaraciolo

from numpy import loadtxt

def class2int(s):! if s == 'Iris-setosa':! ! return 1! elif s == 'Iris-versicolor':! ! return 0! else:! ! return 2

ary1 = loadtxt('iris.data', delimiter=',', converters={4: lambda s: class2int(s)}, skiprows=1)

print ary1

http://archive.ics.uci.edu/ml/datasets/Iris

%n1, n2, n3, n4, class5.1,3.5,1.4,0.2,Iris-setosa4.9,3.0,1.4,0.2,Iris-setosa4.7,3.2,1.3,0.2,Iris-setosa4.6,3.1,1.5,0.2,Iris-setosa5.0,3.6,1.4,0.2,Iris-setosa5.4,3.9,1.7,0.4,Iris-setosa4.6,3.4,1.4,0.3,Iris-setosa

...

http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html#numpy.loadtxt

10

Page 11: Computação Científica com Python, Numpy e Scipy

Aquisição de Dados

WEBWEB

11

Page 12: Computação Científica com Python, Numpy e Scipy

Bibliotecas como BeautifulSoap

<html> <body> <table> <tr> <td> 3.0 </td> <td> 4.0 </td> </tr> <tr> <td> 5.0 </td> <td> 6.2 </td> </tr> </table> </body></html>

from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup(''.join(html))

table = soup.find('table') rows = table.findAll('tr')for tr in rows: cols = tr.findAll('td') for td in cols: text = ''.join(td.find(text=True)) print text+"|", print

$ sudo aptitude install python-beautifulsoup

Marcel Caraciolo - @marcelcaraciolo

3.0 4.0

5.0 6.2

12

Page 13: Computação Científica com Python, Numpy e Scipy

Análise dos Dados

!"#$%&! "#$%&$'#()*(+*,,-.*$'-/(0-,-(1#.0&'-23#(14*$561-(

! 789*:,-(;4$*-,<(=,#1*//-.*$'#(

'()$%&! >?)&8#()*(-8'#($@A*8(*.(=B'C#$(0-,-(',-:-8C-,(1#.(A*'#,*/(*(.-',4D*/(

! E-/*-)#(*.("F(:*.(#G.4D-)#(

!!"#$%&&'''()*+$,(-./!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"#$%&&012$,()*+$,(-./!

Marcel Caraciolo - @marcelcaraciolo13

Page 14: Computação Científica com Python, Numpy e Scipy

História do Numpy e Scipy

Criado por Eric Jones e Travis Oliphant em 2001

Atualmente mantida por uma comunidade de usuários

Marcel Caraciolo - @marcelcaraciolo

http://enthought.com

http://conference.scipy.org/scipy2011/

14

Page 15: Computação Científica com Python, Numpy e Scipy

Numpy e Scipy como ambiente científico

Capaz de competir com outros softwares matemáticos como Matlab, Octave, R, Scilab, etc.

Ipython - http://ipython.org/

Ferramenta essencial para todo desenvolvedor que vai trabalhar com Python + Scipy + Numpy + Matplotlib

Marcel Caraciolo - @marcelcaraciolo15

Page 16: Computação Científica com Python, Numpy e Scipy

Numpy e Scipy como ambiente científico

Comparando com o Matlab

Scipy/Numpy Matlab

Python com múltiplos argumentos, valores default, etc.

Definição de função de Matlab bem restrita

Programação Orientada a Objetos Programação Procedural

Gratuito Pago

Marcel Caraciolo - @marcelcaraciolo

http://www.scipy.org/NumPy_for_Matlab_Users

16

Page 17: Computação Científica com Python, Numpy e Scipy

Numpy e Scipy como ambiente científico

Mas eu gosto de plotar gráficos!

Matplotlib - http://matplotlib.sourceforge.net/

Python 2D Plotting library

MATLAB plotting framework - matplotlib.pyplot

http://www.scipy.org/Cookbook/Matplotlib

Marcel Caraciolo - @marcelcaraciolo17

Page 18: Computação Científica com Python, Numpy e Scipy

Plotando com o PyLab

Marcel Caraciolo - @marcelcaraciolo

$ ipython --pylab

>>> plot(x,sin(x))

>>> plot(x,cos(x))

>>> legend([‘sin’, ‘cos’])

20

!!!"#$%$&'()*+,&*-"*./+*01"

18

Page 19: Computação Científica com Python, Numpy e Scipy

Funcionalidades do Scipy

Organizado em subpacotes, abrangendo vários domínios da computação científica!"#$%&#'(%)')*+,)&,-$%./

! !"#$%&'$()*+,*-./0$1)2+-3*$/"$%#+%()*45"&)-*(),6%&)-*($*1),0.2$78)*1&+%269&1$

Marcel Caraciolo - @marcelcaraciolo19

Page 20: Computação Científica com Python, Numpy e Scipy

Mas por onde começo ?

Scipy e Numpy disponível para diversas plataformas

http://new.scipy.org/download.html

$ sudo apt-get install python-numpy

$ sudo apt-get install python-scipy

ou

!"#$%&%'()*+)#*,-+.&)#! !"#$%&'()*&+#($,-./'0&$121&+#3'2'-)'(&$01)13,241(

! 5))$677-'89("#$%9,2:7+,8-0,1+95)40&! ,;

! !"#$%&#'()*#!++'",#-.)$)/0",! !"#$%&#'()*#!++'",#-.)$*1(",

5))$677-;4$%9("#$%9,2:7

5))$6778889("#$%9,2:

Marcel Caraciolo - @marcelcaraciolo20

Page 21: Computação Científica com Python, Numpy e Scipy

Explorando o Numpy

Arrays e Matrizes!"#$%&'()%*%*+,-./! !""#$%! &#'"()*%

10 11 12 13 14 15

0 1 2 3 4 5

50 51 52 53 54 55

40 41 42 43 44 45

30 31 32 33 34 35

20 21 22 23 24 25

>>> import numpy as np

>>> a = np.array([0,1,2,3,4,5], [10,11,12,13,14,15], [20,21,22,23,24,25], [30,31,32,33,34,35], [40,41,42,43,44,45], [50,51,52,53,54,55]) !!!"#$%&'()*!""!#$%&'()*+

!!!"#$+(&+(*!""!#$%%))'(),*'(((((((

%,)'(,,**+

!!!"#$(&,*!""!#$%-'.-'--'&-')-',-*+

Marcel Caraciolo - @marcelcaraciolo

!!!"#$%&&%'&&%(#))#*+$$%,'"%%'"%-('"

$-,'"-%'"--((.

21

Page 22: Computação Científica com Python, Numpy e Scipy

Explorando o Numpy

Arrays e Matrizes!"#$%&'()%*%*+,-./! !""#$%! &#'"()*%

10 11 12 13 14 15

0 1 2 3 4 5

50 51 52 53 54 55

40 41 42 43 44 45

30 31 32 33 34 35

20 21 22 23 24 25

>>> import numpy as np

>>> a = np.matrix([0,1,2,3,4,5], [10,11,12,13,14,15], [20,21,22,23,24,25], [30,31,32,33,34,35], [40,41,42,43,44,45], [50,51,52,53,54,55]) >>> m_t = a.transpose()

>>> mask = a < 30

>>> a[mask] #Matriz com valores < 30

Marcel Caraciolo - @marcelcaraciolo22

Page 23: Computação Científica com Python, Numpy e Scipy

Explorando o Numpy

Operação de Arrays e Matrizes!"#$%&'()%*%*+,-./! !"#$%&'#()*+,)-$$%.()#)/%0$12#(

! 3$1%&4+)5#)6#0+$#(numpy.zeros((M,N))

numpy.ones((M,N))

numpy.empty((M,N))

numpy.zeros_like(m)

Vetor MxN de zeros

Vetor MxN de ums

Vetor MxN vazio (qualquer valor)

Vetor de zeros com formato de mnumpy.zeros_like(m)

numpy.ones_like(m)

numpy.empty_like(m)

numpy.random.random((M,N))

numpy.identity(N)

numpy.array([(1,2,3),(4,5,6)])

numpy.matrix([[1,2,3],[4,5,6]])

numpy.arange(0.,1.,.3)numpy.linspace(0.1, 1, 10)

Vetor de zeros com formato de m

Vetor de ums com formato de m

Vetor de vazio com formato de m

Vetor com valores aleatórios

Matriz Identidade, N x N

Especifica os valores da matriz

Especifica os valores da matriz

Vetor com Inicio I, fim F, passo P

Vetor com N valores de I à F

Marcel Caraciolo - @marcelcaraciolo23

Page 24: Computação Científica com Python, Numpy e Scipy

Explorando o Numpy

Arrays e Matrizes

>>> import numpy as np

>>> a = np.array([1,2,3], [4,5,6], [7,8,9]) >>> np.mean(a[0,:]) #media>>> np.std(a[:,1]) #desvio-padrao>>> np.min(a) #minimo>>> np.max(a) #maximo>>> b = a.T #transposta>>> m = np.dot(a,b) #multipl.>>> r = np.random.random((100,00))>>> i = np.linalg.inv(r) #inversa>>> eigval, eigvec = numpy.linalg.eig(r) #auto-vetores

Marcel Caraciolo - @marcelcaracioloMarcel Caraciolo - @marcelcaraciolo24

Page 25: Computação Científica com Python, Numpy e Scipy

Explorando o Scipy

Álgebra Linear (scipy.linalg)

>>> import numpy as np

>>> a = np.array([1,2,3], [4,5,6], [7,8,9]) >>> np.mean(a[0,:])>>> np.std(a[:,1])>>> np.min(a)>>> np.max(a)>>> b = a.T>>> m = np.dot(a,b)>>> r = np.random.random((100,00))>>> i = np.linalg.inv(r)>>> eigval, eigvec = numpy.linalg.eig(r)

Marcel Caraciolo - @marcelcaraciolo25

Page 26: Computação Científica com Python, Numpy e Scipy

Explorando o Scipy

Álgebra Linear (scipy.linalg)

Marcel Caraciolo - @marcelcaraciolo

>>> import numpy as np>>> from scipy import linalg

>>> a = np.matrix(‘1 1 1; 1 -2 2; 0 1 2’)>>> b = np.matrix(‘0;4;2’)#Resolve a eq ax= b>>> x = linalg.solve(a,b)>>> print x

Resolvendo sistemas de equações

26

Page 27: Computação Científica com Python, Numpy e Scipy

Explorando o Scipy

Estatísticas (scipy.stats)

Marcel Caraciolo - @marcelcaraciolo

>>> from scipy import stats# 100 random values from a Poisson distribution with mu = 1.0>>> s = stats.norm.rvs(loc=0.0,scale=1.0, size=100)# basic statistics from the matrix.>>> n, min_max, mean, var, skew, kurt = stats.describe(s)>>> print("Number of elements: {0:d}".format(n))>>> print("Minimum: {0:8.6f} Maximum: {1:8.6f}".format(min_max[0], min_max[1]))>>> print("Mean: {0:8.6f}".format(mean))>>> print("Variance: {0:8.6f}".format(var))>>> print("Skew : {0:8.6f}".format(skew))>>> print("Kurtosis: {0:8.6f}".format(kurt))

27

Page 28: Computação Científica com Python, Numpy e Scipy

Explorando o Scipy

Clusterização (scipy.cluster)

Algoritmos de Agrupamento

Atualmente, apenas o K-Means

!"#$%&'()*+,-./$0(1230"#$%&'4! !"#$%&'($)*+,*!#%-./(,0'$

! !'-/"(,0',1*/.,0/)*$*!"#$%&'()!"#*+,%'-! ./012,341(+$(%52$&+,6%+1(&71('85$29,',1&%+1

Marcel Caraciolo - @marcelcaraciolo28

Page 29: Computação Científica com Python, Numpy e Scipy

Explorando o Scipy

Clusterização (scipy.cluster)!"#$%&'()*+,-./$0(1230"#$%&'4! !"#$%&'((

))

** !"#$%&'+,

--

..

//

01 2#,3&4+5#6+

7859$,$:56;<,2#,3&:++;=;3:>?',#,2#,2;+5@A3;:+

Marcel Caraciolo - @marcelcaraciolo

Fonte: http://www.slideshare.net/santiagosilas/computao-cientfica-com-numpy-e-scipy-7797060

29

Page 30: Computação Científica com Python, Numpy e Scipy

Explorando o Scipy

Clusterização (scipy.cluster)!"#$%&'()*&+,-#./0123'! !"#$%&'(')*%+'

Marcel Caraciolo - @marcelcaraciolo30

Page 31: Computação Científica com Python, Numpy e Scipy

Projetos Scikits

Projetos interessantes usando o Scipy/Numpy

Marcel Caraciolo - @marcelcaraciolo

Scikit-learnToolkit de aprendizagem de máquina com algoritmos como PCA, SVM, Bayes, etc.

Divisi2Toolkit para representação de matrizes esparsas e uso de SVD

PandasToolkit para trabalho com dados estatísticos com Scipy e Numpy

Sympy -Toolkit para manipulação para matemática simbólica

*CrabToolkit para construção de sistemas de recomendação com Scipy e Numpy

http://code.google.com/p/sympy/

http://statsmodels.sourceforge.net/

http://csc.media.mit.edu/docs/divisi2/

http://scikit-learn.sourceforge.net/stable/

https://github.com/muricoca/crab

31

Page 32: Computação Científica com Python, Numpy e Scipy

Clusterização (scipy.cluster)

Algoritmos de Agrupamento

Atualmente, apenas o K-Means

!"#$%&'()*+,-./$0(1230"#$%&'4! !"#$%&'($)*+,*!#%-./(,0'$

! !'-/"(,0',1*/.,0/)*$*!"#$%&'()!"#*+,%'-! ./012,341(+$(%52$&+,6%+1(&71('85$29,',1&%+1

Marcel Caraciolo - @marcelcaraciolo32

Page 33: Computação Científica com Python, Numpy e Scipy

Dúvidas?

Marcel Caraciolo - @marcelcaraciolo

1. Documentaçãohttp://docs.scipy.org/doc/

1I. Tutoriais http://scipy-lectures.github.com/

III. Listas de Discussão http://www.scipy.org/Mailing_Lists

http://pyscience-brasil.wikidot.com/

IV. Livros Computação Científica com Python por Flávio Coelho, Editora Lulu.com

33

Page 34: Computação Científica com Python, Numpy e Scipy

Computação Científicacom Python

A cobra também é inteligente!

marcel{@orygens, @muricoca} . com

34