7 Tipos de Gráficos que Todo Cientista de Dados Deve Conhecer

Conseguir identificar tendências ou a distribuição dos dados normalmente exigem técnicas avançadas de Data Science, e saber plotar gráficos é uma habilidade fundamental para qualquer Cientista de dados.

A simples listagem dos registros em uma tabela não revela quase nada além de valores brutos.

Através de ferramentas gráficas conseguimos visualizar melhor a informação escondida nos dados.

Informações que às vezes nem sabemos que existem ou que podem se revelar com a correta representação dos dados.

A visualização da informação de forma dinâmica não apenas facilita o entendimento e compreensão dos dados como nos ajuda a extrair insights dos dados e modelar novas features para o produto

Além do mais, um gráfico vale mais que mil palavras concorda ? rs

Com esse artigo você vai aprender sobre diferentes tipos de gráficos e como utilizar, bibliotecas e ferramentas para gerar gráficos ricos e como interpretar os resultados.

Resumo da ópera:

Preparando o terreno

preparando-terreno

Neste artigo iremos abordar técnicas e ferramentas de visualização de dados utilizando a linguagem Python.

Você vai aprender a plotar diferentes tipos de gráficos para melhorar suas análises e seus relatórios de resultados.

Existem centenas de bibliotecas Python para visualização de dados além de ferramentas específicas que podem ser utilizadas gratuitamente.

Para iniciar vamos instalar a biblioteca Seaborn que é baseada na Matplotlib que já utilizamos nos artigos anteriores.

Caso você não tenha a biblioteca Matplotlib instalada, siga os passos do artigo 10 Melhores Ferramentas e Bibliotecas para Trabalhar com Mineração de Dados e Big Data.

A instalação da Seaborn é extremamente simples conforme a maioria das bibliotecas Python.

Para isso simplesmente utilize o utilitário pip conforme comando abaixo:

Caso queira instalar através do anaconda execute o utilitário conda conforme comando abaixo:

Bokeh – Visualização de Dados Interativa

visualizacao-dados-bokeh-grafico

Vamos instalar outra biblioteca poderosa para visualização de dados chamada Bokeh.

Bokeh é uma biblioteca para visualização de dados interativa voltada para execução em Web Browser. Podemos facilmente salvar o gráfico gerado em um arquivo html e renderiza-lo em qualquer navegador.

Para instalar o Bokeh execute os comandos abaixo.

Caso queira instalar através do anaconda (caso você não tenha o Anaconda instalado, veja como instalar esse pacote aqui) execute o utilitário conda conforme comando abaixo:

Com o Bokeh instalado o próximo passo é fazer o download das bases de dados de amostra.

Para isso execute os comandos abaixo em um console Python ou em um Notebook utilizando o Jupyter.

Após instalar a biblioteca e baixar os dados de amostra está tudo pronto para conhecer os gráficos.

Histograma, observando a distribuição de frequência..

imagem-visualizacao-dados-gráficos

Histograma é uma representação gráfica muito simples mas extremamente poderosa, pois nos permite visualizar rapidamente informações interessantes sobre os dados.

Através do Histograma podemos visualizar qual a é distribuição de frequência dos dados e sua concentração.

O Histograma é formado por retângulos justapostos que variam seu tamanho de acordo com o volume de dados para uma determinada variável.

Observe que quando analisamos a distribuição dos dados não estamos interessados em valores individuais.

Para plotar um gráfico do tipo Histograma utilizando o Matplotlib usamos o código abaixo.

histograma-matplotlib

Observe que utilizamos os dados de amostra do dataset iris através da coleção flowers que chamamos de dados.

Logo após executamos o método hist() para renderizar o gráfico do tipo Histograma passando apenas os dados do atributo sepal_length e a quantidade de bins. Neste exemplo especificamos o valor de 12 bins.

Agora vamos ver outro exemplo utilizando a biblioteca Bokeh.

Antes de carregar os dados e plotar o gráfico vamos importar as bibliotecas padrões para utilizar o Bokeh.

No código acima importamos o método output_notebook() para especificar que estamos o Bokeh em um Notebook do Jupyter e o método show() para a renderização do gráfico.

Veja como plotar um Histograma com os dados de amostra da coleção iris.

histograma-bokeh-grafico

O código para gerar o Histograma acima é bastante simples.

Nas primeiras linhas instanciamos o objeto Histogram passando o dataset dados como parâmetro para o atributo data especificando que esse é o conjunto de dados que iremos utilizar.

