Visualização de tendências mensais
Represente a receita mensal em um gráfico de linhas, sobreponha uma média móvel de três meses e anote os meses de pico e de baixa.
Visualização de tendências mensais é uma aula grátis de Pandas & NumPy Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Pandas & NumPy Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Pandas & NumPy Academy inclui 4 aulas no total.
Calculando os totais mensais de receita
Antes de criar o gráfico, agregue o DataFrame de vendas em totais mensais. Agrupe pela coluna de período year_month e some a receita. Converta o PeriodIndex em um DatetimeIndex com .to_timestamp() para que o formatador de datas do gráfico exiba corretamente os rótulos das marcações. Ordenar pelo índice garante que o gráfico de linhas siga a ordem cronológica da esquerda para a direita.
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_parquet('sales_features.parquet')
monthly = df.groupby('year_month')['revenue'].sum().sort_index()
monthly.index = monthly.index.to_timestamp()
print(monthly.head())Criando o gráfico de linhas da receita mensal
Crie uma Figura e Eixos com plt.subplots(figsize=(12, 5)) e chame ax.plot() para desenhar a tendência da receita mensal. Use marker='o' para colocar um ponto em cada mês, de modo que os pontos de dados individuais permaneçam visíveis mesmo quando a linha estiver suavizada. Defina a cor e a espessura da linha para destacar a tendência principal das sobreposições que você adicionar posteriormente.
fig, ax = plt.subplots(figsize=(12, 5))
ax.plot(monthly.index, monthly.values,
color='steelblue', linewidth=2, marker='o', markersize=5,
label='Monthly Revenue')
ax.set_title('Monthly Revenue Trend')
ax.set_xlabel('Month')
ax.set_ylabel('Revenue (USD)')
plt.tight_layout()
plt.show()Sobrepondo uma média móvel de 3 meses
Uma linha bruta da receita mensal pode parecer irregular devido ao ruído sazonal. Sobreponha uma média móvel de 3 meses calculada com monthly.rolling(3).mean() para mostrar com mais clareza a tendência subjacente. Exiba-a como uma linha tracejada em uma cor contrastante, para que se destaque da série bruta sem ocultá-la.
rolling_avg = monthly.rolling(3).mean()
ax.plot(rolling_avg.index, rolling_avg.values,
color='darkorange', linewidth=2, linestyle='--',
label='3-Month Moving Avg')
ax.legend()
plt.show()Anotando o mês de pico
Use ax.annotate() para marcar o mês com a maior receita. Encontre o pico com monthly.idxmax() e seu valor com monthly.max(). A seta da anotação aponta de um rótulo de texto para o ponto de dados do pico, tornando a informação imediatamente visível para qualquer leitor do gráfico, inclusive para quem o receber como PNG ou PDF.
peak_date = monthly.idxmax()
peak_val = monthly.max()
ax.annotate(f'Peak: ${peak_val:,.0f}',
xy=(peak_date, peak_val),
xytext=(peak_date, peak_val * 1.1),
arrowprops=dict(arrowstyle='->', color='red'),
color='red', fontsize=10)
plt.show()Anotando o mês de menor receita
Da mesma forma, marque o mês com a menor receita usando monthly.idxmin() para sinalizar possíveis efeitos sazonais ou interrupções. As anotações nos pontos de pico e de baixa contam uma história completa: permitem que as partes interessadas vejam não apenas o melhor mês, mas também até que ponto a receita pode cair, o que ajuda no planejamento do fluxo de caixa.
trough_date = monthly.idxmin()
trough_val = monthly.min()
ax.annotate(f'Trough: ${trough_val:,.0f}',
xy=(trough_date, trough_val),
xytext=(trough_date, trough_val * 0.85),
arrowprops=dict(arrowstyle='->', color='navy'),
color='navy', fontsize=10)
plt.show()Formatação dos rótulos de data do eixo
Os rótulos de data padrão do Matplotlib geralmente se sobrepõem ou usam um formato difícil de ler. Importe mdates de matplotlib e defina um MonthLocator e um DateFormatter para controlar a frequência das marcações e o formato dos rótulos. Girar os rótulos das marcações em 45 graus evita sobreposições em um eixo de 12 meses.
import matplotlib.dates as mdates
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()Adicionando uma região sombreada para o quarto trimestre
Destaque o período do quarto trimestre (outubro a dezembro) com um fundo sombreado usando ax.axvspan(). Isso torna os padrões sazonais imediatamente visíveis: se o pico ocorrer consistentemente na área sombreada, o quarto trimestre será um período importante de vendas que merece ser priorizado em promoções. O parâmetro alpha controla a transparência do sombreamento.
import datetime
q4_start = datetime.datetime(2023, 10, 1)
q4_end = datetime.datetime(2023, 12, 31)
ax.axvspan(q4_start, q4_end, alpha=0.15, color='gold', label='Q4')
ax.legend()
plt.show()Representando a receita por categoria ao longo do tempo
Crie um gráfico com várias linhas, em que cada linha representa uma categoria de produto. Faça uma tabela dinâmica do DataFrame mensal por categoria, de modo que as colunas sejam as categorias e o índice seja o tempo; em seguida, percorra as colunas e chame ax.plot() para cada uma. O Matplotlib atribui automaticamente uma cor diferente a cada linha quando é chamado repetidamente no mesmo objeto Axes.
monthly_cat = df.groupby(['year_month', 'category'])['revenue'].sum().unstack('category')
monthly_cat.index = monthly_cat.index.to_timestamp()
fig, ax = plt.subplots(figsize=(12, 6))
for col in monthly_cat.columns:
ax.plot(monthly_cat.index, monthly_cat[col], label=col, linewidth=1.5)
ax.legend(loc='upper left', fontsize=8)
ax.set_title('Monthly Revenue by Category')
plt.tight_layout()
plt.show()Gráfico de barras empilhadas da receita mensal
Um gráfico de barras empilhadas mostra a receita mensal total e também revela a contribuição de cada categoria para a pilha. Use monthly_cat.plot(kind='bar', stacked=True, ax=ax) diretamente no DataFrame transformado em tabela dinâmica. As barras empilhadas são mais adequadas quando há menos de seis categorias; caso contrário, fica difícil distinguir as cores.
fig, ax = plt.subplots(figsize=(12, 5))
monthly_cat.plot(kind='bar', stacked=True, ax=ax, colormap='tab10')
ax.set_title('Monthly Revenue by Category (Stacked)')
ax.set_xlabel('Month')
ax.set_ylabel('Revenue')
ax.legend(loc='upper left', fontsize=8)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()Taxa de crescimento mês a mês
Represente a taxa percentual de crescimento mês a mês junto à receita para dar contexto: uma barra visualmente pequena em janeiro pode representar um salto de crescimento de 20% em relação ao mês anterior. Calcule o crescimento com monthly.pct_change() * 100 e represente-o em um segundo eixo y usando ax.twinx(), compartilhando o mesmo eixo x sem misturar unidades.
growth = monthly.pct_change() * 100
fig, ax1 = plt.subplots(figsize=(12, 5))
ax2 = ax1.twinx()
ax1.bar(monthly.index, monthly.values, width=20, color='steelblue', alpha=0.6, label='Revenue')
ax2.plot(growth.index, growth.values, color='red', marker='o', label='MoM Growth %')
ax1.set_ylabel('Revenue')
ax2.set_ylabel('MoM Growth %')
plt.title('Revenue and Month-over-Month Growth')
plt.tight_layout()
plt.show()Salvando a figura para relatórios
Use fig.savefig('monthly_trend.png', dpi=150, bbox_inches='tight') para produzir um PNG de alta resolução adequado para apresentações ou painéis da web. O argumento bbox_inches='tight' remove o espaço em branco excedente, e dpi=150 produz uma imagem nítida sem criar um arquivo excessivamente grande. Salve também em PDF para relatórios com qualidade de impressão.
fig.savefig('monthly_trend.png', dpi=150, bbox_inches='tight')
fig.savefig('monthly_trend.pdf', bbox_inches='tight')
print('Figure saved as PNG and PDF')Verificação rápida
Teste sua compreensão dos conceitos de Análise de Dados desta lição.
Recapitulação da lição
Nesta lição, você aprendeu a: calcular os totais de receita mensal e representá-los em um gráfico de linhas, sobrepor uma média móvel e anotar os meses de pico e de baixa e salvar figuras com qualidade de publicação em PNG e PDF. A seguir, exploraremos a formação de sessões e a sequência de eventos nos dados de comportamento dos usuários.
Perguntas Frequentes
A aula “Visualização de tendências mensais” é grátis?
Sim — o texto completo de “Visualização de tendências mensais” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Pandas & NumPy Academy, atualize para CoddyKit PRO. O curso de Pandas & NumPy Academy inclui 4 aulas no total.
O que vou aprender em “Visualização de tendências mensais”?
Represente a receita mensal em um gráfico de linhas, sobreponha uma média móvel de três meses e anote os meses de pico e de baixa. Você pratica Pandas & NumPy Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Pandas & NumPy Academy?
Nenhuma experiência prévia é necessária. Pandas & NumPy Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Visualização de tendências mensais”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Pandas & NumPy Academy?
Sim. Cada aula de Pandas & NumPy Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Carregando e auditando o conjunto de dados de vendas
- Cálculos de receita e criação de variáveis
- Análise com GroupBy por região e categoria
- Visualização de tendências mensais