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