Definimos o atributo petal_length como valor do eixo x através do atributo values.

Especificamos que as cores de cada classe serão atribuídas conforme os valores únicos do atributo species utilizando o atributo color.

Por fim definimos a localização da legenda na parte superior direta e a quantidade de bins com os atributos legend e bins respectivamente.

Os bins são as barras verticais que formam o Histograma.

Quanto menor a quantidade de bins mais os dados estarão agrupados e pode não refletir a representação ideal.

Analisando o gráfico

A partir do Histograma gerado podemos ver claramente que existe uma grande concentração de dados da classe setosa com os valores do atributo petal_length entre 1 e 2.

Já os dados da classe versicolor os dados se concentram entre 4 e 5 do atributo petal_length e da classe virginica entre 5 e 6.

Veja que visualizamos de forma fácil a distribuição dos dados com o Histograma.

Barras e Linhas, mais fácil que isso impossível…

visualizacao-dados-graficos

Uma maneira fácil e rápida para mostrar intervalos e comparativos em valores é através de gráficos de barras.

Barras com orientação tanto horizontal quanto vertical são recursos visuais poderosos para representar a informação.

Seguindo o mesmo raciocínio, vamos ver um exemplo utilizando a biblioteca Matplotlib e logo após com a biblioteca Bokeh.

Para renderizar os gráficos de barras utilizando o matplotlib execute os comandos abaixo.

grafico-barras-matplotlib

Para esse exemplo definimos aleatoriamente os dados do eixo y, depois geramos utilizando o método range um conjunto de dados com o mesma quantidade de elementos do vetor y, especificamos a largura das barras através do método width e por fim renderizamos o gráfico utilizando o método bar.

Para renderizar as barras no formato horizontal apenas substitua o método bar pelo barh, simples hein ?

A biblioteca Bokeh também nos permite plotar gráficos de barras com poucas linhas de código, veja.

No código acima importamos o objeto figure para a geração de uma figura onde será renderizada o gráfico.

Logo após instanciamos a figura com as dimensões de largura e altura em 400px e armazenamos na variável vbar.

Com a figura instânciada chamamos o método vbar para inicializar um gráfico de barras com orientação vertical, passamos os valores de x, definimos a largura da barra com o parâmetro width, definimos os nossos valores do eixo y e por fim especificamos a cor da barra com o parâmetro color.

O gráfico da imagem a direita segue o mesmo raciocínio explicado com a diferença da utilização do método hbar para definir a orientação horizontal.

Tenho certeza o quanto o amigo leitor é inteligente e imaginou a mesma coisa 🙂

graficos-vertical-horizontal

Observe que o entendimento do gráfico é extremamente simples.

O tamanho das barras já deixa claro quando estamos lidando com comparação de valores.

Linhas

Quando precisamos visualizar valores históricos na linha do tempo o gráfico de linhas pode ser uma boa.

A ideia de linearidade nos dados ou volatilidade fica bem representada através dos contornos das linhas.

Vamos plotar nosso gráfico de linhas utilizando a Matplotlib com o código abaixo:

grafico-linhas-matplotlib

Conforme os códigos anteriores, o que fizemos de diferente foi apenas utilizar o método plot() para renderizar o gráfico do tipo linha.

Observe que a geração dos dados foi exatamente a mesma dos gráficos anteriores.

Agora utilizando a biblioteca Bokeh..

Como pode ver o código é bastante intuitivo.

Na linha 1 iniciamos importando os objetivos figure e show para a criação da figura onde o gráfico será renderizado e o método show para exibir.

Nas linhas 3 e 4 apenas geramos alguns dados para teste.

Criamos na linha 6 a variável fig que inicializa uma figura de dimensão 400×400 e logo após na linha 7 definimos o gráfico de linhas através do método line passando os dados de x e y como parâmetro além da espessura da linha com o atributo line_width.

Veja na imagem abaixo:

visualizacao-dados-grafico-linhas

Bom, o gráfico foi renderizado mas…ainda não está legal para visualizar os dados.

Vamos adicionar pontos para mostrar os melhor os valores dos eixos x e y e ver como fica.

visualizacao-dados-grafico-linhas-pontos

Melhorou hein?

Com os pontos fica claro os valores dos eixos e evitar de parecer que a linha é contínua.

O que fizemos foi apenas inserir o código conforme a linha destacada.

Observe que estamos inserindo os pontos através do método circle() na mesma figura (fig) que inicializamos anteriormente passando os mesmos valores de x e y.

