Visualização interativa de dados usando Bokeh (em Python)

Traduzido de: Interactive Data Visualization using Bokeh (in Python)

Por:

Introdução

Recentemente vi um vídeo da conferência SciPy 2015, “Construindo aplicativos de dados Python com Blaze e Bokeh”, realizada em Austin, Texas, EUA. Não conseguia parar de pensar sobre o poder que essas duas bibliotecas dão aos cientistas de dados usando o Python em todo o mundo. Neste artigo, vou te apresentar para o mundo das possibilidades de visualização de dados usando Bokeh e por que eu acho que esta é uma biblioteca que deve ser aprendida por todo cientista de dados por aí.

O que é Bokeh?

Bokeh é uma biblioteca Python para visualização interativa que tem como alvo os navegadores da Web para representação. Esta é a principal diferença entre Bokeh e outras bibliotecas de visualização. Veja a figura abaixo que explica o fluxo de processo sobre como o Bokeh ajuda a apresentar dados a um navegador da Web.

Como pode-se ver, Bokeh tem ligações com vários linguagens (Python, R, lua e Julia). Essas ligações produzem um arquivo JSON, que funciona como uma entrada para BokehJS (uma biblioteca de JavaScript), que por sua vez apresenta dados para os navegadores web modernos.

Bokeh pode produzir visualização elegante e interativa como D3.js com interatividade de alto desempenho sobre grande volume de dados ou streaming. O Bokeh pode ajudar qualquer pessoa que queira rapidamente e facilmente criar gráficos interativos, dashboards e aplicativos de dados.

O que Bokeh oferece para um cientista de dados?

Comecei minha jornada em ciência de dados como profissional de BI e, em seguida, trilhei meu caminho em modelagem preditiva, ciência de dados e aprendizagem de máquina. Eu confiei principalmente em ferramentas como QlikView & Tableau para visualização de dados e SAS & Python para análise preditiva e ciência de dados. Eu tinha quase zero experiência com JavaScript.

Assim, para todos os meus produtos de dados ou ideias, eu tinha que terceirizar o trabalho ou tinha que colocar minhas ideias através de “wireframes”, que não são ideais para a construção de protótipos rápidos. Agora, com Bokeh, posso continuar a trabalhar no ecossistema Python, mas ainda criar esses protótipos rapidamente.

Benefícios de Bokeh:

  • Bokeh permite construir plots com estatísticas complexas rapidamente e através de comandos simples
  • Bokeh fornece saídas para vários meios como html, notebook e servidor
  • Também podemos incorporar a visualização do Bokeh ao aplicativo flask e django
  • Bokeh pode transformar a visualização escrita em outras bibliotecas como matplotlib, seaborn, ggplot
  • Bokeh tem flexibilidade para aplicar interações, layouts e diferentes opções de estilo para visualização.

Desafios com Bokeh:

  • Como com qualquer biblioteca de código aberto, Bokeh está passando por um monte de desenvolvimento. Assim, o código que você escreve hoje pode não ser inteiramente reutilizável no futuro.
  • Tem relativamente menos opções de visualização, quando comparado com D3.js. mas, não é improvável que em um futuro próximo ele passe a desafiar o D3.js.

Dado os benefícios e os desafios, atualmente é o ideal para desenvolver rapidamente protótipos. No entanto, se você quiser criar algo para ambiente de produção, D3.js ainda pode ser sua melhor aposta.

Para instalar o Bokeh, siga as instruções dadas aqui.

Visualização com Bokeh

O Bokeh oferece recursos poderosos e flexíveis que conferem simplicidade e personalização altamente avançada. Ele fornece múltiplas interfaces de visualização para o usuário como mostrado abaixo:

  • Gráficos: uma interface de alto nível usada para plotar estatísticas complexas de forma rápida e simples.
  • Plotting: uma interface de nível intermediário centrada na composição de glifos visuais.
  • Modelos: uma interface de baixo nível que oferece a máxima flexibilidade aos desenvolvedores de aplicativos.

Gráficos

Como mencionado acima, é uma interface de alto nível usada para apresentar informações na forma de visualização padrão. Esses formulários incluem lote de caixa, gráfico de barras, gráfico de área, mapa de calor, gráfico de donut e muitos outros. Você pode gerar esses gráficos apenas passando quadros de dados, matrizes numpy e dicionários.

Vejamos a metodologia comum para criar um gráfico:

1. Importar a biblioteca e as funções / métodos
2. Preparar os dados
3. Defina o modo de saída (Notebook, Navegador Web ou Servidor)
4. Criar gráfico com opção de estilo (se necessário)
5. Visualize o gráfico

Para entender melhor essas etapas, deixe-me demonstra-las usando o exemplo abaixo:

Gráficos Exemplo-1: Criar um gráfico de barras e visualizá-lo no navegador usando Bokeh

Seguiremos as etapas acima listadas para criar um gráfico:

#Importa biblioteca
from bokeh.charts import Bar, output_file, show 

#usa output_notebook para visualizar no notebook
#prepara os dados (dummy data) 
data = {"y": [1, 2, 3, 4, 5]}

#Output para Line.HTML 
output_file("lines.html", title="line plot example") 

#use output_notebook() para o notebook
#cria um novo gráfico de linha com título e rótulo do eixo
p = Bar(data, title="Line Chart Example", xlabel='x', ylabel='values', width=400, height=400)

#mostra os resultados 
show(p)


No gráfico acima, você pode ver as ferramentas na parte superior (zoom, redimensionar, redefinir, roda zoom) e essas ferramentas permitem que você interaja com o gráfico. Você também pode olhar para as várias opções de gráfico (legenda, xlabel, ylabel, xgrid, largura, altura e muitos outros) e vários exemplos de gráficos aqui.

Exemplo de Gráfico-2: Comparar a distribuição do comprimento do sepal e do petal do conjunto de dados da IRIS utilizando o gráfico Box no bloco de notas

Para criar essa visualização, primeiro, importarei o conjunto de dados da íris usando a biblioteca sklearn. Em seguida, siga as etapas como discutido acima para visualizar gráfico no notebook ipython.

#Conjunto de dados IRIS
from sklearn.datasets import load_iris
import pandas as pd
iris = load_iris()
df = pd.DataFrame(iris.data)
df.columns = ['petal_width','petal_length','sepal_width','sepal_length']

#Importa biblioteca
from bokeh.charts import BoxPlot, output_notebook, show

data = df[['petal_length','sepal_length']]

#Output para Notebook 
output_notebook()

#cria um novo gráfico de linha com título e rótulo do eixo 
p = BoxPlot(data, width=400, height=400)

#mostra os resultados 
show(p)

Gráfico Exemplo-3: Criar um gráfico de linha para o servidor bokeh

Antes de plotar a visualização no servidor Bokeh, você precisa executá-lo.

Se você estiver usando um pacote conda, você pode usar o comando run bokeh-server de qualquer diretório. Caso contrário, o comando python ./bokeh-server deve funcionar em geral. Para mais detalhes sobre isso, consulte este link “Implantando o Bokeh Server”.

Existem vários benefícios da visualização de Plotting no servidor Bokeh:

  • Os plots podem ser publicadas para um público maior
  • Visualiza grandes conjuntos de dados de forma interativa
  • Transmissão de dados para atualização automática de gráficos
  • Criação de painéis e aplicativos

Para iniciar a plotagem no servidor Bokeh, executei o comando bokeh-server para inicializá-lo seguido pelos comandos usados para a visualização.

from bokeh.plotting import figure, output_server, show
output_server("line")
p = figure(plot_width=400, plot_height=400)

#adiciona um renderizador de linha
p.line([5, 2, 3, 4, 5], [5, 7, 2, 4, 5], line_width=2)
show(p)

Plotagem

Plotting é uma interface de nível intermediário centrada na composição de glifos visuais. Aqui, você cria uma visualização combinando vários elementos visuais (ponto, círculos, linha, patch e muitos outros) e ferramentas (ferramenta hover, zoom, Save, reset e outros).

Plots  Bokeh criados usando a interface bokeh.plotting vêm com um conjunto padrão de ferramentas e estilos visuais. Para plotar, siga as etapas abaixo:

1. Importar biblioteca, métodos ou funções
2. Selecione o modo de saída (notebook, navegador da Web, servidor)
3. Ative uma figura (semelhante a matplotlib)
4. Executar subseqüentes operações de plotagem, ele afetará a figura gerada.
5. Visualize-o

Para entender melhor essas etapas, deixe-me demonstra-las usando os exemplos abaixo:

Gráfico Exemplo-1: Criar uma marca quadrada de dispersão no quadro XY do bloco de notas

from bokeh.plotting import figure, output_notebook, show

#Output para notebook
output_notebook()
p = figure(plot_width=400, plot_height=400)

#Adiciona quadrado com tamanho, cor, e alpha
p.square([2, 5, 6, 4], [2, 3, 2, 1, 2], size=20, color="navy")

#Mostra os resultados
show(p)

Da mesma forma, você pode criar várias outros gráficos como linha, cunhas e arco, ovais, imagens, patches e muitos outros, consulte este link para ver vários exemplos.

Gráfico Exemplo-2: Combinar dois elementos visuais em um gráfico

from bokeh.plotting import figure, output_notebook, show

#Output para notebook
output_notebook()

p = figure(plot_width=400, plot_height=400)

#Adiciona quadrado com tamanho, cor, e alpha
p.square([2, 5, 6, 4], [2, 3, 2, 1, 2], size=20, color="navy")
p.line([1, 2, 3, 4, 5], [1, 2, 2, 4, 5], line_width=2) #adicionou uma linha de plotagem à figura existente

#Mostra os resultados
show(p)

Gráfico Examplo-3: Adicione uma ferramenta hover e os rótulos dos eixos ao gráfico acima

from bokeh.plotting import figure, output_notebook, show
from bokeh.models import HoverTool, BoxSelectTool #Para permitir ferramentaas

#Output para notebook 
output_notebook()

#Adiciona ferramentas 
TOOLS = [BoxSelectTool(), HoverTool()]p = figure(plot_width=400, plot_height=400, tools=TOOLS)

#Adiciona quadrado com tamanho, cor, e alpha 
p.square([2, 5, 6, 4], [2, 3, 2, 1, 2], size=20, color="navy", alpha=0.5)

#Elementos visuais 
p.xaxis.axis_label = "X-axis" p.yaxis.axis_label = "Y-axis"

#Mostra resultados 
show(p)

Para obter mais detalhes sobre atributos visuais e ferramentas, consulte estes links:

Styling atributos visuais
Configurando ferramentas de plotagem

Gráfico Exemplo-4: Mapa de plotagem da Índia usando dados de latitude e longitude para limites

Nota: Eu tenho dados para o polígono de latitude e longitude para os limites da Índia em um formato csv. Vou usar isso.

Aqui, iremos com plotagem patch, vamos olhar os comandos abaixo:

#Importa bibliotecas
import pandas as pd
from bokeh.plotting import figure, show, output_notebook

#Importa coordenadas de Latitude e longitude India=pd.read_csv('E:/India.csv') del India['ID'] India.index=['IN0','IN1','IN2','IN3','IN4','IN5']

#Converte valores string para float com coordenadas 
for j in range(0,len(India)): 
   a = India['lats'][j] 
   India['lats'][j] = [float(i) for i in a[1:len(a)-1].split(",")]

for j in range(0,len(India)): 
   a = India['lons'][j] 
   India['lons'][j] = [float(i) for i in a[1:len(a)-1].split(",")]

#Opção de output 
output_notebook()

#Crie seu gráfico 
p = figure(plot_height=400, plot_width=400, toolbar_location="right",x_axis_type=None, y_axis_type=None) 
p.patches(xs=India['lons'], ys=India['lats'], fill_color="white",line_color="black", line_width=0.5)

#Visualiza seu gráfico 
show(p)

 


Notas finais

Neste artigo, nós criamos visualizações usando Bokeh e métodos para apresentá-las em notebooks, html e bokeh-server. Também analisamos os métodos para criar visualização personalizada usando plotagem, onde você pôde combinar vários elementos visuais para representar informações.

Deixe uma resposta