Alura > Cursos de Data Science > Cursos de Data Science > Conteúdos de Data Science > Primeiras aulas do curso Praticando gráficos: criando gráficos de comparação

Praticando gráficos: criando gráficos de comparação

Gráficos de comparação - Criando gráficos de comparação

Olá! Meu nome é Valquíria, sou instrutora na Escola de Dados.

Audiodescrição: Valquíria é uma mulher branca, de olhos castanhos, cabelos loiros e ondulados na altura abaixo dos ombros. Usa piercing no nariz e uma camiseta rosa. Está sentada em uma cadeira gamer e ao fundo, há uma parede lisa com iluminação degradê entre o verde e o azul. Ao lado esquerdo, um vaso com uma planta e ao direito uma prateleira com itens de decoração.

Neste curso, vamos focar na prática de criação de gráficos, com ênfase em gráficos de comparação. Para isso, temos um notebook preparado, onde vamos carregar alguns dados e criar os gráficos.

Carregando os dados

Vamos começar importando os dados. Para isso, utilizaremos a biblioteca Pandas e executaremos a célula de código correspondente, passando import pandas as pd.

import pandas as pd

Em seguida, vamos ler um arquivo CSV e armazená-lo em uma variável chamada df.

df = pd.read_csv('https://raw.githubusercontent.com/alura-cursos/python_dados/refs/heads/main/Dados/loja_vendas.csv')

Para visualizar as informações, vamos usar o método head(), que exibe as cinco primeiras linhas do conjunto de dados.

df.head()
ID_compraunidadecidadedatahorariocategoria_produtovalor_unitarioquantidadevalor_totalmetodo_pagamentoID_clienteprograma_cashbackidadeavaliacao_compra
0Parque das naçõesSanto André2022-01-0315.40Eletrônicos4457.94178316Dinheiro6149Sim3010
1Oswaldo CruzSão Caetano do Sul2022-01-0316:48Ferramentas e construção115.91115.9PIX9491Sim369
2PaulicéraSão Bernardo do Campo2022-01-0312:08Beleza e cuidados pessoais68.92137.8Cartão5288Não399
3Oswaldo CruzSão Caetano do Sul2022-01-039:28Ferramentas e construção80.95404.5PIX9679Sim3510
8Parque das naçõesSanto André2022-01-0313:02Beleza e cuidados pessoais165.0660.0PIX1380Não50

Os dados carregados são de uma rede de lojas de departamento, contendo informações sobre vendas, produtos vendidos, valores e clientes. A ideia é construir gráficos de comparação para identificar padrões e semelhanças entre esses dados e extrair insights.

Podemos começar somando o valor total de vendas para cada unidade das lojas, verificando qual delas teve o melhor desempenho. Para isso, importaremos a biblioteca Seaborn para criar os gráficos. Para isso, passamos o código import seaborn as sns.

import seaborn as sns

Criando o gráfico de colunas

Um gráfico de colunas seria ideal para mostrar esses valores totais de cada unidade, facilitando a visualização e comparação. Para criar o gráfico de colunas, faremos um agrupamento pela unidade usando o método groupby(), somando o valor total. Uma dica é usar o método reset_index() no final para criar uma nova coluna contendo o índice, facilitando o acesso à unidade e ao valor total para criar o gráfico.

Usaremos a função barplot() da biblioteca Seaborn, passando x como a unidade, y como o valor total, e definindo os dados como o df_unidade unidade.

# Agrupando por unidade e somando o valor total
df_unidade = df.groupby('unidade')['valor_total'].sum().reset_index()

# Criando o gráfico de colunas
sns.barplot(x='unidade', y='valor_total', data=df_unidade)

Executando a célula, obtemos o gráfico de colunas, onde podemos verificar que a unidade Oswaldo Cruz teve o maior valor total, seguida de Parque das Nações e Pauliceia.

Gráfico de barras mostrando os valores totais por unidade. No eixo horizontal, estão as unidades: 'Oswaldo Cruz', 'Parque das nações' e 'Paulicéia'. No eixo vertical, estão os valores totais, variando de 0 a 6 milhões. As barras estão dispostas lado a lado, com 'Oswaldo Cruz' apresentando o maior valor, seguido por 'Parque das nações' e 'Paulicéia'.

Além de gráficos de coluna para comparar valores, podemos usar gráficos para comparar frequências. Por exemplo, podemos verificar qual é o método de pagamento mais frequente usado pelos clientes. Para isso, usaremos a função countplot(), que conta quantas vezes uma categoria é exibida. Passaremos x como o método de pagamento e definiremos os dados como nosso DataFrame df.

# Criando o gráfico de contagem
sns.countplot(x='metodo_pagamento', data=df)

Ao executar a célula, visualizamos o seguinte gráfico:

Gráfico de barras mostrando a contagem de métodos de pagamento. No eixo horizontal, estão os métodos de pagamento: 'Dinheiro', 'PIX', 'Cartão' e 'Carteira digital'. No eixo vertical, está a contagem, variando de 0 a 2500. A barra correspondente a 'Dinheiro' é a menor, seguida por 'Carteira digital'. 'PIX' tem uma barra maior, e 'Cartão' tem a barra mais alta, indicando o maior uso.

Para melhorar a visualização, podemos ordenar as categorias. Para isso, criamos uma variável para armazenar o método de pagamento, usando value_counts() para ordenar do maior para o menor valor.

# Ordenando os dados da maior contagem para menor
metodo_pagamento_contagem = df['metodo_pagamento'].value_counts()
metodo_pagamento_contagem
metodo_pagamento
Cartão2851
PIX2244
Carteira digital547
Dinheiro527

Criando o gráfico de contagem ordenado

Após a ordenação, criamos novamente o gráfico, passando o parâmetro order com a variável criada, especificando o índice como o método de pagamento. Assim, teremos as colunas ordenadas, facilitando a visualização e análise.

# Criando o gráfico de contagem ordenado
sns.countplot(x='metodo_pagamento', data=df, order=metodo_pagamento_contagem.index)
Gráfico de barras mostrando métodos de pagamento. No eixo horizontal, as categorias incluem 'Cartão', 'PIX', 'Carteira digital' e 'Dinheiro'. No eixo vertical, o label é 'count', indicando a quantidade de ocorrências para cada método. A barra do 'Cartão' é a mais alta, seguida pelo 'PIX'. As barras de 'Carteira digital' e 'Dinheiro' são menores e de alturas semelhantes.

Assim, temos as colunas ordenadas, facilitando a visualização e a análise. Se quisermos comparar o método de pagamento em cada unidade da rede de lojas, podemos criar um gráfico de colunas agrupadas. Para isso, usamos o countplot() com um parâmetro adicional hue, definindo-o como a unidade. Isso atribui cores diferentes de acordo com a coluna passada, no caso, a coluna de unidade. O resultado é um gráfico de colunas com cores diferentes para cada unidade, com uma legenda indicando as cores.

# Criando o gráfico de contagem com hue
sns.countplot(x='metodo_pagamento', data=df, order=metodo_pagamento_contagem.index, hue='unidade')
Gráfico de barras mostrando a contagem de métodos de pagamento por unidade. No eixo horizontal, estão os métodos: 'Cartão', 'PIX', 'Carteira digital' e 'Dinheiro'. No eixo vertical, a contagem varia de 0 a 1000. As barras são coloridas de acordo com a legenda: azul para 'Parque das nações', laranja para 'Oswaldo Cruz' e verde para 'Paulicéia'.

Podemos mudar as cores usando paletas pré-definidas pelo Seaborn ou Matplotlib, ou definir paletas próprias. Focaremos em paletas pré-definidas, como a Set2. Adicionamos o parâmetro palette no código, definindo a paleta desejada.

# Definindo uma paleta de cores
sns.countplot(x='metodo_pagamento', data=df, order=metodo_pagamento_contagem.index, hue='unidade', palette='Set2')
Gráfico de barras igual ao acima, porém, com cores diferentes. Agora, Parque das Nações na cor verde-claro, Oswaldo Cruz em laranja-claro e Paulicéia em lilás.

Até o momento, trabalhamos com comparações entre poucas categorias. Se tivermos muitas categorias, podemos somar a quantidade de cada tipo de produto. Faremos um agrupamento pela coluna categoria_produto, somando a quantidade de produtos vendidos. Usamos reset_index para acessar facilmente as colunas geradas.

Criamos um barplot() usando x como a categoria do produto e y como a quantidade, passando os dados como a variável criada pelo agrupamento.

# Agrupando por categoria e somando a quantidade
soma_categorias_produtos = df.groupby('categoria_produto')['quantidade'].sum().reset_index()

# Criando o gráfico de colunas
sns.barplot(x='categoria_produto', y='quantidade', data=soma_categorias_produtos)
Gráfico de barras ilustrando quantidades de categorias de produtos no eixo vertical, com valores variando de 0 a mais de 4000. No eixo horizontal, as categorias com textos parcialmente sobrepostos incluem: 'Alimentos e bebidas', 'Cama, mesa e banho', 'Casa e construção', 'Eletrônicos e eletrodomésticos', 'Escritório' e 'Fitness'. As barras variam em altura, indicando diferentes quantidades para cada categoria.

Lidando com gráficos de muitas categorias