Definimos a cor de preenchimento dos pontos através do método fill_color e o tamanho de cada ponto através do método size.

Fácil demais né ?

Box Plot, quem são as anomalias?

dashbord-graficos

Uma maneira fácil de observar algumas possíveis anomalias em nossa base de dados é através do gráfico BoxPlot.

Com o BoxPlot conseguimos visualizar a distribuição dos dados além dos pontos chamados de outliers ou anomalias.

Anomalias são os valores muito distantes da média ou centro dos dados.

Para entender de forma clara o que são anomalias imagine que você está com uma base de dados sobre a renda média da população brasileira e se depara com a renda do Silvio Santos no meio.. 😛

silvio-santos-rindo-gráfico

Ponto fora da curva..

Um ótimo exemplo de ponto fora da curva hein ?

Normalmente as anomalias são geradas através de ruídos durante a coleta de dados ou erros de transformações.

Para o nosso exemplo vamos usar a biblioteca Seaborn.

Seaborn é uma biblioteca Python baseada em Matplotlib de alto nível para visualização de dados.  Caso ainda não tenha feito, instale com o comando abaixo:

Agora, veja como é simples plotar o gráfico com o código abaixo:

visualizacao-dados-grafico-boxplot

Antes de explicar o gráfico vamos entender o código.

No código acima começamos importando a biblioteca Seaborn e definimos o estilo do gráfico com o método set().

Logo após carregar o dataset iris através do método load_dataset().

Observe que o dataset iris já está disponibilizado pela biblioteca para testes.

Por fim apenas executamos o método BoxPlot passando o dataset iris como parametro.

BoxPlot ? Wtf ?

O gráfico de BoxPlot se caracteriza como um retângulo que pode ser horizontal ou vertical com duas retas na parte superior e inferior.

O retângulo é formado por três Quartis que dividem o dados em quatro rols com 25% dos dados cada.

Inicialmente o conjunto de dados é dividido ao meio através do cálculo da mediana dos valores, que será o valor do Quartil 2 representado pela linha ao meio do retângulo.

Com os dados divididos em duas partes o Quartil 1 é representado pela linha da borda inferior do retângulo que representa o valor médio dos 25% dos dados. E o Quartil 3 é representado pela linha da borda superior do retângulo que representa o valor médio dos 75% dos dados.

Por fim as linhas superior e inferior extra ao retângulo representam o valor máximo e mínimo dos dados conforme a imagem abaixo.

visualizacao-dados-explicacao-box-plot-grafico

Com o BoxPlot conseguimos visualizar de forma rápida a distribuição dos dados através da dimensão do retângulo e visualizar as anomalias representadas pelos valores máximos e mínimos.

Através da linha representando o Quartil 2 conseguimos visualizar o centro dos dados e verificar se está mais próximo do valor mínimo ou máximo.

Na imagem do gráfico renderizado podemos observar que os dados do atributo pental_length possui com uma alta variância através do tamanho do retângulo ao contrário dos dados do atributo sepal_width que variam pouco e estão bem alinhados ao centro.

Dispersão, quem está correlacionado com quem?

 

visualizacao-dados-grafico-dispersao

Quando precisamos visualizar a correlação entre dois atributos, ou melhor, identificar se o aumento ou diminuição de alguma variável influencia na outra podemos usar o gráfico de dispersão.

Correlação entre duas variáveis é de extrema importância para a análise de dados e explico melhor no artigo Exploratory Data Analysis (EDA): Aprenda Definitivamente como Extrair Valiosos Insights de Bases de Dados Reais.

Também conhecido por Scatter Plot o gráfico de dispersão é utilizado para visualizar atributos par a par.

Para plotar o gráfico de dispersão utilizando o Matplotlib utilize o código abaixo.

grafico-dispercao-matplotlib

Observe que o fizemos foi definir as variáveis X e Y com os dados da base de dados de amostra iris e utilizamos o método scatter para renderizar o gráfico. Bem simples e intuitivo!

Agora veja no exemplo abaixo a utilização do gráfico através utilizando a biblioteca Seaborn.

visualizacao-dados-grafico-dispersao-par-par

Veja na imagem acima que estamos plotando o gráfico de dispersão com os atributos par a par de toda a base de dados iris.

Observe que cada pequeno gráfico corresponde a um par de atributos coloridos pelo valor do atributo species.

O código para geração do gráfico é extremamente simples, primeiro carregamos a base de dados com o comando load_dataset() e logo após executamos o método pairplot() para plotar os atributos em pares.

