Everton Quadros

Software Developer

© 2020

Bibliotecas Python para Análise de Dados: SciPy

Após conhecer os três pacotes fundamentais do PyData Stack (NumPy, Pandas e Matplotlib), irei agora apresentar um pacote um pouco mais específico: o SciPy.

O SciPy é uma biblioteca voltada para computação científica. O conjunto de algoritmos e funções presentes no SciPy permite estender as funcionalidades do NumPy, transformando uma sessão do Python em um sistema de prototipagem equivalente ao Matlab ou Octave. Nele, estão disponíveis uma série de pacotes para FFT (transformada rápida de Fourier), processamento de sinais e imagens, álgebra linear, etc.

Talk is cheap! Show me the code!

Exemplo de aplicação em Álgebra Linear

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from numpy import *
from pylab import *

A = array([[1,2,3], [4,5,6], [7,8,9]])
b = array([1,2,3])

# Resolvendo um sistema de equações lineares
x = solve(A, b)
x
#=> array([-0.23333333,  0.46666667,  0.1])

A = rand(3,3)
B = rand(3,3)

evals, evecs = eig(A)

evals
#=> array([ 1.12357541, -0.22168406,  0.04558271])

evecs
#=> array([[-0.69511641, -0.72547454,  0.47440231],
#          [-0.42786302,  0.29810437, -0.88013834],
#          [-0.5777079 ,  0.62033901,  0.01728984]])

# Decomposição da matriz em valores singulares
svd(A)
#=> (array([[-0.70675037,  0.70721235,  0.01883096],
#           [-0.42069691, -0.3987242 , -0.81488228],
#           [-0.56878645, -0.58384048,  0.57932052]]),
#    array([1.12603622, 0.29887502, 0.0337361 ]),
#    array([[-0.68149749, -0.38076708, -0.62496208],
#           [-0.50466044, -0.37392978,  0.77813518],
#           [ 0.52998019, -0.84569081, -0.06267413]]))

Transformada de Fourier

1
2
3
4
5
6
7
8
9
10
11
12
from scipy.fftpack import *

# Transformada de Fourier
N = len(t)
dt = t[1]-t[0]

F = fft(y2[:,0]) 

w = fftfreq(N, dt)

fig, ax = subplots(figsize=(9,3))
ax.plot(w, abs(F));

Output

Otimização

1
2
3
4
5
6
7
8
from scipy import optimize

def f(x):
    return 4*x**3 + (x-2)**2 + x**4

fig, ax  = subplots()
x = linspace(-5, 3, 100)
ax.plot(x, f(x));

Output

1
2
3
4
5
6
7
8
x_min = optimize.fmin_bfgs(f, -0.5)
x_min
#=> Optimization terminated successfully.
#            Current function value: 2.804988
#            Iterations: 4
#            Function evaluations: 18
#            Gradient evaluations: 6
#   array([0.46961743])

Estas são apenas algumas das muitas possibilidades oferecidas pelo SciPy. Lembrando que, para compreendê-lo é necessário entender alguns conceitos um pouco mais avançados de Matemática e Estatística. Neste link, você encontra a documentação oficial do SciPy. Abaixo, vou deixar uma lista com o conjunto de pacotes para operações matemáticas e científicas disponíveis nele.

Pacote Descrição
cluster Clustering algorithms
constants Mathematical and physical constants
fftpack Fourier transforms
integrate Numerical integration
interpolate Interpolation
io Input and output
linalg Linear algebra
maxentropy Maximum entropy models
misc Miscellaneous
ndimage Multi-dimensional image processing
odr Orthogonal distance regression
optimize Optimization
signal Signal processing
sparse Sparse matrices
spatial Spatial algorithms and data structures
special Special functions
stats Statistical functions
stsci Image processing
weave C/C++ integration

Até o próximo post, pessoal! 👨‍💻