-
Notifications
You must be signed in to change notification settings - Fork 1
/
5_agregados_setores.qmd
222 lines (162 loc) · 10 KB
/
5_agregados_setores.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
---
from: markdown+emoji
code-annotations: hover
---
# Agregados dos Setores Censitários
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()`.
## 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 espalhadas 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 em 8 tabelas:
- `"Basico"`
- `"Entorno"`
- `"Domicilio"`
- `"Pessoa"`
- `"Responsavel"`
- `"PessoaRenda"`
- `"DomicilioRenda"`
- `"ResponsavelRenda"`
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"`. Essa tabela provêm de dois arquivos separados: *Domicilio01* e *Domicilio02*. Assim, os nomes das colunas nessa tabela são organizados da seguinte maneira:
```{r warning = FALSE, message=FALSE}
#| label: read-tracts-domicilio
library(censobr)
# baixa dados agregados de setores: variáveis de domicilios
dom <- read_tracts(year = 2010,
dataset = 'Domicilio',
as_data_frame = FALSE,
showProgress = FALSE)
names(dom)[c(1:12,301:306)]
```
## Dicionário de variáveis
Para verificar o significado de cada variável, você pode executar o comando `data_dictionary()`, que abrirá no navegador um arquivo `.html` ou `.pdf` com o dicionário de variáveis de cada conjunto de dados (ver mais info no capítulo 6 sobre Documentação).
```{r}
#| eval: false
data_dictionary(year = 2010,
dataset = 'tracts')
```
## 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.
```{r warning=FALSE, message=FALSE}
#| label: load-libraries
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.
### 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.
```{r warning = FALSE, message=FALSE}
#| label: read-tracts-Basico-renda
# baixa os dados
tract_basico <- read_tracts(year = 2010, # <1>
dataset = "Basico",
showProgress = FALSE)
tract_income <- read_tracts(year = 2010, # <2>
dataset = "DomicilioRenda",
showProgress = FALSE)
# selecionar conlunas
tract_basico <- tract_basico |> select('code_tract','V002') # <3>
tract_income <- tract_income |> select('code_tract','V003') # <3>
# unir as tabelass
tracts_df10 <- left_join(tract_basico, tract_income) # <4>
# calcular a renda per capita
tracts_df10 <- tracts_df10 |>
mutate(income_pc = V003 / V002) |> # <5>
collect() # <6>
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
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.
```{r warning = FALSE, message=FALSE}
#| label: get-geobr-data
# busca qual o código do municipio de Belo Horizonte
bh_info <- geobr::lookup_muni(name_muni = 'Belo Horizonte')
#> code_muni: 3106200
# baixa municipio de BH
muni_bh <- geobr::read_municipality(code_muni = 'MG',
year = 2010,
showProgress = FALSE) |>
filter(name_muni == "Belo Horizonte")
# baixa todos setores de Minas Gerais
tracts_2010 <- geobr::read_census_tract(code_tract = "MG",
year = 2010,
simplified = FALSE,
showProgress = FALSE) # <1>
# filtra setores de BH
tracts_2010 <- filter(tracts_2010, name_muni == 'Belo Horizonte')
# 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.
```{r warning = FALSE, message=FALSE}
#| label: map-renda-setores
bh_tracts <- left_join(tracts_2010, tracts_df10, by = 'code_tract')
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()
```
### Examplo 2: Distribuição espacial da população em 2022
Neste segundo exemplo, nós vamos utilizar os resultados `"Preliminares"` dos agregados dos setores censitários do censo de 2022, que foram divulgados pelo IBGE em março de 2024. 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.
```{r warning = FALSE, message=FALSE}
#| label: get-tracts-entorno
# download dados preliminares dos setores de 2022
tracts_df22 <- read_tracts(year = 2022,
dataset = "Preliminares",
showProgress = FALSE) |>
filter(name_muni == 'Belo Horizonte') |>
collect()
# baixa todos setores de Minas Gerais
tracts_2022 <- geobr::read_census_tract(code_tract = "MG",
year = 2022,
simplified = FALSE,
showProgress = FALSE)
# filtra setores de BH
tracts_2022 <- filter(tracts_2022, name_muni == 'Belo Horizonte')
```
Agora a gente pode fazer um *merge* da tabela de população com os dados espaciais, calcular a área dos setores em Km<sup>2</sup> e a densidade demográfica de cada setor, e criar o mapa.
```{r warning = FALSE, message=FALSE}
#| label: map-tracts-arborizacao
# merge tables
tracts_df22$code_tract <- as.numeric(tracts_df22$code_tract)
bh_tracts22 <- left_join(tracts_2022, tracts_df22, by = 'code_tract')
# calcula a área dos setores
bh_tracts22 <- bh_tracts22 |>
mutate(tract_aream2 = sf::st_area(tracts_2022),
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()
```