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

14,990 views

Published on

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

Published in: Technology
1 Comment
6 Likes
Statistics
Notes
No Downloads
Views
Total views
14,990
On SlideShare
0
From Embeds
0
Number of Embeds
6,984
Actions
Shares
0
Downloads
251
Comments
1
Likes
6
Embeds 0
No embeds

No notes for slide

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

  1. 1. Computação Científica com Python A cobra também é inteligente! 1
  2. 2. Membro do Muriçoca Labs - Labs de Projetos com Machine Learning 2
  3. 3. O que é Python ? 6=7%#E!)")F#C>)&& G."#A$%)F.&H&.8IA%.*1&-=$:#.$)7,J& !"#$%&()*+&)*,& !"#$%&$()*) -."&#&#$&/0121345& +,-$,&(&./-) &&!"#$%&#& *)&01-)#230) 444)5-()%(&) 6"#1&7) 6"(+06)) 89:"0)*) 444);(&) &+,#*,) <"<0"-1:&) 444)=)+&:-16) $"$&#1) +>):90:%0-?) +&*,/-444) *&*-6?+,-:66:%+!A*1*.:BA%*1-#7A*1"ACAD1,& &(#1-?) "#1,8&:@) 6)%!7.%7#819:#;+1<=>;+1;+?@1,& Marcel Caraciolo - @marcelcaraciolo 3
  4. 4. Ciclo de Desenvolvimento em P&D 3#%$/$()967*2$2 !"#$%&$()* <&/59;&=967*2 +,$-.$/&0(12 3(:;&/$28*/2 345&/&67*28$2 .98*/2 .98*/2 Marcel Caraciolo - @marcelcaraciolo 4
  5. 5. Ciclo de Desenvolvimento em P&D 3#%$/$()967*2$2 !"#$%&$()* <&/59;&=967*2 +,$-.$/&0(12 3(:;&/$28*/2 345&/&67*28$2 .98*/2 .98*/2 Marcel Caraciolo - @marcelcaraciolo 5
  6. 6. Uso de software facilita muito! 012*2-#"+,-$3$ 4)*(".)5"+,-$ !"#$%&$()* 4(5657$%8% +,$-./$0&1(** !"#"$%-"./*)*$ !"#"$%&()*)+,-$ ./,#$% !"#$%&()"()$%./0"123* *(+,"()$%*--% Marcel Caraciolo - @marcelcaraciolo 6
  7. 7. Uso de Python facilita mais ainda!! 23+%+/.-4(/)5) ! 6$%#-0$7-4(/ !"#$%&$()*+ 6#.*).57+, ,-$./0$1&2(++ 4/8.+,1, ,-.-)!/-01%$%) !"#$%$&()*+),-*(%) 2$34/+, !"#$%&$()#*+, (-54/+,1+ -./*"0+,1, Marcel Caraciolo - @marcelcaraciolo 7
  8. 8. 8
  9. 9. Aquisição de Dadoshttp://archive.ics.uci.edu/ml/ Repositórios de Dados UCI, MovieLens, AWS, KDD, etc. Marcel Caraciolo - @marcelcaraciolo 9
  10. 10. Usando o loadtxt()from numpy import loadtxtdef class2int(s):! if s == Iris-setosa:! ! return 1! elif s == Iris-versicolor:! ! return 0 http://archive.ics.uci.edu/ml/datasets/Iris! else:! ! return 2 %n1, n2, n3, n4, class 5.1,3.5,1.4,0.2,Iris-setosa 4.9,3.0,1.4,0.2,Iris-setosa 4.7,3.2,1.3,0.2,Iris-setosaary1 = loadtxt(iris.data, delimiter=,, 4.6,3.1,1.5,0.2,Iris-setosa 5.0,3.6,1.4,0.2,Iris-setosaconverters={4: lambda s: class2int(s)}, 5.4,3.9,1.7,0.4,Iris-setosaskiprows=1) 4.6,3.4,1.4,0.3,Iris-setosa ...print ary1 http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html#numpy.loadtxt Marcel Caraciolo - @marcelcaraciolo 10
  11. 11. Aquisição de Dados WEB 11
  12. 12. Bibliotecas como BeautifulSoap<html> <body> <table> <tr> from BeautifulSoup import BeautifulSoup <td> 3.0 </td> soup = BeautifulSoup(.join(html)) <td> 4.0 </td> table = soup.find(table) </tr> 3.0 4.0 <tr>   <td> 5.0 6.2 rows = table.findAll(tr) 5.0 </td> for tr in rows: <td> 6.2 cols = tr.findAll(td) </td> for td in cols: </tr> </table> text = .join(td.find(text=True)) </body></html> print text+"|", print $ sudo aptitude install python-beautifulsoup Marcel Caraciolo - @marcelcaraciolo 12
  13. 13. Análise dos Dados !"#$%& ()$%& ! "#$%&$#()*( ! >?)&8#()*(-8#($@A*8( +*,,-.*$-/(0-,-( *.(=BC#$(0-,-( 1#.0&-23#( ,-:-8C-,(1#.( 14*$561-( A*#,*/(*(.-,4D*/( ! 789*:,-(;4$*-,<( ! E-/*-)#(*.("F(:*.( =,#1*//-.*$#( #G.4D-)#(!!"#$%&&()*+$,(-./!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"#$%&&012$,()*+$,(-./! Marcel Caraciolo - @marcelcaraciolo 13
  14. 14. História do Numpy e ScipyCriado por Eric Jones e Travis Oliphant em 2001Atualmente mantida por uma comunidade de usuários http://conference.scipy.org/scipy2011/ http://enthought.com Marcel Caraciolo - @marcelcaraciolo 14
  15. 15. 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 - @marcelcaraciolo 15
  16. 16. Numpy e Scipy como ambiente científico Comparando com o Matlab http://www.scipy.org/NumPy_for_Matlab_Users Scipy/Numpy MatlabPython com múltiplos argumentos, Definição de função de Matlab bem valores default, etc. restritaProgramação Orientada a Objetos Programação Procedural Gratuito Pago Marcel Caraciolo - @marcelcaraciolo 16
  17. 17. Numpy e Scipy como ambiente científicoMas 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 - @marcelcaraciolo 17
  18. 18. Plotando com o PyLab !!!"#$%$&()*+,&*-"*./+*01"$ ipython --pylab>>> plot(x,sin(x))>>> plot(x,cos(x))>>> legend([‘sin’, ‘cos’]) 20 Marcel Caraciolo - @marcelcaraciolo 18
  19. 19. Funcionalidades do ScipyOrganizado 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 - @marcelcaraciolo 19
  20. 20. Mas por onde começo ?Scipy e Numpy disponível para diversas plataformas http://new.scipy.org/download.html !"#$%&%()*+)#*,-+.&)# ! ou !"#$%&()*&+#($,-./0&$121&+#32-)(&$01)13,241( 5))$677-89("#$%9,2:7+,8-0,1+95)40& $ !sudo apt-get install python-numpy ! ,; $ sudo apt-get install python-scipy ! !"#$%&#()*#!++",#-.)$)/0", ! !"#$%&#()*#!++",#-.)$*1(", 5))$677-;4$%9("#$%9,2:7 5))$6778889("#$%9,2: Marcel Caraciolo - @marcelcaraciolo 20
  21. 21. Explorando o Numpy !"#$%&()%*%*+,-./ Arrays e Matrizes ! !""#$%>>> import numpy as np ! &#"()*%>>> a = np.array([0,1,2,3,4,5], [10,11,12,13,14,15], 0 1 2 3 4 5 [20,21,22,23,24,25], [30,31,32,33,34,35], 10 11 12 13 14 15 [40,41,42,43,44,45], 20 21 22 23 24 25 [50,51,52,53,54,55])  30 31 32 33 34 35!!!"#$%&()*!""!#$%&()*+ 40 41 42 43 44 45 50 51 52 53 54 55!!!"#$+(&+(*!""!#$%%))(),*((((((( %,)(,,**+!!!"#$(&,*!""!#$%-.---&-)-,-*+!!!"#$%&&%&&%(#))#*+$$%,"%%"%-(" $-,"-%"--((. Marcel Caraciolo - @marcelcaraciolo 21
  22. 22. Explorando o Numpy !"#$%&()%*%*+,-./ Arrays e Matrizes ! !""#$%>>> import &#"()*% numpy !as np>>> a = np.matrix([0,1,2,3,4,5], 0 1 2 3 4 5 [10,11,12,13,14,15], [20,21,22,23,24,25], 10 11 12 13 14 15 [30,31,32,33,34,35], 20 21 22 23 24 25 [40,41,42,43,44,45], [50,51,52,53,54,55]) 30 31 32 33 34 35  40 41 42 43 44 45>>> m_t = a.transpose() 50 51 52 53 54 55>>> mask = a < 30>>> a[mask] #Matriz com valores < 30 Marcel Caraciolo - @marcelcaraciolo 22
  23. 23. Explorando o Numpy!"#$%&()%*%*+,-./ e Matrizes Operação de Arrays! !"#$%&#()*+,)-$$%.()#)/%0$12#( ! 3$1%&4+)5#)6#0+$#( numpy.zeros((M,N)) Vetor MxN de zeros numpy.ones((M,N)) Vetor MxN de ums numpy.empty((M,N)) Vetor MxN vazio (qualquer valor) numpy.zeros_like(m) Vetor de zeros com formato de m numpy.ones_like(m) Vetor de ums com formato de m numpy.empty_like(m) Vetor de vazio com formato de m numpy.random.random((M,N)) Vetor com valores aleatórios numpy.identity(N) Matriz Identidade, N x N numpy.array([(1,2,3),(4,5,6)]) Especifica os valores da matriz numpy.matrix([[1,2,3],[4,5,6]]) Especifica os valores da matriz numpy.arange(0.,1.,.3) Vetor com Inicio I, fim F, passo P numpy.linspace(0.1, 1, 10) Vetor com N valores de I à F Marcel Caraciolo - @marcelcaraciolo 23
  24. 24. 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 - -@marcelcaraciolo Marcel Caraciolo @marcelcaraciolo 24
  25. 25. 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 - @marcelcaraciolo 25
  26. 26. Explorando o Scipy Álgebra Linear (scipy.linalg) Resolvendo sistemas de equações>>> 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 Marcel Caraciolo - @marcelcaraciolo 26
  27. 27. Explorando o Scipy Estatísticas (scipy.stats)>>> 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)) Marcel Caraciolo - @marcelcaraciolo 27
  28. 28. Explorando o Scipy Clusterização (scipy.cluster) !"#$%&()*+,-./$0(1230"#$%&4Algoritmos de Agrupamento ! !"#$%&($)*+,*!#%-./(,0$ ! !-/"(,0,1*/.,0/)*$*!"#$%&()!"#*+,%-Atualmente, apenas o K-Means ! ./012,341(+$(%52$&+,6%+1(&71(85$29,,1&%+1 Marcel Caraciolo - @marcelcaraciolo 28
  29. 29. Explorando o Scipy !"#$%&()*+,-./$0(1230"#$%&4 Clusterização (scipy.cluster) ! !"#$%& ( ) * !"#$%&+, 01 2#,3&4+5#6+ - . 7859$,$:56;<,2#,3&:++;=;3:>?,#,2#,2;+5@A3;:+ /Fonte: http://www.slideshare.net/santiagosilas/computao-cientfica-com-numpy-e-scipy-7797060 Marcel Caraciolo - @marcelcaraciolo 29
  30. 30. Explorando o Scipy!"#$%&()*&+,-#./0123 Clusterização (scipy.cluster)! !"#$%&()*%+ Marcel Caraciolo - @marcelcaraciolo 30
  31. 31. Projetos ScikitsProjetos interessantes usando o Scipy/Numpy Scikit-learn http://scikit-learn.sourceforge.net/stable/ Toolkit de aprendizagem de máquina com algoritmos como PCA, SVM, Bayes, etc. Divisi2 http://csc.media.mit.edu/docs/divisi2/ Toolkit para representação de matrizes esparsas e uso de SVD Pandas http://statsmodels.sourceforge.net/ Toolkit para trabalho com dados estatísticos com Scipy e Numpy Sympy - http://code.google.com/p/sympy/ Toolkit para manipulação para matemática simbólica *Crab https://github.com/muricoca/crab Toolkit para construção de sistemas de recomendação com Scipy e Numpy Marcel Caraciolo - @marcelcaraciolo 31
  32. 32. Clusterização (scipy.cluster) !"#$%&()*+,-./$0(1230"#$%&4Algoritmos de Agrupamento ! !"#$%&($)*+,*!#%-./(,0$ ! !-/"(,0,1*/.,0/)*$*!"#$%&()!"#*+,%-Atualmente, apenas o K-Means ! ./012,341(+$(%52$&+,6%+1(&71(85$29,,1&%+1 Marcel Caraciolo - @marcelcaraciolo 32
  33. 33. Dúvidas? 1. Documentação http://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 Marcel Caraciolo - @marcelcaraciolo 33
  34. 34. Computação Científica com Python A cobra também é inteligente! marcel{@orygens, @muricoca} . com 34

×