PIB

Author

julia, marilia, eduarda

rm(list = ls())

library(sidrar)
library(geobr)
library(sf)
Linking to GEOS 3.12.1, GDAL 3.8.4, PROJ 9.4.0; sf_use_s2() is TRUE
library(dplyr)

Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
library(ggplot2)
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ forcats   1.0.1     ✔ stringr   1.6.0
✔ lubridate 1.9.5     ✔ tibble    3.3.1
✔ purrr     1.2.2     ✔ tidyr     1.3.2
✔ readr     2.2.0     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors


── 1. COLETA ──────────────────────────────────────────────────────────────────

dados_raw <- get_sidra(
  api = "/t/5938/n3/all/v/37,513,517,6575,525,543/p/2002,2021/d/v37%200,v513%200,v517%200,v6575%200,v525%200,v543%200"
)
All others arguments are desconsidered when 'api' is informed

── 2. LIMPEZA ─────────────────────────────────────────────────────────────────

dados <- dados_raw %>%
  select(
    cod_uf   = `Unidade da Federação (Código)`,
    uf       = `Unidade da Federação`,
    ano      = `Ano`,
    variavel = `Variável`,
    valor    = `Valor`
  ) %>%
  mutate(
    cod_uf = as.numeric(cod_uf),
    ano    = as.integer(ano),
    valor  = as.numeric(valor),
    variavel_label = case_when(
      grepl("^Produto Interno Bruto",    variavel) ~ "PIB corrente",
      grepl("agropecuária",              variavel, ignore.case = TRUE) ~ "VAB Agropecuária",
      grepl("indústria",                 variavel, ignore.case = TRUE) ~ "VAB Indústria",
      grepl("serviços, exclusive",       variavel, ignore.case = TRUE) ~ "VAB Serviços",
      grepl("administração, defesa",     variavel, ignore.case = TRUE) ~ "VAB Adm. Pública",
      grepl("Impostos, líquidos",        variavel, ignore.case = TRUE) ~ "Impostos líquidos",
      TRUE ~ variavel
    )
  )

Confirma os rótulos

dados %>% distinct(variavel, variavel_label)
                                                                                                                                variavel
1                                                                                               Produto Interno Bruto a preços correntes
2                                                                              Valor adicionado bruto a preços correntes da agropecuária
3                                                                                 Valor adicionado bruto a preços correntes da indústria
4 Valor adicionado bruto a preços correntes dos serviços, exclusive administração, defesa, educação e saúde públicas e seguridade social
5                      Valor adicionado bruto a preços correntes da administração, defesa, educação e saúde públicas e seguridade social
6                                                                     Impostos, líquidos de subsídios, sobre produtos a preços correntes
     variavel_label
1      PIB corrente
2  VAB Agropecuária
3     VAB Indústria
4      VAB Serviços
5  VAB Adm. Pública
6 Impostos líquidos

── 3. MALHA ───────────────────────────────────────────────────────────────────

mapa <- read_state(year = 2020)
⠙ 2 items, page 1 | 34ms
ℹ Using year/date 2020

── 4. FUNÇÃO PARA UM MAPA INDIVIDUAL GRANDE ──────────────────────────────────

gerar_mapa <- function(var_label, ano_sel, titulo_fill = var_label,
                       fmt = NULL, paleta = "plasma") {
  
  df <- dados %>% filter(variavel_label == var_label, ano == ano_sel)
  
  mapa_dados <- mapa %>%
    left_join(df, by = c("code_state" = "cod_uf"))
  
  if (is.null(fmt))
    fmt <- function(x) scales::comma(x, big.mark = ".", decimal.mark = ",")
  
  ggplot(mapa_dados) +
    geom_sf(aes(fill = valor)) +
    scale_fill_viridis_c(option = paleta, labels = fmt, na.value = "grey80") +
    theme_void() +
    labs(
      title = paste0(var_label, " – ", ano_sel),
      fill  = titulo_fill
    )
}

── 5. FORMATAÇÕES ─────────────────────────────────────────────────────────────

fmt_bi    <- function(x) paste0(round(x / 1e3, 1), " bi")
fmt_reais <- function(x) paste0("R$ ", scales::comma(x, big.mark = ".", decimal.mark = ","))
fmt_pct   <- function(x) paste0(round(x, 1), "%")

── 6. GERA CADA MAPA INDIVIDUALMENTE ─────────────────────────────────────────

PIB CORRENTE

gerar_mapa("PIB corrente", 2002, fmt = fmt_bi)

gerar_mapa("PIB corrente", 2021, fmt = fmt_bi)

VAB AGROPECUÁRIA

gerar_mapa("VAB Agropecuária", 2002, fmt = fmt_bi, paleta = "inferno")

gerar_mapa("VAB Agropecuária", 2021, fmt = fmt_bi, paleta = "inferno")

VAB INDÚSTRIA

gerar_mapa("VAB Indústria", 2002, fmt = fmt_bi)

gerar_mapa("VAB Indústria", 2021, fmt = fmt_bi)

VAB SERVIÇOS

gerar_mapa("VAB Serviços", 2002, fmt = fmt_bi, paleta = "magma")

gerar_mapa("VAB Serviços", 2021, fmt = fmt_bi, paleta = "magma")

VAB ADM. PÚBLICA

gerar_mapa("VAB Adm. Pública", 2002, fmt = fmt_bi, paleta = "cividis")

gerar_mapa("VAB Adm. Pública", 2021, fmt = fmt_bi, paleta = "cividis")