2000 | 2010 | 2022 |
---|---|---|
Basico | Basico | Basico |
Domicilio | Domicilio | Domicilio |
Pessoa | Pessoa | Pessoas |
Responsavel | Responsavel | |
Instrucao | Entorno | Entorno |
Morador | ResponsavelRenda | ResponsavelRenda |
DomicilioRenda | Indigenas | |
PessoaRenda | Quilombolas | |
Obitos | ||
Preliminares |
Talvez os conjuntos de dados mais comumente usados dos censos brasileiros sejam os microdados de pessoas e domicílios. No entanto, o IBGE também disponibiliza dados muito ricos sobre as características populacionais e ambientais agregados no nível de setores censitários. Neste capítulo, mostramos como usar o pacote {censobr} para acessar facilmente esses dados usando a função read_tracts()
.
Esta função permite ler os dados agregados por setores censitários para os censos de 2000, 2010 e 2022.
5.1 Estrutura dos dados
No seu formato original, os dados agregados no nível de setores censitários estão divididos em diferentes tipos de variáveis (e.g. variáveis de características de pessoas, de domicílios, etc). Em muitos casos, esses conjuntos de variáveis estão espalhados por vários arquivos (em alguns casos com centenas variáveis). Para facilitar o entendimento desses dados, o {censobr} reúne todos os arquivos / variáveis diferente tabelas (datasets):
Todas estas tabelas estão organizadas seguindo a mesma lógica. Nos casos em que as variáveis de uma tabela provêm de arquivos diferentes, o nome da variável recebe um prefixo indicando a sua tabela de origem. Isso é feito para facilitar a consulta do significado de cada coluna no arquivo de dicionário variáveis (no próximo capítulo a gente vai ver como baixar os dicionários variáveis dos censos).
Para ilustrar isso, vejamos a tabela com variáveis de "Domicilio"
do censo de 2022. Essa tabela provêm de três arquivos separados: Domicilio01, Domicilio02 e Domicilio03. Assim, os nomes das colunas nessa tabela são organizados da seguinte maneira:
<- censobr::read_tracts(
dom year = 2022,
dataset = 'Domicilio',
showProgress = FALSE
)
names(dom)[c(30:33,119:121, 526:528)]
[1] "domicilio01_V00001" "domicilio01_V00002" "domicilio01_V00003"
[4] "domicilio01_V00004" "domicilio02_V00090" "domicilio02_V00091"
[7] "domicilio02_V00092" "domicilio03_V00497" "domicilio03_V00498"
[10] "domicilio03_V00499"
5.2 Dicionário de variáveis
Para verificar o significado de cada variável, você pode executar o comando data_dictionary()
, que o arquivo com o dicionário de variáveis de cada conjunto de dados (ver mais info no capítulo 6 sobre Documentação).
::data_dictionary(
censobryear = 2022,
dataset = 'tracts'
)
5.3 Exemplos reproduzíveis
Essa organização dos dados agregados por setores censitários parece confusa a primeira vista. E é mesmo. Mas essa organização fica mais clara com alguns exemplos práticos.
Nesta seção, nós vamos utilizar alguns exemplos para ilustrar como trabalhar com dados no nível de setor censitário. Primeiro, precisamos carregar as bibliotecas que usaremos neste tutorial.
library(censobr)
library(geobr)
library(arrow)
library(dplyr)
library(ggplot2)
Nos dois exemplos abaixo, usaremos a cidade de Belo Horizonte para fins de demonstração. No primeiro exemplo, nós vamos mapear a distribuição espacial da renda com dados de 2010. No segundo exemplo, nós vamos mapear a distribuição espacial da densidade populacional de BH com os dados preliminares do censo de 2022.
5.3.1 Exemplo 1: Distribuição espacial da renda em 2010
Neste primeiro exemplo, criaremos um mapa da distribuição espacial da renda média per capita. A informação sobre o número total de residentes em cada setor censitário está disponível na tabela com conjunto de variáveis do bloco "Basico"
, na variável "V002"
. Já a informação sobre renda total do setor censiário pode ser encontradas na tabela do bloco "DomicilioRenda"
, na variável "V003"
.
Utilizando o código abaixo, podemos baixar os dados e calcular a renda per capita de todos os setores censitários no Brasil. Posteriormente nós vamos filtrar esses resultados para ficar apenas com os setores de BH.
# baixa os dados
<- read_tracts(
tract_basico year = 2010,
dataset = "Basico",
showProgress = FALSE
)
<- read_tracts(
tract_income year = 2010,
dataset = "DomicilioRenda",
showProgress = FALSE
)
# selecionar conlunas
<- tract_basico |> select('code_tract','V002')
tract_basico <- tract_income |> select('code_tract','V003')
tract_income
# unir as tabelass
<- left_join(tract_basico, tract_income)
tracts_df10
# calcular a renda per capita
<- tracts_df10 |>
tracts_df10 mutate(income_pc = V003 / V002) |>
collect()
head(tracts_df10)
- 1
- Download de dados do bloco Basico
- 2
- Download de dados do bloco DomicilioRenda
- 3
- Seleciona apenas as variáveis que vamos utilizar
- 4
- Junta as duas variáveis num único data.frame
- 5
- Cacula renda per capita de cada setor censitário
- 6
- Extração dos resultados
# A tibble: 6 × 4
code_tract V002 V003 income_pc
<chr> <dbl> <dbl> <dbl>
1 110001505000001 956 522231 546.
2 110001505000002 859 406191 473.
3 110001505000003 661 241587 365.
4 110001505000004 266 88502 333.
5 110001505000005 1206 262860 218.
6 110001505000006 816 262968 322.
O próximo passo é baixar as geometrias dos setores censitários de BH em 2010 com a função read_census_tract
, do pacote {geobr}. Aqui, nós passamos o parâmetro code_tract = "MG"
baixar os todos os setores do estado de Minas Gerais e depois filtramos apenas o município de Belo Horizonte.
# busca qual o código do municipio de Belo Horizonte
<- geobr::lookup_muni(name_muni = 'Belo Horizonte')
bh_info #> code_muni: 3106200
# baixa municipio de BH
<- geobr::read_municipality(
muni_bh code_muni = 'MG',
year = 2010,
showProgress = FALSE) |>
filter(name_muni == "Belo Horizonte")
# baixa todos setores de Minas Gerais
<- geobr::read_census_tract(
tracts_2010 code_tract = "MG",
year = 2010,
simplified = FALSE,
showProgress = FALSE)
# filtra setores de BH
<- filter(tracts_2010, name_muni == 'Belo Horizonte')
tracts_2010
# mapa de setores censitarios
ggplot() +
geom_sf(data=tracts_2010, fill = 'gray90', color='gray60') +
theme_void()
- 1
-
O comportamento padrão do
{geobr}
é baixar uma versão da malha espacial com geometrias ligeiramente simplificadas (simplified = TRUE
) para agilizar o processamento e visualização de dados. Aqui, nós baixamos os dados com geometrias originais devido à escala espacial da visualização dos resultados.
Por fim, a gente pode fazer um merge dos dados espaciais e de renda dos setores censitários usando como variável chave o código do setor censitário (code_tract
) e criar o mapa da distribuição espacial da renda per capita do município.
<- left_join(tracts_2010, tracts_df10, by = 'code_tract')
bh_tracts
ggplot() +
geom_sf(data = bh_tracts, aes(fill = ifelse(income_pc<10000,income_pc,10000)),
color=NA) +
geom_sf(data = muni_bh, color='gray10', fill=NA) +
labs(title = 'Renda per capita dos setores censitários',
subtitle= 'Belo Horizonte, 2010') +
scale_fill_viridis_c(name = "Reda per\ncapita (R$)",
na.value="white",
option = 'cividis',
breaks = c(0, 1e3, 4e3, 8e3, 1e4) ,
labels = c('0', '1.000', '4.000', '8.000', '> 10.000')
+
) theme_void()
5.3.2 Examplo 2: Distribuição espacial da população em 2022
Neste segundo exemplo, nós vamos utilizar os resultados "Basico"
dos agregados dos setores censitários do censo de 2022. Em particular, vamos utilizar a variável V0001
que informa a população total dos setores. Além disso, como houve uma mudança na malha espacial de setores censitários entre 2010 e 2022, nós precisamos baixar a malha do ano correspondente.
# download dados preliminares dos setores de 2022
<- censobr::read_tracts(
tracts_df year = 2022,
dataset = "Basico",
showProgress = FALSE) |>
filter(name_muni == 'Belo Horizonte') |>
collect()
# baixa todos setores de Minas Gerais
<- geobr::read_census_tract(
tracts_sf code_tract = "MG",
year = 2022,
simplified = FALSE,
showProgress = FALSE
)
# filtra setores de BH
<- filter(tracts_sf, name_muni == 'Belo Horizonte') tracts_sf
Agora a gente pode fazer um merge da tabela de população com os dados espaciais, calcular a área dos setores em Km2 e a densidade demográfica de cada setor, e criar o mapa.
# merge tables
$code_tract <- as.character(tracts_sf$code_tract)
tracts_sf<- left_join(tracts_sf, tracts_df, by = 'code_tract')
bh_tracts22
# calcula a área dos setores
<- bh_tracts22 |>
bh_tracts22 mutate(tract_aream2 = sf::st_area(bh_tracts22),
tract_areakm2 = units::set_units(tract_aream2, km2))
# calcula densidade demografica
<- bh_tracts22 |>
bh_tracts22 mutate(pop_km2 = as.numeric(V0001/ tract_areakm2))
# map
ggplot() +
geom_sf(data = bh_tracts22, color=NA,
aes(fill = ifelse(pop_km2<20000,pop_km2,20000))) +
geom_sf(data = muni_bh, color='gray10', fill=NA) +
labs(title = 'Densidade populacional dos setores censitários',
subtitle= 'Belo Horizonte, 2022') +
scale_fill_distiller(palette = "Reds", direction = 1,
name='População por'~Km^2,
breaks = c(0, 5e3, 10e3, 15e3, 2e4) ,
labels = c('0', '5.000', '10.000', '15.000', '> 20.000')) +
theme_void()