Qual Estado tem mais pau-rodado?
Em Cuiabá, cidade que nasci e cresci, pau-rodado é um substantivo que define pessoas que nasceram em outro Estado mas moram em Cuiabá e ali construíram suas vidas. Aliás, Cuiabá sempre foi conhecida por ser uma Cidade super acolhedora e talvez por isso todos encaram o dito pau-rodado de uma forma engraçada e sem qualquer sentido pejorativo.
Muito bem, meu interesse com este post é analisar o comportamento dos fluxos migratórios entre Estados e assim encontrar os Estados que tem mais e menos pau-rodado em sua população residente. Serei breve e não vamos abordar todos os Estados, mas se você tiver curiosidade poderá aproveitar o código para uma análise mais ampla.
A motivação partiu de uma matéria do Nexo Jornal sobre este tema, porém ao nível estadual. Depois de algumas horas tentando decifrar o site do IBGE, cheguei na página que informa a população residente, por lugar de nascimento e unidade da federação.
Então vamos começar a análise carregando os pacotes do R necessários para este post.
if (!require("pacman")) install.packages("pacman")
pacman::p_load(readr, dplyr, tidyr, forcats, sf, geosphere, brmap, ggplot2, ggrepel, geofacet)
pacman::p_load_gh("italocegatta/brmap")
Os dados originais estão disponíveis neste link, fiz apenas adequações porque o IBGE insiste em mesclar células nas tabelas disponibilizadas. Já nesta tabela você consegue olhar para o Estado que você mora e analisar quanto dos residentes nasceram em outros Estados. Mas o objetivo é enxergar isso de forma gráfica para ampliar a percepção dos dados.
base <- read_csv2("https://raw.githubusercontent.com/italocegatta/italocegatta.github.io_source/master/content/dados/pnad_2015_migracao.csv")
base
## # A tibble: 27 x 28
## Estado Rondônia Acre Amazonas Roraima Pará Amapá Tocantins Maranhão
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Rondô~ 57.4 1.84 1.9 0.08 0.7 NA 0.02 1.02
## 2 Acre 1.54 87.9 3.89 0.02 0.17 NA 0.02 0.11
## 3 Amazo~ 0.46 1.6 87.6 0.23 5.36 0.13 0.06 0.87
## 4 Rorai~ 0.65 0.24 5.16 55.6 6.54 0.04 0.570 19.0
## 5 Pará 0.03 0.02 0.49 0.02 84.6 0.19 1.07 6.89
## 6 Amapá 0.1 0.03 0.2 0.17 20.8 72.7 0.1 3.65
## 7 Tocan~ 0.07 0.07 0.02 NA 2.83 0.02 69.5 8.58
## 8 Maran~ 0.03 0.01 0.05 NA 1.11 0.01 0.32 92.4
## 9 Piauí 0.04 0.02 0.04 0.05 0.28 NA 0.11 3.97
## 10 Ceará 0.03 0.04 0.11 NA 0.22 0.01 0.03 0.35
## # ... with 17 more rows, and 19 more variables: Piauí <dbl>, Ceará <dbl>,
## # `Rio Grande do Norte` <dbl>, Paraíba <dbl>, Pernambuco <dbl>,
## # Alagoas <dbl>, Sergipe <dbl>, Bahia <dbl>, `Minas Gerais` <dbl>,
## # `Espírito Santo` <dbl>, `Rio de Janeiro` <dbl>, `São Paulo` <dbl>,
## # Paraná <dbl>, `Santa Catarina` <dbl>, `Rio Grande do Sul` <dbl>, `Mato
## # Grosso do Sul` <dbl>, `Mato Grosso` <dbl>, Goiás <dbl>, `Distrito
## # Federal` <dbl>
Dados longitudinais como estes ajudam humanos a enxergar os valores de forma mais fácil, mas do ponto de vista de processamento de dados, não dá pra fazer muita coisa com os dados assim. Vamos organizá-los seguindo a filosofia do Tidy data.
A nova tabela nos informa a porcentagem da população residente (coluna ‘valor’) para cada Estado, subdividindo os valores por local de nascimento. E agora vai a primeira simplificação: foram selecionados apenas os 6 Estados de nascimento mais representativos para cada Estado de residência.
df <- base %>%
gather(reside, valor, -Estado) %>%
select(nasce = Estado, reside, valor) %>%
replace_na(list(valor = 0)) %>%
group_by(nasce) %>%
filter(row_number(-valor) <= 6) %>%
ungroup()
df
## # A tibble: 162 x 3
## nasce reside valor
## <chr> <chr> <dbl>
## 1 Rondônia Rondônia 57.4
## 2 Acre Rondônia 1.54
## 3 Amazonas Rondônia 0.46
## 4 Acre Acre 87.9
## 5 Amazonas Acre 1.6
## 6 Acre Amazonas 3.89
## 7 Amazonas Amazonas 87.6
## 8 Roraima Amazonas 5.16
## 9 Roraima Roraima 55.6
## 10 Amazonas Pará 5.36
## # ... with 152 more rows
Vamos nos preparar para a segunda simplificação: selecionar os extremos em termos de população que nasceu e reside no mesmo Estado. Então, RS, CE e PE são os Estados que mais tem moradores nascidos dentro do próprio Estado, enquanto RO, RR e DF tem uma parcela maior de residentes nascidos em outros Estados.
estados_interesse <- df %>%
filter(reside == nasce) %>%
filter(row_number(-valor) <= 3 | row_number(valor) <= 3) %>%
arrange(-valor) %>%
pull(nasce)
estados_interesse
## [1] "Rio Grande do Sul" "Ceará" "Pernambuco"
## [4] "Rondônia" "Roraima" "Distrito Federal"
Preparando para o mapa, vamos pegar as coordenadas dos centroides de cada Estado.
estado_cent <- brmap_estado_simples %>%
st_centroid() %>%
cbind(., st_coordinates(.)) %>%
st_set_geometry(NULL) %>%
select(estado = estado_nome, lon = X, lat = Y)
estado_cent
## estado lon lat
## 1 Rondônia -62.84198 -10.913179
## 2 Acre -70.47331 -9.212856
## 3 Amazonas -64.65314 -4.154180
## 4 Roraima -61.39929 2.084236
## 5 Pará -53.06412 -3.974753
## 6 Amapá -51.95593 1.443332
## 7 Tocantins -48.32923 -10.150295
## 8 Maranhão -45.27924 -5.060364
## 9 Piauí -42.96862 -7.387507
## 10 Ceará -39.61569 -5.093333
## 11 Rio Grande do Norte -36.67345 -5.839671
## 12 Paraíba -36.83252 -7.121067
## 13 Pernambuco -37.99844 -8.326032
## 14 Alagoas -36.62489 -9.513860
## 15 Sergipe -37.44398 -10.584509
## 16 Bahia -41.72093 -12.475028
## 17 Minas Gerais -44.67342 -18.456183
## 18 Espírito Santo -40.67104 -19.575096
## 19 Rio de Janeiro -42.65244 -22.188742
## 20 São Paulo -48.73408 -22.263477
## 21 Paraná -51.61670 -24.635890
## 22 Santa Catarina -50.47486 -27.247326
## 23 Rio Grande do Sul -53.32041 -29.705543
## 24 Mato Grosso do Sul -54.84563 -20.327333
## 25 Mato Grosso -55.91218 -12.949089
## 26 Goiás -49.62337 -16.042019
## 27 Distrito Federal -47.79736 -15.780667
E agora, o pulo do gato. Vamos criar as linhas que ligam os Estados entre si e em seguida adicionar à tabela que informa as relações de fluxo. Portanto, para cada relação entre Estado de nascimento/residência temos uma feição de linha e o valor que representa a porcentagem de residentes.
coord <- df %>%
left_join(estado_cent, by = c("nasce" = "estado")) %>%
left_join(estado_cent, by = c("reside" = "estado")) %>%
filter(nasce %in% estados_interesse)
linhas <- gcIntermediate(
select(coord, lon.x, lat.x),
select(coord, lon.y, lat.y),
sp = TRUE, addStartEnd = TRUE
) %>%
st_as_sf()
fluxo_linha <- coord %>%
select(nasce, reside, valor) %>%
bind_cols(linhas) %>%
left_join(estado_cent, by = c("reside" = "estado")) %>%
mutate(nasce = fct_relevel(nasce, estados_interesse)) %>%
st_as_sf()
fluxo_linha
## Simple feature collection with 36 features and 5 fields
## geometry type: LINESTRING
## dimension: XY
## bbox: xmin: -64.65314 ymin: -29.70554 xmax: -36.62489 ymax: 2.084236
## epsg (SRID): 4326
## proj4string: +proj=longlat +ellps=WGS84 +no_defs
## # A tibble: 36 x 6
## nasce reside valor geometry lon lat
## <fct> <chr> <dbl> <LINESTRING [°]> <dbl> <dbl>
## 1 Rondônia Rondôn~ 57.4 (-62.84198 -10.91318, -62.84198 -10~ -62.8 -10.9
## 2 Roraima Amazon~ 5.16 (-61.39929 2.084236, -61.46309 1.96~ -64.7 -4.15
## 3 Roraima Roraima 55.6 (-61.39929 2.084236, -61.39929 2.08~ -61.4 2.08
## 4 Roraima Pará 6.54 (-61.39929 2.084236, -61.23585 1.96~ -53.1 -3.97
## 5 Roraima Maranh~ 19.0 (-61.39929 2.084236, -61.08345 1.94~ -45.3 -5.06
## 6 Distrit~ Maranh~ 4.42 (-47.79736 -15.78067, -47.74601 -15~ -45.3 -5.06
## 7 Ceará Piauí 0.39 (-39.61569 -5.093333, -39.68117 -5.~ -43.0 -7.39
## 8 Distrit~ Piauí 5.08 (-47.79736 -15.78067, -47.69952 -15~ -43.0 -7.39
## 9 Roraima Ceará 2.76 (-61.39929 2.084236, -60.9725 1.942~ -39.6 -5.09
## 10 Ceará Ceará 95.8 (-39.61569 -5.093333, -39.61569 -5.~ -39.6 -5.09
## # ... with 26 more rows
Para deixar o gráfico um pouco mais bonito, vamos dar cor ao valor que estamos estudando. Mas agora a feição será o polígono que representa o Estado de residentes.
fluxo_poligono <- brmap_estado_simples %>%
left_join(df, by = c("estado_nome" = "reside")) %>%
rename(reside = estado_nome) %>%
filter(nasce %in% estados_interesse) %>%
mutate(nasce = fct_relevel(nasce, estados_interesse)) %>%
select(nasce, reside, valor)
fluxo_poligono
## Simple feature collection with 36 features and 3 fields
## geometry type: POLYGON
## dimension: XY
## bbox: xmin: -73.80156 ymin: -33.75077 xmax: -34.79288 ymax: 5.271841
## epsg (SRID): 4674
## proj4string: +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs
## # A tibble: 36 x 4
## nasce reside valor geometry
## * <fct> <chr> <dbl> <POLYGON [°]>
## 1 Rondônia Rondôn~ 57.4 ((-61.58313 -8.798689, -61.5801 -8.802692, -6~
## 2 Roraima Amazon~ 5.16 ((-63.37209 2.211862, -63.35979 2.197102, -63~
## 3 Roraima Roraima 55.6 ((-58.8955 1.227694, -58.89546 0.9047314, -58~
## 4 Roraima Pará 6.54 ((-54.87225 2.433747, -54.87625 2.426694, -54~
## 5 Roraima Maranh~ 19.0 ((-41.81411 -2.739309, -41.82457 -2.756218, -~
## 6 Distrito F~ Maranh~ 4.42 ((-41.81411 -2.739309, -41.82457 -2.756218, -~
## 7 Ceará Piauí 0.39 ((-41.32268 -2.92132, -41.32156 -2.935416, -4~
## 8 Distrito F~ Piauí 5.08 ((-41.32268 -2.92132, -41.32156 -2.935416, -4~
## 9 Roraima Ceará 2.76 ((-37.25329 -4.831556, -37.44645 -4.880961, -~
## 10 Ceará Ceará 95.8 ((-37.25329 -4.831556, -37.44645 -4.880961, -~
## # ... with 26 more rows
Pronto, já temos todos os dados que fazer o gráfico de interesse. Lembrando que optamos por dar destaque a 6 Estados e para cada um deles, os 6 Estados de nascimento que mais representam a população de residentes. Sim, é um tanto complexo. Eu fiquei algumas horas para poder criar o código e entender o que estava processando.
Como exemplo vamos interpretar as informações de Roraima: do total de residentes, 55.6% nasceram no próprio Estado de Roraima; 5.2%, 6.5% e 19% nasceram no Amazonas, Pará e Maranhão, respectivamente.
ggplot() +
geom_sf(data = brmap_estado_simples, color = "white", fill = "grey80", size = 0.3) +
geom_sf(data = fluxo_poligono, aes(fill = valor), color = "white", size = 0.3) +
geom_sf(data = fluxo_linha, color = "cyan", size = 0.3) +
geom_label_repel(
data = fluxo_linha,
aes(lon, lat, label = round(valor, 1)),
size = 3, segment.colour = NA
) +
facet_wrap(~nasce) +
labs(
title = "População residente (% do total geral)",
subtitle = "PNAD/IBGE, 2015",
x = NULL, y = NULL
) +
scale_fill_viridis_c(guide = FALSE) +
coord_sf(datum = NA) +
theme_void(16)
Pontos interessantes:
- Rondônia e Roraima retém uma proporção parecida da população dentro do próprio Estado, entretanto o pessoal que mora em Rondônia veio do Sul e Sudeste; ao passo que os moradores de Roraima vêm do AM, PA e MA.
- O Distrito Federal não me surpreendeu, grande parte de pessoas nasceram em GO, MG e BA.
- Um número expressivo de pessoas que nasceram em São Paulo e hoje moram no CE e PE… parece que o jogo virou, não é mesmo?
Caso tenha alguma dúvida ou sugestão sobre o post, fique à vontade para fazer um comentário ou me contatar por E-mail.
sessioninfo::session_info(c("readr", "dplyr", "ggplot2", "tidyr", "forcats", "sf", "geosphere", "ggrepel", "geofacet", "brmap"))
## - Session info ----------------------------------------------------------
## setting value
## version R version 3.5.3 (2019-03-11)
## os Windows 10 x64
## system x86_64, mingw32
## ui RTerm
## language (EN)
## collate Portuguese_Brazil.1252
## ctype Portuguese_Brazil.1252
## tz America/Sao_Paulo
## date 2019-08-25
##
## - Packages --------------------------------------------------------------
## package * version date lib source
## askpass 1.1 2019-01-13 [1] CRAN (R 3.5.2)
## assertthat 0.2.1 2019-03-21 [1] CRAN (R 3.5.3)
## backports 1.1.4 2019-04-10 [1] CRAN (R 3.5.3)
## BH 1.69.0-1 2019-01-07 [1] CRAN (R 3.5.2)
## brmap * 0.1.0 2019-03-04 [1] local
## class 7.3-15 2019-01-01 [2] CRAN (R 3.5.3)
## classInt 0.4-1 2019-08-06 [1] CRAN (R 3.5.3)
## cli 1.1.0 2019-03-19 [1] CRAN (R 3.5.3)
## clipr 0.7.0 2019-07-23 [1] CRAN (R 3.5.3)
## colorspace 1.4-1 2019-03-18 [1] CRAN (R 3.5.3)
## crayon 1.3.4 2017-09-16 [1] CRAN (R 3.5.1)
## curl 4.0 2019-07-22 [1] CRAN (R 3.5.3)
## DBI 1.0.0 2018-05-02 [1] CRAN (R 3.5.1)
## digest 0.6.20 2019-07-04 [1] CRAN (R 3.5.3)
## dplyr * 0.8.3 2019-07-04 [1] CRAN (R 3.5.3)
## e1071 1.7-2 2019-06-05 [1] CRAN (R 3.5.3)
## ellipsis 0.2.0.1 2019-07-02 [1] CRAN (R 3.5.3)
## fansi 0.4.0 2018-10-05 [1] CRAN (R 3.5.1)
## forcats * 0.4.0 2019-02-17 [1] CRAN (R 3.5.2)
## geofacet * 0.1.10 2019-03-13 [1] CRAN (R 3.5.3)
## geogrid 0.1.1 2018-12-11 [1] CRAN (R 3.5.2)
## geosphere * 1.5-10 2019-05-26 [1] CRAN (R 3.5.3)
## ggplot2 * 3.2.1 2019-08-10 [1] CRAN (R 3.5.3)
## ggrepel * 0.8.1 2019-05-07 [1] CRAN (R 3.5.3)
## glue 1.3.1 2019-03-12 [1] CRAN (R 3.5.3)
## gridExtra 2.3 2017-09-09 [1] CRAN (R 3.5.1)
## gtable 0.3.0 2019-03-25 [1] CRAN (R 3.5.3)
## hms 0.5.0 2019-07-09 [1] CRAN (R 3.5.3)
## httr 1.4.1 2019-08-05 [1] CRAN (R 3.5.3)
## imguR 1.0.3 2016-03-29 [1] CRAN (R 3.5.1)
## jpeg 0.1-8 2014-01-23 [1] CRAN (R 3.5.0)
## jsonlite 1.6 2018-12-07 [1] CRAN (R 3.5.2)
## KernSmooth 2.23-15 2015-06-29 [2] CRAN (R 3.5.3)
## labeling 0.3 2014-08-23 [1] CRAN (R 3.5.0)
## lattice 0.20-38 2018-11-04 [2] CRAN (R 3.5.3)
## lazyeval 0.2.2 2019-03-15 [1] CRAN (R 3.5.3)
## magrittr 1.5 2014-11-22 [1] CRAN (R 3.5.1)
## MASS 7.3-51.1 2018-11-01 [2] CRAN (R 3.5.3)
## Matrix 1.2-17 2019-03-22 [1] CRAN (R 3.5.3)
## mgcv 1.8-28 2019-03-21 [1] CRAN (R 3.5.3)
## mime 0.7 2019-06-11 [1] CRAN (R 3.5.3)
## munsell 0.5.0 2018-06-12 [1] CRAN (R 3.5.1)
## nlme 3.1-137 2018-04-07 [2] CRAN (R 3.5.3)
## openssl 1.4.1 2019-07-18 [1] CRAN (R 3.5.3)
## pillar 1.4.2 2019-06-29 [1] CRAN (R 3.5.3)
## pkgconfig 2.0.2 2018-08-16 [1] CRAN (R 3.5.1)
## plogr 0.2.0 2018-03-25 [1] CRAN (R 3.5.1)
## plyr 1.8.4 2016-06-08 [1] CRAN (R 3.5.1)
## png 0.1-7 2013-12-03 [1] CRAN (R 3.5.0)
## purrr 0.3.2 2019-03-15 [1] CRAN (R 3.5.3)
## R6 2.4.0 2019-02-14 [1] CRAN (R 3.5.2)
## RColorBrewer 1.1-2 2014-12-07 [1] CRAN (R 3.5.0)
## Rcpp 1.0.2 2019-07-25 [1] CRAN (R 3.5.3)
## RcppArmadillo 0.9.600.4.0 2019-07-15 [1] CRAN (R 3.5.3)
## readr * 1.3.1 2018-12-21 [1] CRAN (R 3.5.2)
## reshape2 1.4.3 2017-12-11 [1] CRAN (R 3.5.1)
## rgeos 0.5-1 2019-08-05 [1] CRAN (R 3.5.3)
## rlang 0.4.0 2019-06-25 [1] CRAN (R 3.5.3)
## rnaturalearth 0.1.0 2017-03-21 [1] CRAN (R 3.5.1)
## scales 1.0.0 2018-08-09 [1] CRAN (R 3.5.1)
## sf * 0.7-7 2019-07-24 [1] CRAN (R 3.5.3)
## sp 1.3-1 2018-06-05 [1] CRAN (R 3.5.1)
## stringi 1.4.3 2019-03-12 [1] CRAN (R 3.5.3)
## stringr 1.4.0 2019-02-10 [1] CRAN (R 3.5.2)
## sys 3.2 2019-04-23 [1] CRAN (R 3.5.3)
## tibble 2.1.3 2019-06-06 [1] CRAN (R 3.5.3)
## tidyr * 0.8.3 2019-03-01 [1] CRAN (R 3.5.3)
## tidyselect 0.2.5 2018-10-11 [1] CRAN (R 3.5.1)
## units 0.6-3 2019-05-03 [1] CRAN (R 3.5.3)
## utf8 1.1.4 2018-05-24 [1] CRAN (R 3.5.1)
## vctrs 0.2.0 2019-07-05 [1] CRAN (R 3.5.3)
## viridisLite 0.3.0 2018-02-01 [1] CRAN (R 3.5.1)
## withr 2.1.2 2018-03-15 [1] CRAN (R 3.5.1)
## zeallot 0.1.0 2018-01-28 [1] CRAN (R 3.5.2)
##
## [1] C:/Users/Italo/Documents/R/win-library/3.5
## [2] C:/Program Files/R/R-3.5.3/library