Porém, ao executar, repare que, como temos muitas categorias, os nomes se sobrepõem, dificultando a visualização. Nesse caso, podemos transformar o gráfico de colunas em um gráfico de barras, virando-o na horizontal. Então, no código, trocamos x por y e y por x, mantendo os dados iguais.

# Criando o gráfico de barra
sns.barplot(y='categoria_produto', x='quantidade', data=soma_categorias_produtos)
Gráfico de barras horizontais exibindo a quantidade de produtos por categoria. As categorias são 'Alimentos e bebidas', 'Beleza e cuidados pessoais', 'Casa e limpeza', 'Eletrônicos', 'Ferramentas e construção', 'Livros' e 'Papelaria e escritório'. O eixo horizontal representa a 'quantidade' e o eixo vertical as 'categoria_produto'. A categoria 'Alimentos e bebidas' tem a maior quantidade, seguida por 'Eletrônicos'.

Porém, como mencionamos anteriormente, não é recomendado exibir as barras desordenadas. Então, criamos uma variável para ordenar os produtos, usando sort_values pela coluna de quantidade e ascending=False para ordenar do maior para o menor valor. Executamos o código com os dados ordenados, obtendo um gráfico claro e organizado.

# Ordenando os dados da maior quantidade para menor
soma_categorias_produtos_ordenado = soma_categorias_produtos.sort_values(by=['quantidade'], ascending=False)

# Criando o gráfico de barra ordenado
sns.barplot(y='categoria_produto', x='quantidade', data=soma_categorias_produtos_ordenado)
Mesmo gráfico acima, porém agora ordenado de forma decrescente.

Gráfico de linhas

Exploramos gráficos de colunas e barras, mas falta um tipo de gráfico de comparação importante: o gráfico de linhas. Com dados que envolvem tempo, como datas, podemos comparar vendas mensais. O gráfico de linhas é ideal para isso.

Para isso, primeiro transformamos a coluna de data no formato datetime da biblioteca Pandas, aplicando pd.to_datetime() e definindo o formato padrão.

# Transformando a coluna data em datetime
df['data'] = pd.to_datetime(df['data'], format='%Y-%m-%d')

Agrupamos as informações pela data, somando o valor total para verificar o número de vendas diárias. Usamos reset_index para facilitar o acesso aos dados.

Criamos um lineplot(), passando x como a data e y como o valor total, definindo os dados como vendas_diarias. Executamos o gráfico, visualizando as informações de janeiro de 2022 a janeiro de 2023, permitindo verificar períodos de maior e menor valor de vendas.

# Agrupando por data e somando o valor total
vendas_diarias = df.groupby('data')['valor_total'].sum().reset_index()

# Criando o gráfico de linhas
sns.lineplot(x='data', y='valor_total', data=vendas_diarias)
Gráfico de linha mostrando a tendência de aumento no 'valor_total' ao longo do tempo, com o eixo x representando datas de 2022-01 a 2023-01 e o eixo y representando o valor numérico. O gráfico ilustra flutuações consistentes no período até um aumento significativo no final de 2022.

Para customizar os gráficos, importamos o módulo pyplot da biblioteca Matplotlib. Podemos definir o tamanho da figura, aumentar a largura e altura, e adicionar informações essenciais como título e labels para os eixos x e y. Usamos sns.despine para remover caixas laterais e plt.show para exibir o gráfico sem texto sobreposto.

import matplotlib.pyplot as plt

# Definindo o tamanho da figura
plt.figure(figsize=(10, 4))

# Plotando o gráfico
sns.lineplot(x='data', y='valor_total', data=vendas_diarias)

# Definindo o título do gráfico
plt.title('Vendas diárias ao longo do tempo', loc='left', fontsize=18)

# Definindo a label do eixo x
plt.xlabel('Ano/Mês', fontsize=12)

# Definindo a label do eixo y
plt.ylabel('Valor (R$)', fontsize=12)

# Removendo a borda do gráfico
sns.despine()

# Exibindo o gráfico
plt.show()
Gráfico de linha mostrando a tendência de 'Vendas diárias ao longo do tempo'. O eixo vertical representa 'Valor (R$)' variando de 0 a 250000, e o eixo horizontal exibe 'Ano/Mês', abrangendo de 2022-01 a 2023-01. A linha azul flutua, indicando um aumento gradual nas vendas ao longo do tempo.

Assim, temos um gráfico mais organizado e informativo.

Revisamos diversos gráficos de comparação. Agora, é hora de praticar nos exercícios seguintes, aprimorando habilidades na criação de gráficos. Vamos lá!

Sobre o curso Praticando gráficos: criando gráficos de comparação

O curso Praticando gráficos: criando gráficos de comparação possui 14 minutos de vídeos, em um total de 13 atividades. Gostou? Conheça nossos outros cursos de Data Science em Data Science, ou leia nossos artigos de Data Science.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Data Science acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas