knitr::opts_chunk$set(fig.align="center", fig.width=9, fig.height=7)

library(dplyr)
library(tidyr)
library(sf)
library(tmap)
library(knitr)

setwd(params$base_dir)

# Leitura e preparação da base de renda
renda = read.csv(params$csv_renda, header = FALSE, sep = ";", stringsAsFactors = FALSE)
colnames(renda) = c("municipio","Renda2000","Renda2010","Total")
renda$Renda2000 = as.numeric(gsub(",", ".", renda$Renda2000))
renda$Renda2010 = as.numeric(gsub(",", ".", renda$Renda2010))
P33_00 = quantile(renda$Renda2000, probs = 0.33, na.rm = TRUE)
P67_00 = quantile(renda$Renda2000, probs = 0.67, na.rm = TRUE)
P33_10 = quantile(renda$Renda2010, probs = 0.33, na.rm = TRUE)
P67_10 = quantile(renda$Renda2010, probs = 0.67, na.rm = TRUE)
renda$faixa_renda00 = cut(renda$Renda2000,
  breaks = c(min(renda$Renda2000, na.rm = TRUE), P33_00, P67_00, max(renda$Renda2000, na.rm = TRUE)),
  labels = c("Baixo", "Médio", "Alto"), right = TRUE, include.lowest = TRUE)
renda$faixa_renda10 = cut(renda$Renda2010,
  breaks = c(min(renda$Renda2010, na.rm = TRUE), P33_10, P67_10, max(renda$Renda2010, na.rm = TRUE)),
  labels = c("Baixo", "Médio", "Alto"), right = TRUE, include.lowest = TRUE)
nivel_renda = c("Baixo", "Médio", "Alto")
renda = renda %>% mutate(
  evolucao = case_when(
    match(faixa_renda10, nivel_renda) > match(faixa_renda00, nivel_renda) ~ "Melhorou",
    match(faixa_renda10, nivel_renda) < match(faixa_renda00, nivel_renda) ~ "Piorou",
    TRUE ~ "Igual"
  ),
  evolucao = factor(evolucao, levels = c("Piorou", "Igual", "Melhorou")),
  CD_MUN6 = substr(municipio, 1, 6)
)

# Leitura dos shapefiles e joins
muni_sf = st_read(params$shp_muni, quiet = TRUE)
meso_sf = st_read(params$shp_meso, quiet = TRUE)
micro_sf = st_read(params$shp_micro, quiet = TRUE)
muni_sf = muni_sf %>% mutate(CD_MUN6 = substr(CD_MUN, 1, 6))
mapa_renda = left_join(muni_sf, renda, by = "CD_MUN6")
mapa_renda = st_make_valid(mapa_renda)
meso_sf    = st_make_valid(meso_sf)
micro_sf   = st_make_valid(micro_sf)
if (st_crs(meso_sf) != st_crs(mapa_renda)) meso_sf  = st_transform(meso_sf,  st_crs(mapa_renda))
if (st_crs(micro_sf) != st_crs(mapa_renda)) micro_sf = st_transform(micro_sf, st_crs(mapa_renda))

# Tabela por Mesorregião
muni_renda_meso = st_join(mapa_renda, meso_sf["NM_MESO"], join = st_within)
tabela = muni_renda_meso %>%
  st_drop_geometry() %>%
  group_by(NM_MESO, evolucao) %>%
  summarise(qtd = n(), .groups = "drop") %>%
  tidyr::pivot_wider(names_from = evolucao, values_from = qtd, values_fill = 0) %>%
  arrange(NM_MESO)
kable(tabela, caption = "Contagem de municípios por evolução (2000–2010), por Mesorregião")
Contagem de municípios por evolução (2000–2010), por Mesorregião
NM_MESO Piorou Igual Melhorou
Campo das Vertentes 3 25 8
Central Mineira 4 20 6
Jequitinhonha 3 46 2
Metropolitana de Belo Horizonte 14 74 17
Noroeste de Minas 2 13 4
Norte de Minas 0 85 4
Oeste de Minas 2 36 6
Sul/Sudoeste de Minas 25 109 12
Triângulo Mineiro/Alto Paranaíba 4 55 7
Vale do Mucuri 1 20 2
Vale do Rio Doce 17 67 18
Zona da Mata 30 92 20
# Mapa — Evolução 2000–2010
muni_micro = st_join(mapa_renda, micro_sf[c("CD_MICRO","NM_MICRO")], join = st_within)
tmap_mode("plot")
tm_shape(muni_micro) +
  tm_fill("evolucao", style = "cat",
          palette = c("Piorou" = "red", "Igual" = "white", "Melhorou" = "blue"),
          title = "Evolução 2000–2010") +
  tm_borders(alpha = 0.5) +
  tm_layout(legend.outside = TRUE)

# Microrregiões (IDs) + Mesorregiões (contorno e nome)
tm_shape(micro_sf) +
  tm_polygons(col = "white", border.col = "black") +
  tm_text("CD_MICRO", size = 0.6, col = "black") +
  tm_shape(meso_sf) +
  tm_borders(lwd = 2, col = "red") +
  tm_text("NM_MESO", size = 1, col = "blue", shadow = TRUE) +
  tm_layout(title = "Microrregiões (IDs) e Mesorregiões de MG")