Visualização de Dados
Uma imagem vale mais do que mil palavras
Somente essa frase já demonstra a importância da visualização dos dados, mas ainda podemos afirmar que a visualização de dados é como um importante conjunto de ferramentas para um cientista de dados. Uma boa visualização favorece a comunicação e pode facilitar a identificação de insights, outliers, tendências e vieses, sendo uma boa prática para compreender melhor o conjunto de dados.
O campo visual facilita a ligação com o nosso cérebro, pois nos remete a padrões ou tendências dos dados visuais, em comparação com a leitura ou outros meios.
Neste artigo, vou cobrir o conceito de visualização a partir do básico usando Python.
Embora não cobriremos todas as visualizações que possam ser construídas, será possível observar e aprender os conceitos utilizados na construção de um gráfico.
Os scripts e os dados utilizados neste artigo também serão compartilhados no meu portfolio de projetos no GitHub, passe por lá para conferir os demais projetos.
Utilizando o Matplot Lib
Começaremos com alguma visualização básica.
É melhor usar o código fig,ax=plt.subplots()
, onde plt.subplots()
é uma função que devolverá uma tupla com uma figura e eixos com objetos atribuídos às variáveis fig
e ax
respectivamente. Sem usar isto também, é possível imprimir um gráfico, mas ao usar desta forma, seria possível fazer alterações à figura como se fosse possível redimensionar os gráficos dependendo do seu aspecto e salvar o gráfico também. Da mesma forma, a variável “eixo” aqui pode ser usada para fornecer etiquetas aos eixos.
Abaixo está um exemplo simples onde gerei os dados aleatóriamente como uma matriz e os imprimi diretamente como um gráfico
Observe que eu fiz questão de deixar a geração números randômicos utilizando o Numpy e a biblioteca random
do Python, para servir de demonstração.
Como aprendizado irei demonstrar no próximo passo como é simples acrescentar mais um plot de linha ao gráfico.
Outros Gráficos
Agora, vamos começar a utilizar alguns dados reais (importando de um dataset) e aprender sobre a construção de gráficos, sobre a personalização, e torná-los mais intuitivos.
Vale a ressalva que na maioria dos casos de utilização de dados reais, esses exigem alguma transformação para os tornar utilizáveis para os gráficos.
Abaixo está um exemplo em que utilizei os dados da Netflix mas transformei os dados para consolidar o número de filmes e séries por ano. Ainda acrescentei alguns detalhes adicionais para tornar o gráfico mais intuitivo e auto-explicativo.
Primeiro Dataset
Nesta etapa iremos utilizar os dados de um dataset disponível no Kaggle sobre séries e filmes listados no Netflix em 2019. Segundo o autor do dataset os dados foram coletados utilizando a API Flixable.
Para mais informações sobre os dados você pode consultar diretamente no site do Kaggle.
No próximo bloco iremos importar os dados do dataset diretamente para o Colab.
Confira no post que eu fiz mais detalhes e o passo a passo para viabilizar esse import
.
Gráfico de Tendência
A introdução a seguir sobre gráfico de tendências eu retirei do site FM2S, pois está bem detalhado o objetivo e porque utilizá-lo.
O Gráfico de Tendência é um gráfico de linhas que mostra como um determinado indicador se comporta ao longo do tempo. Assim, com ele pode-se identificar padrões no comportamento do indicador, como sazonalidade, tendência de aumento, queda ou ciclos.
Esse gráfico é simplesmente um registro de uma medida ou característica ao longo do tempo. Além disso, deve sempre fazer parte do estudo da variação em um processo ou sistema, concentrando-se na complexidade dinâmica (complexidade ao longo do tempo) assim como na complexidade de detalhe de medidas específicas.
A própria simplicidade do gráfico é o que o torna tão poderoso (Deming, 1986). Logo, todas as pessoas ligadas ao processo podem usar e entender um gráfico de tendência, sendo este comumente usado em documentos de negócios e econômicos.
Geralmente, usamos esse tipo de gráfico em situações em que os dados sobre uma variável são coletados ao longo do tempo. Ele é obtido colocando no eixo vertical a variável sendo analisada, que pode ser uma média ou um valor individual e no eixo horizontal a variável relacionada com o tempo, como o mês, a semana, o dia ou o ciclo.
Durante a elaboração do notebook eu fiz algumas transformações e ajustes com os dados.
No bloco a seguir estão os passos para elaboração do gráfico de Tendência
Gráfico de Barras ou Histogramas
Outro tipo de gráfico que mostra relações entre diferentes conjuntos de dados é o gráfico de barras. Em um gráfico de barras, a altura da barra representa o valor medido: quanto maior ou maior a barra, maior o valor.
Um histograma consiste em um gráfico de barras que demonstra uma distribuição de frequências, onde a base de cada uma das barras representa uma classe, e a altura a quantidade ou frequência absoluta com que o valor da classe ocorre. Ao mesmo tempo, pode ser utilizado como um indicador de dispersão de processos. Tem como objetivo ilustrar como uma determinada amostra de dados ou população está distribuída, dispondo as informações de modo a facilitar a visualização da distribuição dos dados. Ao mesmo tempo, ressalta a localização do valor central e da distribuição dos dados em torno deste valor central.
Possui dois eixos com funções diferentes, onde o eixo horizontal é dividido em pequenos intervalos, demonstrando valores assumidos pela variável de interesse. Já o eixo vertical é proporcional à frequência de observações da amostra onde os valores pertencem aquela classe ou intervalo.
Novamente foram feitas algumas transformações antes da plotagem do gráfico.
Para plotagem do gráfico foi utilizado o seguinte script
No próximo passo irei adicionar uma função ao gráfico para plotar os rótulos em cima de cada barra.
Gráficos de Pizza e Donuts
Apesar de muitos torcerem o nariz para gráficos de pizza, desde que utilizados corretamente são muito representativos. Um gráfico de setores (também conhecido como gráfico de pizza) compara as partes com um todo. Como tal, mostra uma distribuição percentual. A pizza representa o conjunto de dados total e cada segmento da pizza é uma categoria específica dentro do todo.
Para usar um gráfico de pizza, os dados que você está medindo devem representar uma relação de proporção ou porcentagem. Cada segmento deve ser calculado usando a mesma unidade de medida, ou os números não terão sentido.
Os gráficos de pizza podem ser facilmente modificados para um gráfico de Donuts cobrindo a parte central do gráfico de pizza com um círculo e realinhando o texto/valores para se adequarem ao gráfico de Donuts. Abaixo está um exemplo simples onde implementei o gráfico de pizza e mais tarde a modifiquei para um gráfico de donuts.
Como esses gráficos representam porcentagens, iremos incluir uma coluna de totais de inclusão (Filmes + Séries).
Scipts para plotagem do gráfico
Para criar o gráfico de donuts iremos adicionar um círculo em branco no centro e explodir os pedaços para aumentar a representatividade.
Caso queira conhecer mais sobre o atributo círculos, consulte a documentação oficial do Matplot Lib no link.
A Matplotlib é uma biblioteca de visualização muito importante para o Python, pois outras bibliotecas de visualização em python dependem da matplotlib. Algumas das vantagens/benefícios do aprendizado do matplotlib são:
- Fácil Aprendizado;
- Eficiente;
- Possibilita customizações, possibilitando a representação de qualquer gráfico;
Procurei passar pelos principais pontos e recursos do MatplotLib, mas confira no site oficial as outras possibilidades.
Seaborn
Seaborn é uma biblioteca de visualização do Python baseada no matplotlib
, que vimos anteriormente. Fornecendo uma interface de alto nível, permite a construção de gráficos estatísticos mais atraentes e informativos.
Para você ter uma noção dos tipos de gráficos que podem ser construídos com a biblioteca seaborn
, dê uma olhada na galeria de exemplos ou acompanhe os tutoriais fornecidos na própria documentação do pacote.
Se você está se perguntando o motivo pelo qual você usaria o seaborn
e não matplotlib
, eu posso te dar algumas vantagens:
- Matplotlib não é otimizado para o Pandas, uma vez que é mais antigo (veio antes) que ele.
- Matplotlib é baixo nível se comparado ao Seaborn. Ser mais baixo nível significa que você precisa de mais código e mais trabalho para conseguir customizar seus gráficos.
- Deixar um gráfico sexy e atraente no Matplotlib pode ser uma tarefa árdua!
- Há vários tipos de gráficos não contemplados no Matplotlib, mas que estão presentes no Seaborn.
Aplicando o estilo do Seaborn no Matplotlib
O Seaborn fornece uma interface mais high-level para criarmos gráficos elaborados, visualmente melhores e mais complexos. É muito comum vermos notebooks de Data Science usando seaborn
como biblioteca primária para plotar gráficos.
Entretanto, mesmo quem prefere usar o matplotlib
consegue tirar proveito do estilo que está por trás do seaborn
.
Compare o primeiro gráfico deste post e veja como é possível melhorar o plot apenas importando a biblioteca seaborn e chamando o método sns.set().
Repare que usamos exatamente a mesma função para plotar o gráfico com o matplotilib
. No entanto, ele já ganhou um visual bem mais moderno e agradável aos olhos.
Alguns exemplos utilizando a biblioteca Seaborn
Quando você estiver confortável com o matplotlib
e quiser dar um passo a mais, comece a ver a sua documentação e faça alguns exemplos dos tutoriais oficiais. Lembre-se que esse é um plus, mas antes disso você precisa fortalecer os conceitos e as bases. Não adianta nada você saber “copiar” gráficos bonitos se não tiver noção do que eles representam.
Vou apresentar aqui alguns gráficos mais complexos e avançados, só para você ter ideia do mundo de visualização de dados que existe por aí.
Observação
O comando plt.show()
limpa todo o quadro quando o gráfico é exposto, então se o comando para salvar a figura plt.figsave()
estiver após vai salvar uma imagem em branco.
Join Plot
Regressão Linear
Mapa de Calor
Outra Representação do Gráfico de Barras
Nesta etapa do notebook, foram gerados gráficos com dados aleatórios e / ou de dataset tratados anteriormente pelo Carlos Melo utilizando no curso Data Science na Prática.
Data Science na Prática 2.0
by sigmoidal.ai
Não deixe de conferir o curso. Eu já fiz e recomendo a todos que desejam iniciar sua carreira como cientista de dados. Mas você pode me perguntar por que deveria fazer um curso se está tudo disponível na internet.
A didática que o Carlos utiliza no curso é única. Sempre com exemplos reais e desafiantes. Rapidamente percebemos nossa evolução quando estamos sendo guiados por alguém que já enfrentou muitas dificuldades e por diversas vezes tentou aprender sozinho.
O segundo dataset
Nas próximas etapas desse notebook irei utilizar outro dataset disponível no Kraggle, sobre doenças cardíacas. Como já habilitamos a API do Kraggle não será necessário realizar a autenticação novamente.
Para a próxima etapa foi necessário executar algumas transformações com os dados do dataset
Gráficos de Tendência
Já fizemos anteriormente um gráfico de tendências utilizando o Matplot. Vamos agora plotá-lo utilizando a biblioteca Seaborn.
Gráficos de Dispersão ou Scatter Plot
Um gráfico de dispersão é uma representação gráfica da associação entre pares de dados. Esse emparelhamento de dados é o resultado da associação de diferentes medições de uma certa causa (por exemplo, pressão) com a medição correspondente da característica de qualidade (por exemplo, espessura da tinta). Os dados emparelhados podem também ser medições de duas causas (por exemplo, pressão e temperatura), ou duas características de qualidade (espessura e brilho). Cada par se torna um ponto do gráfico de dispersão.
Frequentemente é desejável determinar se existe uma relação ou associação entre duas variáveis. Por exemplo, uma vez que um diagrama de causa e efeito tenha sido desenvolvido para identificar causas potenciais que tenham impacto em uma característica de qualidade de um processo, a relação entre as causas e as características de qualidade têm que ser estudadas. Os resultados desse esforço devem ajudar a determinar qual ação poderia ser tomada no processo. Uma ferramenta para estudar tais relações é o gráfico de dispersão, o qual também pode ser usado para estudar a associação (ou correlação) entre diferentes características de qualidade.
Para traçá-lo, geralmente colhemos dados de maneira a vincular duas variáveis a uma observação. Por exemplo, podemos querer avaliar se a satisfação percebida por um cliente de um projeto está correlacionada ao atraso de seu projeto. Para isso, portanto, coletamos dados de N projetos, e para cada um deles, coletamos os dias de atraso e a satisfação do cliente.
De maneira genérica, a satisfação é a nossa variável resposta, ou variável Y. Os dias de atraso é a nossa variável de entrada, ou variável X. O número do projeto é a nossa observação, ou indexador. Ele tem esse nome pois ele atrela os valores da variável X com os da variável Y.
Como visto, a biblioteca Seaborn permite criar gráficos mais agradáveis visualmente apenas com uma linha de código.
Mapas de Calor ou Heatmap
Os heatmaps são amplamente utilizados em dados de séries temporais para trazer à tona as sazonalidades e outros padrões no conjunto de dados. Entretanto, para construir um mapa de calor, precisamos transformar os dados em um formato específico para apoiar a plotagem.
Abaixo está uma amostra de código para transformar os dados de forma a se adequarem ao gráfico do heatmap e à biblioteca Seaborn usada para construir o heatmap.
Pair Plots ou Plotagem em Pares
Uma das melhores ferramentas do Seaborn, pois é possível comparar todos os atributos numéricos do dataset em apenas um gráfico.
Ou ainda podemos fazer:
Observe que com poucas customizações é possível alterar consideravelmente o gráfico.
Pair Grid
Conforme demonstrado anteriormente uma das vantagens da biblioteca Seaborn são as customizações. Tais customizações permite criar gráficos representativos.
Este tipo de gráfico em grade utiliza os subplot (sub-gráficos) para traçar relações em pares de um conjunto de dados.
Este gráfico mapeia cada variável de um conjunto de dados em uma coluna e linha em uma grade de múltiplos eixos.
Para esse exemplo vamos voltar no DataFrame do Netflix e expor no gráfico os anos de lançamento Totais, vídeos e séries.
Novamente foi necessário realizar algumas transformações dos dados para permitir uma maior representatividades. As transformações estão no bloco a seguir:
Para plotar o gráfico foi utilizado os seguintes passos
Gráficos Interativos
As ferramentas de dashboard são amplamente utilizadas para compartilhar visualizações, mas digamos que existe um padrão interessante que você notou ao realizar a análise de dados e gostaria de compartilhar com outras áreas da empresa ou profissionais.
Se eles forem compartilhados como uma imagem, então pode não haver muito que o se possa fazer, mas se eles forem compartilhados como um gráfico interativo, isso dará ao usuário o poder de olhar para os detalhes granulares fazendo zoom in ou out ou usar outra funcionalidade para interagir com o gráfico.
Abaixo está um exemplo onde estamos criando um arquivo HTML como saída, que inclui a visualização que pode ser compartilhada com qualquer outro usuário e que pode ser simplesmente aberta em um navegador da web.
Agora que o arquivo 18-GraficoIterativo.html foi gerado basta realizar o download e compartilhar o arquivo com outras áeras ou profissionais.
Conclusão
Passamos por diversas maneiras de gerar um gráfico e permitir a visualização dos dados. Conforme comentado inicialmente precisamos utilizar a visualização dos dados porque fornece um resumo visual das informações, facilita a identificação de padrões e tendências, sendo mais fácil do que olhar através de milhares de linhas em uma planilha.
É a maneira como o cérebro humano funciona.
Como o objetivo da análise de dados é obter insights, os dados são muito mais valiosos quando são visualizados. Mesmo que um analista de dados possa extrair insights dos dados sem visualização, será mais difícil comunicar o significado sem a visualização. Gráficos facilitam a comunicação dos resultados dos dados, mesmo que seja possível identificar os padrões sem eles.
Os gráficos revelam características de dados que as estatísticas e modelos podem falhar: distribuições incomuns de dados, padrões locais, agrupamentos, lacunas, valores ausentes, evidência de arredondamento ou amontoamento, limites implícitos, aberturas, etc. Os gráficos levantam questões que estimulam a pesquisa e sugerem idéias. Parece fácil. De fato, realizar a interpretação dos gráficos demanda experiência para identificar características potencialmente interessantes e de senso estatístico para se proteger contra os perigos de interpretação excessiva. Assim como os gráficos são úteis para verificar os resultados dos modelos, os modelos são úteis para verificar as idéias derivadas dos gráficos (para mais informações sobre modelos, veja Hand, 2019).
O notebook elaborado para realizar essa demonstração pode ser encontrado em:
https://github.com/mabittar/Portfolio/blob/master/Visualiza%C3%A7%C3%B5es_de_Dados.ipynb