Back-End

20 mar, 2017

DataViz – Ferramentas para visualização de dados em Python

Publicidade

Olá, pessoal! Tudo bem?

Hoje quero mostrar algumas ferramentas muito interessantes para visualização de dados. Pretendo retomar o assunto do artigo anterior, onde usamos um pouco de machine learning para categorizar reportagens em português, mas a pausa é bem justificada!

O início

Se você já leu qualquer tutorial da internet sobre data analysis, machine learning, deep learning e etc em Python, com certeza você já viu o matplotlib em ação! Ela, provavelmente, é a primeira ferramenta de plotagem que a maioria das pessoas tem contato (visto sua frequência de uso nos tutoriais), mas não se engane, pois se trata de uma biblioteca muito poderosa!

É usada para gerar imagens em 2D de várias formas, como gráficos de barra, linha, pizza, histogramas e outros. Vamos ver um exemplo:

import numpy as np
import matplotlib.pyplot as plt

#data
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [3, 2, 5, 7, 4, 2, 4, 6, 7, 8]
ysize = [10, 20, 4, 15, 9, 9, 14, 8, 4, 9]
    

for i in range (0, len(x)):
    plt.plot(x[i], y[i], linestyle="None", marker="o", markersize=ysize[i], color="red")
    
plt.plot(x, y, linestyle="dotted", color="red")


plt.xlim(np.min(x)-1.3, np.max(x)+1.3) #optional 
plt.ylim(np.min(y)-1.3, np.max(y)+1.3) #optional 

plt.xlabel("random y")
plt.ylabel("random x")

plt.show()
Exemplo retirado deste link

Para saber mais sobre matplotlib, vale a pena conferir a documentação oficial que é ótima e cheia de exemplos. Outra fonte interessante que me ajudou foi o artigo do Felipe Galvão sobre o assunto.

O passo seguinte

Outra ferramenta de visualização muito utilizada em tutoriais, artigos e treinamentos é o Seaborn. Esta foi a segunda ferramenta que tive contato para este fim e acredito que seja assim para muita gente!

O Seaborn é baseado no matplotlib e tem o objetivo de prover uma interface de mais alto nível para a geração de visualizações estatísticas.

import seaborn as sns
%matplotlib inline

sns.set(style="darkgrid", color_codes=True)

tips = sns.load_dataset("tips")
g = sns.jointplot("total_bill", "tip", data=tips, kind="reg",
                  xlim=(0, 60), ylim=(0, 12), color="r", size=7)
Exemplo retirado deste link

Neste gráfico vemos a correlação entre 2 conjuntos de dados que foram carregados pela própria biblioteca, tudo de forma bem simples e com pouco código!

Indo alem! Interatividade!

Recentemente, conheci o Bokeh e fiquei impressionado! Ele usa o D3.js para gerar visualizações interativas dos dados nos navegadores. Assim, podemos interagir com as visualizações através de zoom, seleção, navegação etc.

from bokeh.charts import Line, show
from bokeh.plotting import output_notebook
output_notebook()

# build a dataset where multiple columns measure the same thing
data = dict(python=[2, 3, 7, 5, 26, 221, 44, 233, 254, 265, 266, 267, 120, 111],
            pypy=[12, 33, 47, 15, 126, 121, 144, 233, 254, 225, 226, 267, 110, 130],
            jython=[22, 43, 10, 25, 26, 101, 114, 203, 194, 215, 201, 227, 139, 160],
            test=['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar',
                  'foo', 'bar', 'foo', 'bar']
            )

# create a line chart where each column of measures receives a unique color and dash style
line = Line(data, y=['python', 'pypy', 'jython'],
            dash=['python', 'pypy', 'jython'],
            color=['python', 'pypy', 'jython'],
            legend_sort_field = 'color',
            legend_sort_direction = 'ascending',
            title="Interpreter Sample Data", ylabel='Duration', legend=True)

show(line)
Para interagir com o gráfico, acesse este link

O Bokeh, assim como as outras ferramentas, pode gerar imagens em arquivos separados ou integrados ao Jupyter Notebook. Para saber mais sobre essa integração, acesse essa documentação específica.

No blog do Felipe Galvão também há um artigo sobre o Bokeh que recomendo a leitura.

Visualização em 3D

Essa é a ferramenta que me motivou a escrever este artigo: o Ipyvolume. Trata-se de uma biblioteca para visualização interativa em 3D da forma mais simples possível. O projeto está em desenvolvimento, mas em sua versão 0.3 já surpreende com as funcionalidades disponíveis (realidade virtual, por exemplo).

Podemos gerar visualizações 3D com outras ferramentas (o site do projeto cita algumas) e até com matplotlib, mas o esforço é bem maior. Vamos a um exemplo:

import ipyvolume.pylab as p3
import numpy as np

# create 2d grids: x, y, and r
u = np.linspace(-10, 10, 50)
x, y = np.meshgrid(u, u)
r = np.sqrt(x**2+y**2)
print("x,y and z are of shape", x.shape)
# and turn them into 1d
x = x.flatten()
y = y.flatten()
r = r.flatten()
print("and flattened of shape", x.shape)

# create a sequence of 15 time elements
time = np.linspace(0, np.pi*2, 15)
z = np.array([(np.cos(r + t) * np.exp(-r/5)) for t in time])
print("z is of shape", z.shape)

# draw the scatter plot, and add controls with animate_glyphs
p3.figure()
s = p3.scatter(x, z, y, marker="sphere")
p3.animate_glyphs(s, interval=200)
p3.ylim(-3,3)
p3.show()

Caso queira visualizar ou interagir com o gráfico, acesse a página do projeto: http://ipyvolume.readthedocs.io/en/latest/animation.html.

Concluindo…

O objetivo deste artigo era apenas mostrar algumas ferramentas interessantes para a visualização e análise de dados e, por isso, demos pouca atenção ao código. Pretendo escrever mais sobre este assunto com mais detalhes assim que começar a aplicar estas (ou outras) ferramentas em minhas análises.

Todas as referências que usei estão lincadas ao longo do texto para te ajudar a saber mais sobre cada ferramenta!

Você conhece ou usa outras ferramentas para visualização de dados? Gostou do artigo? Tem alguma dica, dúvida ou sugestão? Então, comenta aqui em baixo e vamos conversando!

Espero ter ajudado.

Um abraço!