Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

17,800 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

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

×