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()