Computação Científicacom Python
A cobra também é inteligente!
1
Membro do Muriçoca Labs - Labs de Projetos com Machine Learning
2
!"#$%&$'()*')+,-$,&(&./-)*')&01-)#23'0) 444)5-()%(&)
6"#1&7')6"(+0'6)')89:"0)*')&+,'#*',)
444);(&)<"<0"-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
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
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
Uso de software facilita muito!
!"#$%&'$()*+,$-./$0&1(**
!"#"$%&'()*)+,-$
!"#$%&'()"()$%*('+,"()$%*--%
!"#"$%-"./*)*$
.'/,'#$%.'/0"1'23'*
012*2-#"+,-$3$4)*(".)5"+,-$
4(5657$%8%
Marcel Caraciolo - @marcelcaraciolo6
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
8
Aquisição de Dados
Repositórios de DadosUCI, MovieLens, AWS, KDD, etc.
http://archive.ics.uci.edu/ml/
Marcel Caraciolo - @marcelcaraciolo9
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
Aquisição de Dados
WEBWEB
11
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
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
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
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
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
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
Plotando com o PyLab
Marcel Caraciolo - @marcelcaraciolo
$ ipython --pylab
>>> plot(x,sin(x))
>>> plot(x,cos(x))
>>> legend([‘sin’, ‘cos’])
20
!!!"#$%$&'()*+,&*-"*./+*01"
18
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
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
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
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
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
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
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
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
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
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
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
Explorando o Scipy
Clusterização (scipy.cluster)!"#$%&'()*&+,-#./0123'! !"#$%&'(')*%+'
Marcel Caraciolo - @marcelcaraciolo30
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
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
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
Computação Científicacom Python
A cobra também é inteligente!
marcel{@orygens, @muricoca} . com
34