1
resposta

[Projeto] 15 Desafio: gráficos de comparação - Colunas e barras

Desafio 1: Quais são os lucros das vendas por ano? Em qual ano obtivemos o maior lucro?
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

1. Preparação dos dados

df_vendas = pd.read_csv('relatorio_vendas.csv')
df_vendas['data_pedido'] = pd.to_datetime(df_vendas['data_pedido'])
df_vendas['ano'] = df_vendas['data_pedido'].dt.year

Agrupando lucro por ano

lucro_por_ano = df_vendas.groupby('ano')['lucro'].sum().reset_index()

2. Configuração Visual

AZUL2, CINZA4 = '#0077b6', '#dee2e6'
fig, ax = plt.subplots(figsize=(10, 6))

Destacando o maior lucro com uma cor diferente

cores = [AZUL2 if lucro == lucro_por_ano['lucro'].max() else CINZA4 for lucro in lucro_por_ano['lucro']]

sns.barplot(data=lucro_por_ano, x='ano', y='lucro', palette=cores, ax=ax)

3. Estética e Títulos

plt.title('Lucro Total por Ano (2016 - 2019)', fontsize=18, loc='left', pad=20)
ax.set_xlabel('Ano', fontsize=14)
ax.set_ylabel('Lucro (R$)', fontsize=14)
sns.despine()

plt.show()

Desafio 2: Qual foi o faturamento (vendas) dos top 10 produtos durante o período de 2016 a 2019 do nosso conjunto de dados? Adicione um pequeno texto falando dos 3 produtos que mais venderam.

1. Agrupando as vendas por produto e pegando os 10 maiores

top_10_produtos = df_vendas.groupby('tipo_produto')['vendas'].sum().nlargest(10).reset_index()

2. Configuração Visual

fig, ax = plt.subplots(figsize=(12, 7))

Usando um gradiente para guiar o olhar

sns.barplot(data=top_10_produtos, x='vendas', y='tipo_produto', color=AZUL2, ax=ax)

3. Anotações e Texto de Suporte

plt.title('Top 10 Produtos por Faturamento (2016-2019)', fontsize=18, loc='left', pad=20)
ax.set_xlabel('Faturamento Total (R$)', fontsize=14)
ax.set_ylabel('', fontsize=14)

Adicionando o texto explicativo solicitado

texto_destaque = "Destaque: Os 3 produtos com maior faturamento foram\n"
f"1. {top_10_produtos['tipo_produto'][0]}\n"
f"2. {top_10_produtos['tipo_produto'][1]}\n"
f"3. {top_10_produtos['tipo_produto'][2]}"

ax.text(top_10_produtos['vendas'].max(), 8, texto_destaque,
fontsize=12, color='#495057', bbox=dict(facecolor='none', edgecolor='#dee2e6', boxstyle='round,pad=1'))

sns.despine()
plt.show()

1 resposta

Oi, Moacir! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Parabéns pelo desenvolvimento do projeto. Sua organização em etapas, desde a preparação dos dados até a visualização, mostra clareza no raciocínio e domínio das ferramentas. O cuidado com a estética dos gráficos e com a comunicação das informações, como o destaque do maior lucro e a descrição dos produtos mais vendidos, demonstra uma boa evolução na forma de apresentar análises.

Uma dica interessante para o futuro é usar o método sort_values() quando quiser ordenar explicitamente os dados antes de plotar, garantindo que o gráfico siga uma ordem lógica. Veja este exemplo:


df = df.sort_values(by='lucro', ascending=False)
print(df.head())

Esse código ordena o dataframe pela coluna lucro em ordem decrescente e exibe os primeiros registros, facilitando a leitura e análise antes da visualização.

Para se aprofundar no tema:

O link está em inglês, mas você poderá utilizar a tradução automática do navegador

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!