8 Gráficos Fundamentais para Data Science Utilizando Python
Você já tentou transformar dados complexos em informações claras para uma apresentação e não sabia qual gráfico era o mais indicado? Se você busca a resposta, você está no artigo certo! Descubra os principais tipos de gráficos e como utilizá-los na ciência de dados através do Python.
Introdução
A visualização de informações é fundamental na ciência de dados, auxiliando na exposição de conteúdos e colaborando para a interpretação de problemas. Deste modo, podemos entender que a visualização de dados, quando feita de modo assertivo, ajuda a resolver situações com mais agilidade.
Através de gráficos, é possível comunicar efetivamente informações contidas em um conjunto de dados, sejam eles simples ou complexos. Neste artigo, irei apresentar os principais tipos de gráficos e como utilizá-los na ciência de dados com a linguagem Python.
Gráfico de Linha
O gráfico de linhas é composto por dois eixos (plano cartesiano), podendo possuir uma ou mais linhas que mostram a variação (medidas ou quantidades numéricas) dos dados no decorrer do tempo (IBGE, 2023).
Esse modelo é ideal para visualizar a evolução de uma variável em um período, em outras palavras, podemos utilizá-lo para analisar a tendência de vendas de um produto durante o ano, preços de ações em determinada semana, ou entender o porquê uma empresa vende mais chocolate em Abril do que em Setembro.
Vamos imaginar que uma empresa fictícia chamada Gourmi teve uma queda grande de vendas com o surgimento de um concorrente, porém, rapidamente a equipe de marketing prospectou um novo público e a empresa expandiu. Repare como esse cenário não está evidente se analisarmos os dados através de uma tabela:
A informação fica pouco intuitiva, sendo difícil dizer quando a empresa está crescendo ou tendo prejuízo. Agora, com o auxílio do Python, vamos visualizar esses dados em um gráfico de linhas através do código:
import matplotlib.pyplot as plt
meses = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho"]
lucro = [10, 12, 9, 11, 13, 15, 14]
plt.plot(meses, lucro, marker='o')
plt.xlabel('Mês')
plt.ylabel('Lucro (em milhões)')
plt.title('Lucro da Gourmi em 2023')
plt.grid(True)
plt.show()
Esse código importa a biblioteca Matplotlib e atribui os dados da nossa tabela para as variáveis meses e lucro. Os comandos seguintes, representam as configurações de estilização, como: labels, marcadores e título do gráfico.
Após a execução do código, note que a visualização do gráfico de linhas deixa mais claro que em Março houve uma queda significativa, mas a empresa expandiu posteriormente.
Gráfico de Barras
O gráfico de barras também é exibido com dois eixos, possuindo barras que representam a variação (medidas ou quantidades numéricas) dos dados, e por valores categóricos. Para melhorar a visualização, as barras devem possuir a mesma largura e uma distância constante entre elas (IBGE, 2023).
São muito utilizados para fazer comparações entre categorias ou grupos. Por exemplo, podemos comparar a popularidade de diferentes produtos ou a distribuição de vendas por região de uma loja.
Vamos verificar os produtos oferecidos pela empresa Gourmi e descobrir quais possuem uma avaliação melhor dentro do aplicativo:
Nesse caso, o gráfico de barras é ideal, pois proporciona uma visão interessante de comparação entre os produtos, sendo possível verificar qual deles é o favorito pelos usuários do aplicativo. Vamos passar essa ideia para o Python:
import matplotlib.pyplot as plt
produtos = ["Pizza", "Hambúrguer", "Sushi", "Churrasco", "Massas", "Saladas", "Sobremesas"]
notas = [9, 8, 7, 9, 6, 5, 8]
plt.bar(produtos, notas)
plt.xlabel('Produtos')
plt.ylabel('Nota')
plt.title('Popularidade dos Produtos da Gourmi’)
plt.grid(True)
plt.show()
De forma semelhante, importamos a biblioteca Matplotlib e atribuímos os valores da tabela para as variáveis. Na sequência, estilizamos o gráfico como feito anteriormente, porém, perceba que agora o tipo do gráfico foi alterado (linha 6 você encontrará plt.bar(produtos, notas)).
Assim, podemos identificar com mais facilidade que Pizza e Churrasco são os produtos mais populares dentro do aplicativo.
Histograma
Esse gráfico é formado por colunas verticais lado a lado, sem existir espaço entre elas. As colunas são analisadas de modo que quanto mais alta, mais frequente é aquele dado na amostra. Também possui eixos cartesianos e é amplamente utilizado em modelos estatísticos.
Seu objetivo é baseado na visualização da distribuição de uma variável contínua, permitindo entender a forma dessa distribuição e identificar outliers (dados que se distanciam radicalmente dos demais), avaliando a simetria ou assimetria dos dados.
Segundo Significados (2023), os histogramas possuem diversos tipos:
- Simétrico: Quando apresenta colunas mais extremas menores e um pico centralizado.
- Assimétrico: Apresenta um único ponto de grande frequência, destacando-se entre as outras frequências
- Despenhadeiro: Ocorre quando existem lacunas inesperadas, utilizados quando algum dado é eliminado do gráfico
- Dois Picos: Dois picos são destacados com maior frequência, assemelhando-se com o tipo assimétrico.
- Platô: Quando as frequências centrais estão próximas, havendo um equilíbrio na distribuição do centro.
- Retângulos Isolados ou Ilha Isolada: Exibe lacunas, demonstrando indícios de anormalidades ou erros nas amostras coletadas.
Dessa vez, a nossa tarefa será descobrir a frequência em que um intervalo de número de vendas aparece na semana da Gourmi
Perceber intervalos de vendas na tabela não parece tão óbvio, vamos melhorar a visualização dessas informações com o Python:
import matplotlib.pyplot as plt
dias_semana = ['Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado', 'Domingo']
vendas = [55, 70, 40, 85, 60, 90, 75]
plt.figure(figsize=(8, 6))
plt.hist(vendas, bins=10, edgecolor='black')
plt.xticks(range(10, 101, 10))
plt.title("Quantidade de Vendas Diárias")
plt.xlabel("Quantidade de Vendas")
plt.ylabel("Frequência")
plt.show()
O código está mais estilizado, mas segue o mesmo padrão anterior: Importação da biblioteca, definição de variáveis, criação do histograma. Porém, para definir o estilo, foi adicionado um tamanho para a figura e posicionamento dos marcadores para melhorar a visualização (linha 6 e 8 respectivamente).
Podemos perceber que a maioria dos intervalos aparecem uma única vez na tabela, com exceção do intervalo entre 85 e 90 que possuem duas amostras (quinta e sábado). Também podemos abstrair a informação que diversos intervalos não estão presentes, podendo levantar hipóteses do porquê isso ocorre.
Gráfico de Setores - Pizza
Esses gráficos são formados a partir de um círculo e divididos proporcionalmente de acordo com os dados analisados. Os valores são expressos em números ou porcentuais. Geralmente, não se recomenda o uso de três dimensões, afim de facilitar a visualização da informação (IBGE, 2023).
Eles são utilizados para analisar a composição de um todo em termos de proporções. Assim, podemos mostrar a distribuição de gastos de um orçamento ou a participação de diferentes categorias em relação ao total.
Como se trata de uma setorização, vamos utilizar como exemplo a tarefa de descobrir em porcentual a quantidade de funcionários da empresa Gourmi em diferentes regiões do Brasil para tomarmos a decisão de realocar funcionários ou mantê-los na mesma equipe.
Seria trabalhoso calcular e analisar através da tabela, mas acho que você já entendeu que utilizando o Python a tarefa fica otimizada:
import matplotlib.pyplot as plt
regioes = ['Norte', 'Nordeste', 'Centro-Oeste', 'Sudeste', 'Sul', 'Centro-Sul', 'Centro-Norte']
funcionarios = [100, 200, 150, 300, 250, 180, 1180]
plt.pie(funcionarios, labels=regioes, autopct='%1.1f%%')
plt.title("Quantidade de Funcionários por Região")
plt.show()
Esse código é um pouco mais simples e segue o mesmo padrão que foi apresentado anteriormente.
Através do gráfico de setores, notamos que metade dos funcionários da empresa estão na região Centro-Norte e que as regiões Norte, Nordeste e Centro-Oeste possuem poucos funcionários.
Neste caso, poderíamos estudar a realocação de alguns funcionários para equilibrar o número das equipes. Porém, é importante ressaltar que em um caso real, existem muitas variáveis como demanda de mão-de-obra, custos, impostos, dentre outros.
Gráfico de Dispersão
Também chamados de diagrama de disposição, gráfico de correlação ou Scatter. Esse modelo é representado por eixos e pontos que podem estar mais agrupados ou dispersos. É formado por uma variável independente (causa), que é representada no eixo horizontal, e outra dependente (consequência) no eixo vertical (COUTINHO, 2023).
Utilizado quando queremos explorar a relação entre duas variáveis numéricas, ou seja, se existe padrões ou tendências entre variáveis analisadas.
Essa relação entre variáveis pode ser de três tipos (TRYBE, 2022):
- Correlação Negativa: Quando existe uma tendência de valores decrescentes
- Correlação Nula: Quando os pontos não seguem uma tendência
- Correlação Positiva: Quando existe uma tendência de valores crescentes
Para exemplificar o gráfico de dispersão, vamos utilizar uma tabela um pouco maior mostrando o tempo de entrega dos produtos da Gourmi em minutos e a nota de satisfação atribuída pelos clientes. Dessa vez, tentaremos descobrir se existe uma relação entre essas duas variáveis:
Com os dados espalhadas dessa maneira, fica difícil entender se existe uma relação. Vamos passar o nosso cenário para as linhas de código:
import matplotlib.pyplot as plt
tempo_entrega = [25, 40, 30, 20, 35, 50, 15, 45, 55, 28, 33, 22, 38, 17, 42]
nota_satisfacao = [8, 6, 9, 7, 5, 4, 10, 6, 2, 9, 7, 8, 5, 10, 6]
plt.scatter(tempo_entrega, nota_satisfacao, color='b', edgecolors='black')
plt.title("Tempo de Entrega vs. Nota de Satisfação")
plt.xlabel("Tempo de Entrega (minutos)")
plt.ylabel("Nota de Satisfação")
plt.grid(True)
plt.show()
Assim como os exemplos anteriores, importamos a biblioteca com as funções de geração de gráficos, passamos os dados da tabela para variáveis, mudamos o tipo do gráfico para scatter e adicionamos algumas estilizações.
Observando os dados no gráfico de dispersão, percebemos que existe uma correlação negativa, indicando que quanto mais o entregador demora para levar o pedido, menor é a nota de satisfação do cliente.
Também notamos que os dados estão relativamente dispersos, mostrando que o tempo de entrega costuma variar, podendo indicar um estudo de melhoria de rotas para os entregadores ou aumentar a quantidade de funcionários.
Gráfico de Caixa - Boxplot
É representado por uma caixa com os valores mínimos, máximos, primeiro e terceiro quartis, mediana e outliers. Na parte central do gráfico, encontra-se os valores da mediana, primeiro e terceiro quartil. As hastes inferior e superior representam os intervalos mínimos e máximos, respectivamente (IBM, 2023).
Utilizado para visualizar a distribuição de uma variável numérica, ele nos fornece uma visão detalhada das estatísticas dos dados, facilitando principalmente a análise entre quartis, mediana, amplitude e outliers.
Para facilitar a teoria, vamos ver outro exemplo da Gourmi, dessa vez, nós iremos analisar os salários dos homens e mulheres e descobrir mais informações sobre esses dados através de conceitos estatísticos:
Gerando um boxplot no Python podemos visualizar os dados com mais informações:
import matplotlib.pyplot as plt
import pandas as pd
data = {
'Gênero': ['Masculino', 'Feminino', 'Masculino', 'Feminino', 'Masculino', 'Feminino', 'Masculino'],
'Salário': [5000, 4500, 6200, 4800, 7500, 5200, 6800]
}
df = pd.DataFrame(data)
plt.boxplot([df[df['Gênero'] == 'Masculino']['Salário'], df[df['Gênero'] == 'Feminino']['Salário']])
plt.xticks([1, 2], ['Masculino', 'Feminino'])
plt.title("Distribuição de Salários por Gênero")
plt.ylabel("Salário (R$)")
plt.show()
Para esse exemplo, importamos outra biblioteca famosa dentro da ciência de dados chamada Pandas, ela é utilizada para a manipulação e organização de dados.
Diferente dos outros exemplos, atribuímos as variáveis através de um dicionário, isso facilita a criação de um Data Frame, como mostrado na sequência com o Pandas (pd.DataFrame(data)).
Para exibir os dados com boxplot, selecionamos a coluna Gênero e fizemos uma filtragem para mostrar os salários de acordo com o sexo.
Por fim, apresentamos mais algumas linhas de estilização, com labels, título e posicionamento dos marcadores.
Esse gráfico é muito rico em informações, note que é possível visualizar a média salaria e perceber que os homens ganham R$6.500,00 e as mulheres R$4.800,00 aproximadamente.
Também podemos notar os valores de mínimo e máximos indicados pelas hastes horizontais, demonstrando que os homens ganham no mínimo R$5.000,00 e no máximo R$ 7.500,00, enquanto as mulheres possuem o mínimo em R$4.500,00 e o máximo em R$5.200,00 aproximadamente.
Com essas informações, percebemos que o valor mínimo dos homens é semelhante ao máximo das mulheres, sendo necessário um estudo para entender os motivos dessa desigualdade.
Gráfico de Mapa de Calor - Heatmap
Utilizado para representar uma matriz de dados através de cores. É especialmente útil para visualizar a relação entre duas variáveis categóricas ou numéricas, destacando padrões e tendências (PROGRAMAÇÃO DINÂMICA, 2021).
Esse modelo é muito utilizado no marketing para rastrear o caminho percorrido do usuário pelo mouse, afim de compreender seu comportamento em uma página de conversão (RODRIGUES, 2022).
Abaixo temos o exemplo da avaliação dos clientes da Gourmi em relação aos pratos oferecidos nos restaurantes. Nosso trabalho será verificar quais pratos possuem uma avaliação melhor e procurar entender o motivo:
Vamos verificar esses dados no código:
import matplotlib.pyplot as plt
import numpy as np
dias_semana = ['Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado', 'Domingo']
pratos = ['Pizza', 'Hambúrguer', 'Sushi', 'Salada', 'Massa', 'Churrasco', 'Sobremesa']
satisfacao = np.array([
[4, 5, 3, 4, 5, 4, 3],
[3, 4, 4, 3, 5, 4, 4],
[5, 5, 5, 4, 3, 5, 5],
[4, 3, 4, 3, 4, 3, 4],
[3, 4, 3, 4, 3, 4, 3],
[5, 4, 5, 5, 4, 5, 4],
[4, 3, 4, 4, 3, 4, 4]
])
plt.figure(figsize=(8, 6))
plt.imshow(satisfacao, cmap='coolwarm', aspect='auto')
plt.title("Satisfação do Cliente por Prato e Dia da Semana")
plt.xlabel("Dia da Semana")
plt.ylabel("Prato")
plt.xticks(np.arange(len(dias_semana)), dias_semana)
plt.yticks(np.arange(len(pratos)), pratos)
plt.colorbar(label='Satisfação')
plt.show()
Para demonstrar outra biblioteca famosa na ciência de dados, inserimos o Numpy, responsável por facilitar manipulações matemáticas. Ele foi utilizado para a criação de um array (ou matriz) para guardar as notas das avaliações.
As outras linhas são semelhantes aos exemplos anteriores, adicionamos o Matplotlib para gerar o gráfico, inserimos os dados em variáveis e fizemos a estilização do gráfico.
As áreas em vermelho representam as maiores notas, sendo possível perceber que o sushi é um prato bem avaliado em quase todos os dias da semana, podendo ser o carro chefe da empresa.
Também podemos analisar que na sexta-feira existe uma boa avaliação de pizzas e hambúrgueres, podendo traçar uma análise do perfil do consumidor que visita o restaurante nesse dia da semana.
Gráfico de Área
Ele é formado por um conjunto de pontos que são ligados por uma linha, tendo a área abaixo dela preenchida. Deste modo, deve-se analisar toda a área formada entre o eixo e o ponto marcado durante o intervalo de tempo (TRYBE, 2022).
Ele é utilizado para visualizar a evolução de uma ou mais variáveis em um período. É útil para mostrar tendências, oscilações e comparar a distribuição de diferentes variáveis (IBM, 2021).
Nessa tabela, exibimos a receita diária que a Gourmi arrecadou durante o primeiro semestre do ano:
Como padrão, o Matplotlib exibe o gráfico de linha (através do plt.plot), deste modo, adicionando a função fill_between, podemos preencher a área abaixo do gráfico:
import matplotlib.pyplot as plt
meses = ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho']
receita = [50, 70, 65, 80, 90, 75, 60]
plt.figure(figsize=(8, 6))
plt.fill_between(meses, receita, color='skyblue', alpha=0.4)
plt.title("Receita Mensal da Empresa Gourmi")
plt.xlabel("Mês")
plt.ylabel("Receita (em milhares)")
plt.xticks(rotation=45)
plt.ylim(0, max(receita) * 1.2)
plt.show()
Quanto ao restante do código, mantemos o padrão dos outros exemplos, adicionando a biblioteca, inserindo os dados nas variáveis e estilizando os componentes visuais.
Podemos perceber que houve um crescimento da receita entre Março e Maio, alcançando o seu pico em 90 milhões. Também temos uma visão mais global dos dados quando considerados em relação à tabela, mostrando que a partir do terceiro mês, a empresa teve um crescimento em relação ao primeiro trimestre.
Conclusão
Nesse artigo, demonstramos diversos tipos de gráficos e exemplos de aplicações através de uma empresa fictícia chamada Gourmi. Os exemplos foram pensados para estudantes iniciantes de ciência de dados que procuram se aprimorar nessa área.
É importante ressaltar que situações reais envolvem uma quantidade imensa de informações, existindo um estudo mais aprofundado para tomada de decisões.
Foi utilizado a linguagem Python que apresenta poderosas ferramentas como as bibliotecas Matplotlib, Numpy e Pandas, que facilitam a geração de gráficos e manipulação de dados.
Dominar esses conceitos é fundamental para a área, além de possibilitar o avanço da compreensão e análise de informações.
Utilize esse artigo como um guia de consultas para iniciar seus estudos e aprofundar seus conhecimentos. Experimente, teste e descubra o poder dos gráficos na ciência de dados, você se surpreenderá com os resultados!
Referências
COUTINHO, Thiago, 2023: https://www.voitto.com.br/blog/artigo/diagrama-de-dispersao
IBGE, 2023: https://educa.ibge.gov.br/professores/educa-recursos/20773-tipos-de-graficos-no-ensino.html
IBM, 2023: https://www.ibm.com/docs/pt-br/spss-statistics/saas?topic=examples-example-boxplot
PROGRAMAÇÃO DINÂMICA, 2021: https://www.youtube.com/watch?v=kEQAY4gcSd0
RODRIGUES, Leonardo, 2022 : https://www.voitto.com.br/blog/artigo/boxplot
SIGNIFICADOS, 2023: https://www.significados.com.br/histograma/
TRYBE, 2022: https://blog.betrybe.com/estatistica/principais-tipos-de-grafico/