Mais um exemplo..

Vamos analisar outro exemplo com o código abaixo.

visualizacao-dados-grafico-dispersao-01

No imagem acima plotamos o gráfico de dispersão dos atributos petal_width e petal_length, utilizando a biblioteca Seaborn.

Observe que fica fácil de visualizar os valores de um atributo em relação a outro.

Cada ponto do gráfico se refere a um valor e cada eixo do gráfico se refere a um atributo.

Será que conseguimos melhorar a visualização deste gráfico?

Podemos colorir os pontos por cada espécie de flores como no gráfico par a par acima. Para isso, veja a simples alteração que faremos no código abaixo.

visualizacao-dados-grafico-dispersao-02

Bem melhor hein ?

A alteração foi simples, apenas inserimos nas linhas 3 e 4 o código para especificar uma cor para cada valor do atributo species.

E após isso, definimos a variável colors como parametro do método circle().

Valores correlacionados

Com o gráfico de dispersão visualizar dados correlacionados é fácil, já que conseguimos observar o movimento ou o sentido que os dados estão.

Para uma correlação positiva os dados serão posicionados mais a direita superior do gráfico, como se estivessem “subindo”.

Note que nos gráficos acima existe claramente uma correlação positiva entre os atributos sepal_width e sepal_lengh já que quando os valores de um aumentam outro também aumenta.

Em uma correlação nula ou inexiste os dados ficarão no centro da figura e em uma correlação negativa os dados seguirão no sentido à esquerda.

Como um dever de casa, verifique o gráfico de dispersão par a par que geramos e identifique os pares de atributos que contém algum tipo de correlação. 😉

Mapas de Calor, “aqui ta quente…aqui ta frio”

visualizacao-dados-mapa-calor-gráficos

Como o nome já entrega mapas de calor ou Heatmaps são gráficos que facilmente transmitem a informação desejada.

A ideia basicamente é que em regiões onde a cor estiver mais acentuada ou mais forte é onde os dados estão mais concentrados de acordo com a análise, claro.

Veja o gráfico de calor na imagem abaixo:

visualizacao-dados-grafico-reclamacoes-territorio-brasileiro

Este imagem foi retirada do artigo Exploratory Data Analysis (EDA): Aprenda Definitivamente como Extrair Valiosos Insights de Bases de Dados Reais onde mostramos uma análise exploratória de dados de consumidores brasileiros, vale a pena a leitura!

Observe que geramos um gráfico de calor sobre dados de geolocalização no território brasileiro.

É bem intuitivo que quanto maior é a concentração de dados em uma determinada região mais escura ela será no gráfico.

O código para a geração do gráfico como outros detalhes sobre os dados utilizados estão todos no artigo.

Candlestick, de olho no “sobe e desce” do mercado.

visualizacao-dados-altos-baixos-mercado-financeiro-gráficos

Interpretar dados históricos de preços de ações ou valores de mercado pode ser horrível sem um boa visualização.

Dependendo da quantidade de dados analisada um ou outro tipo de gráfico pode se sair melhor para interpretar a informação.

Um tipo de gráfico bem comum que normalmente é utilizado é o gráfico de Candlestick.

Neste gráfico os dados são representados na forma de “vela”, onde o corpo, a cor e as pontas significam os valores máximo, mínimo e se o dia ou período representado fechou em alta ou em baixa.

Observe a imagem abaixo.

isualizacao-dados-grafico-candlestick

Detalhamos a geração de alguns gráficos para analisar dados do mercado financeiro no artigo Como Utilizar Machine Learning para Prever Preços de Ações da Bolsa de Valores – O Estudo de Caso Completo.

Mais uma leitura recomendada de alto nível se você quer utilizar Machine Learning para estimar preços de ações e ser o mais novo(a) minerador(a) milionário(a) 🙂

Conclusão

Com a utilização de gráficos fica fácil tomar decisões que envolvem dados, pois, o gráfico fala por si só.

Numa apresentação de resultados de uma empresa por exemplo, é comum ter gráficos de diversos tipos.

Isso só confirma a tese de que quem quer trabalhar com Data Science tem que entender de gráficos 🙂

Se você gostou desse artigo compartilhe com seus amigos e assine nossa lista de e-mail para ficar sempre atualizado sobre novas publicações.

Deixe seu comentário e nos conte o que achou.

Um abraço!

Coloque o seu e-mail abaixo para receber gratuitamente as atualizações do blog!

  • Felipe Santana

    ..