1
resposta

[Projeto] 11 Desafio: gráficos de composição - Acréscimos e decréscimos

Desafio 1:

Como está composto o PIB do Estado de São Paulo em 2020 partindo do valor agregado bruto dos bens e serviços produzidos e os impostos líquidos?

import pandas as pd
import plotly.graph_objects as go

1. Filtrando os dados para o Estado de São Paulo no ano de 2020

Supondo que seu DataFrame principal se chame df_pib

sp_2020 = df_pib.query("sigla_uf == 'SP' and ano == 2020").iloc[0]

2. Preparando os dados para o gráfico

Vamos converter para Bilhões para facilitar a leitura (/ 1e9)

categorias = ['Agropecuária', 'Indústria', 'Serviços', 'Impostos', 'PIB Total']
valores = [
sp_2020['va_agropecuaria'] / 1e9,
sp_2020['va_industria'] / 1e9,
sp_2020['va_servicos'] / 1e9,
sp_2020['impostos_liquidos'] / 1e9,
0 # O Plotly calculará o total automaticamente com a medida 'total'
]

3. Criando o gráfico de cascata

fig = go.Figure(go.Waterfall(
name = "PIB SP 2020",
orientation = "v",
measure = ["relative", "relative", "relative", "relative", "total"],
x = categorias,
textposition = "outside",
text = [f"R$ {v:.1f}B" if v != 0 else "" for v in valores[:-1]],
y = [v if i < 4 else sp_2020['pib'] / 1e9 for i, v in enumerate(valores)],
connector = {"line":{"color":"rgb(63, 63, 63)"}},
increasing = {"marker":{"color":"#06d6a0"}}, # Cor para acréscimos
totals = {"marker":{"color":"#3a86ff"}} # Cor para a barra final
))

4. Ajustando o Layout

fig.update_layout(
title = "Composição do PIB de São Paulo (2020) - Em Bilhões de Reais",
showlegend = False,
plot_bgcolor = 'white',
font = dict(size=14)
)

fig.show()

Desafio 2:

Qual a evolução anual do valor agregado de serviços na Região Nordeste entre os anos de 2016 a 2020?

Caso precise de ajuda, uma opção de solução da atividade estará disponível na seção “Opinião da pessoa instrutora”.

import pandas as pd
import plotly.graph_objects as go

1. Filtragem e Agrupamento

Selecionamos a região Nordeste e o recorte temporal de 2016 a 2020

nordeste_servicos = df_pib.query("regiao == 'Nordeste' and ano >= 2016")
.groupby("ano")["va_servicos"].sum().reset_index()

2. Cálculo da Variação Anual

O método .diff() calcula a diferença entre a linha atual e a anterior

O .fillna() garante que o primeiro ano (2016) apareça como o valor total inicial

nordeste_servicos['variacao'] = nordeste_servicos['va_servicos'].diff().fillna(nordeste_servicos['va_servicos'])

Converter para bilhões para facilitar a visualização

nordeste_servicos['variacao_bi'] = nordeste_servicos['variacao'] / 1e9

3. Criação do Gráfico de Cascata

fig = go.Figure(go.Waterfall(
name = "Evolução Serviços NE",
orientation = "v",
# O primeiro ano é 'absolute' (base), os seguintes são 'relative' (mudança)
measure = ["absolute", "relative", "relative", "relative", "relative"],
x = nordeste_servicos['ano'].astype(str),
y = nordeste_servicos['variacao_bi'],
text = nordeste_servicos['variacao_bi'].round(1),
textposition = "outside",
decreasing = {"marker":{"color":"#ef476f"}}, # Cor para quedas
increasing = {"marker":{"color":"#06d6a0"}}, # Cor para altas
connector = {"line":{"color":"gray"}}
))

4. Ajuste de Layout

fig.update_layout(
title = "Variação Anual do Valor de Serviços - Região Nordeste (2016-2020)",
yaxis_title = "Bilhões de Reais",
plot_bgcolor = 'rgba(0,0,0,0)',
font = dict(size=14)
)

fig.show()

1 resposta

Oi, Moacir! Como vai?

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

Você estruturou os dois desafios, principalmente o uso do query para filtrar os dados e o cuidado em converter os valores para bilhões, o que melhora muito a leitura do gráfico.

Continue assim!

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

Alura

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