O objetivo deste tutorial é identificar o nível geográfico mais desagregado considerado no Censo Demográfico e explorar as oportunidades analíticas relacionadas aos dados. O enfoque será direcionado a alguns indicadores demográficos, bem como às limitações inerentes ao cálculo dessas estatísticas em um nível altamente detalhado. As segmentações geográficas começarão por setores censitários e poderão se estender até a consolidação em nível municipal.
O Censo Demográfico representa a operação estatística mais complexa conduzida por uma nação, pois abrange a análise das características de toda a população e dos domicílios de todo o território nacional.
Os Censos Demográficos desempenham o papel singular de investigar todos os domicílios do país, constituindo a fonte primordial para compreender as situações vivenciadas pela população em todos os municípios, incluindo divisões internas como distritos, subdistritos, bairros, bem como a classificação baseada na localização dos domicílios, como urbanos ou rurais.
Os registros desse conjunto de dados, organizados por setor censitário, englobam atributos dos domicílios e das pessoas pesquisadas para a totalidade da população, sendo convencionalmente denominados resultados do universo.
O setor censitário constitui a menor unidade territorial, delimitada por uma área contígua que está completamente inserida em zonas urbanas ou rurais. Sua extensão é ajustada para facilitar a execução de pesquisas, e a coleção de todos esses setores abrange a totalidade do território nacional, garantindo, assim, a abrangência integral de todo o país.
Cada setor censitário é distinguido por um número identificador, conhecido como geocódigo. Esse geocódigo é construído por meio da reunião da estrutura da hierarquia político-administrativa à qual o setor censitário pertence: os dois primeiros dígitos correspondem ao código do estado; os cinco subsequentes estão relacionados ao município; os dois seguintes indicam o distrito; os dois na sequência apontam o subdistrito; e, por último, os quatro dígitos finais identificam o setor censitário. Para mais informações detalhadas sobre a Malha de Setores Censitários, ver aqui
Escolha um setor em: https://censo2010.ibge.gov.br/painel/ e salve o número
do setor escolhido no objeto setor_escolhido:
setor_escolhido <- 310620005680043
Quais dados estão disponíveis para os setores censitários?
Para responder essa pergunta, é necessário conhecer a documentação disponível aqui. Depois disso, o passo seguinte é importar os dados.
A base de dados de agregados por setores do IBGE é uma fonte robusta e abrangente de informações socioeconômicas e demográficas que oferece um panorama detalhado das características das áreas geográficas em seu menor nível territorial. A granularidade dessas informações tornam a base de dados de agregados por setores do IBGE uma ferramenta crucial para a formulação de políticas, estudos acadêmicos e análises de mercado.
Importando os dados dos arquivos Básico e Domicílio02 por existir o interesse em variáveis disponíveis nessas duas bases de dados. Em sequência organiza-se em um único dataframe df.
library(readxl)
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.2 ✔ purrr 0.3.5
## ✔ tibble 3.2.1 ✔ dplyr 1.1.1
## ✔ tidyr 1.2.1 ✔ stringr 1.4.1
## ✔ readr 2.1.3 ✔ forcats 0.5.2
## Warning: package 'ggplot2' was built under R version 4.2.3
## Warning: package 'tibble' was built under R version 4.2.3
## Warning: package 'dplyr' was built under R version 4.2.3
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
df.basico <- read_excel("Basico-MG.xls") %>% select("Cod_setor","Cod_municipio","Nome_do_municipio","Cod_bairro","Nome_do_bairro","Cod_subdistrito","Nome_do_subdistrito")
df.pessoa <- read_excel("Domicilio02_MG.xls")
df <- merge(df.basico,df.pessoa)
rm(df.pessoa,df.basico)
O pacote DataMaid é uma ferramenta valiosa no ambiente R para a verificação, limpeza e organização eficiente de conjuntos de dados. Desenvolvido com o objetivo de aprimorar a qualidade e confiabilidade dos dados, o DataMaid oferece funcionalidades que auxiliam na identificação de valores ausentes, erros de digitação, inconsistências e outras anomalias nos dados. Além disso, permite a criação de relatórios detalhados, facilitando a compreensão das estruturas e conteúdo dos datasets, promovendo assim uma exploração mais assertiva. Com suas capacidades automatizadas de geração de sumários e gráficos descritivos, o DataMaid é uma ferramenta para cientistas de dados e analistas que desejam garantir a qualidade e integridade dos seus dados, tornando todo o processo de análise mais eficiente e confiável.
library(dataMaid)
## Warning: package 'dataMaid' was built under R version 4.2.3
##
## Attaching package: 'dataMaid'
## The following object is masked from 'package:dplyr':
##
## summarize
makeDataReport(df,replace = TRUE)
## The default of 'doScale' is FALSE now for stability;
## set options(mc_doScale_quiet=TRUE) to suppress this (once per session) message
## Data report generation is finished. Please wait while your output file is being rendered.
##
## Is dataMaid_df.docx open on your computer? Please close it as fast as possible to avoid problems!
## Warning: package 'pander' was built under R version 4.2.3
O que foi possível verificar com o relatório produzido anteriormente? Anote para implementar na sequência, porém, em conjunto com essas mudanças, planeje os indicadores a serem calculados e identifique as alterações necessárias para tal.
Pensando em cada uma as variáveis. Faça uma lista do é possível calcular dos indicadores demográficos apresentados. Por exemplo:
A partir dos indicadores que se planeja calcular, realize as modificações na base necessárias para isso:
library(tidyselect)
df <- df %>% mutate(
Cod_setor= as.character(Cod_setor),
Situacao_setor_agreg = case_when(Situacao_setor==1 | Situacao_setor==2 |
Situacao_setor==3 ~ "Urbano",
Situacao_setor==4 | Situacao_setor==5 |
Situacao_setor==6 | Situacao_setor==7 |
Situacao_setor==8 ~ "Rural")
)
Conhecer o tamanho da população de uma determinada região, país ou grupo é fundamental para o desenvolvimento sustentável, a tomada de decisões informadas e a criação de políticas que atendam às necessidades e aspirações das pessoas que compõem essa população. A seguir são sistematizadas tabelas com totais populacionais
library(knitr)
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.2.3
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
# setor censitário escolhido
tab01a <- df %>%
filter(Cod_setor == setor_escolhido) %>%
summarise(t.pop = sum(V001))
tab01a %>% kbl() %>% kable_minimal()
| t.pop |
|---|
| 899 |
# bairro escolhido
bairro_escolhido <- df$Nome_do_bairro[df$Cod_setor==setor_escolhido]
tab01b <- df %>%
filter(Nome_do_bairro == bairro_escolhido) %>%
summarise(t.pop = sum(V001))
tab01b %>% kbl() %>% kable_minimal()
| t.pop |
|---|
| 4762 |
# Minas Gerais
tab01c <- df %>% summarise(t.pop = sum(V001))
tab01c %>% kbl() %>% kable_minimal()
| t.pop |
|---|
| 19597330 |
# Municípios de Minas Gerais
tab01d<- df %>% group_by(Nome_do_municipio) %>%
summarise(t.pop = sum(V001)) %>%
arrange(desc(t.pop)) %>%
mutate(p.pop = round(t.pop/sum(t.pop)*100,1))
tab01d %>% slice(1:10) %>% kbl() %>% kable_minimal()
| Nome_do_municipio | t.pop | p.pop |
|---|---|---|
| BELO HORIZONTE | 2375151 | 12.1 |
| UBERLÂNDIA | 604013 | 3.1 |
| CONTAGEM | 603442 | 3.1 |
| JUIZ DE FORA | 516247 | 2.6 |
| BETIM | 378089 | 1.9 |
| MONTES CLAROS | 361915 | 1.8 |
| RIBEIRÃO DAS NEVES | 296317 | 1.5 |
| UBERABA | 295988 | 1.5 |
| GOVERNADOR VALADARES | 263689 | 1.3 |
| IPATINGA | 239468 | 1.2 |
# Subdistritos de Belo Horizonte
tab01e<- df %>%
filter(Nome_do_municipio == "BELO HORIZONTE") %>%
group_by(Nome_do_subdistrito) %>%
summarise(t.pop = sum(V001))%>%
arrange(desc(t.pop)) %>%
mutate(p.pop = round(t.pop/sum(t.pop)*100,1))
tab01e %>% slice(1:10) %>% kbl() %>% kable_minimal()
| Nome_do_subdistrito | t.pop | p.pop |
|---|---|---|
| NOROESTE | 331362 | 14.0 |
| NORDESTE | 291110 | 12.3 |
| OESTE | 286118 | 12.0 |
| BARREIRO | 282552 | 11.9 |
| CENTRO-SUL | 272285 | 11.5 |
| VENDA NOVA | 262183 | 11.0 |
| LESTE | 249273 | 10.5 |
| NORTE | 212953 | 9.0 |
| PAMPULHA | 187315 | 7.9 |
# Bairros de Belo Horizonte
tab01f <- df %>%
filter(Nome_do_municipio == "BELO HORIZONTE") %>%
group_by(Nome_do_bairro) %>%
summarise(t.pop = sum(V001))%>%
arrange(desc(t.pop)) %>%
mutate(p.pop = round(t.pop/sum(t.pop)*100,2))
tab01f %>% slice(1:10) %>% kbl() %>% kable_minimal()
| Nome_do_bairro | t.pop | p.pop |
|---|---|---|
| Sagrada Família | 34395 | 1.45 |
| Buritis | 29374 | 1.24 |
| Padre Eustáquio | 28773 | 1.21 |
| Lindéia | 24146 | 1.02 |
| Santa Monica | 23883 | 1.01 |
| Céu Azul | 23817 | 1.00 |
| Santa Cruz | 22306 | 0.94 |
| Santo Antônio | 21642 | 0.91 |
| Alto Vera Cruz | 21459 | 0.90 |
| Jardim dos Comerciarios | 21238 | 0.89 |
Os totais populacionais podem ser desagregados por situação do setor. Verifique se faz sentido calcular essa abertura para todos os casos a seguir:
# setor censitário escolhido
tab02a <- df %>%
filter(Cod_setor == setor_escolhido) %>%
group_by(Situacao_setor_agreg) %>%
summarise(t.pop = sum(V001))
tab02a %>% kbl() %>% kable_minimal()
| Situacao_setor_agreg | t.pop |
|---|---|
| Urbano | 899 |
# bairro escolhido
bairro_escolhido <- df$Nome_do_bairro[df$Cod_setor==setor_escolhido]
tab02b <- df %>%
filter(Nome_do_bairro == bairro_escolhido) %>%
group_by(Situacao_setor_agreg) %>%
summarise(t.pop = sum(V001))
tab02b %>% kbl() %>% kable_minimal()
| Situacao_setor_agreg | t.pop |
|---|---|
| Urbano | 4762 |
# Minas Gerais
tab02c <- df %>% group_by(Situacao_setor_agreg) %>%
summarise(t.pop = sum(V001)) %>%
arrange(desc(t.pop)) %>%
mutate(p.pop = round(t.pop/sum(t.pop)*100,1))
tab02c %>% kbl() %>% kable_minimal()
| Situacao_setor_agreg | t.pop | p.pop |
|---|---|---|
| Urbano | 16715216 | 85.3 |
| Rural | 2882114 | 14.7 |
# Municípios de Minas Gerais
tab02d<- df %>% group_by(Nome_do_municipio,Situacao_setor_agreg) %>%
summarise(t.pop = sum(V001)) %>%
mutate(p.pop = round(t.pop/sum(t.pop)*100,1))
## `summarise()` has grouped output by 'Nome_do_municipio'. You can override using
## the `.groups` argument.
tab02d %>% head(14) %>% kbl() %>% kable_minimal()
| Nome_do_municipio | Situacao_setor_agreg | t.pop | p.pop |
|---|---|---|---|
| ABADIA DOS DOURADOS | Rural | 2515 | 37.5 |
| ABADIA DOS DOURADOS | Urbano | 4189 | 62.5 |
| ABAETÉ | Rural | 2986 | 13.2 |
| ABAETÉ | Urbano | 19704 | 86.8 |
| ABRE CAMPO | Rural | 6030 | 45.3 |
| ABRE CAMPO | Urbano | 7281 | 54.7 |
| ACAIACA | Rural | 1367 | 34.9 |
| ACAIACA | Urbano | 2553 | 65.1 |
| AGUANIL | Rural | 1709 | 42.2 |
| AGUANIL | Urbano | 2345 | 57.8 |
| AIMORÉS | Rural | 5259 | 21.1 |
| AIMORÉS | Urbano | 19700 | 78.9 |
| AIURUOCA | Rural | 3039 | 49.3 |
| AIURUOCA | Urbano | 3123 | 50.7 |
# Subdistritos de Belo Horizonte
tab02e<- df %>%
filter(Nome_do_municipio == "BELO HORIZONTE") %>%
group_by(Nome_do_subdistrito,Situacao_setor_agreg) %>%
summarise(t.pop = sum(V001))%>%
arrange(desc(t.pop)) %>%
mutate(p.pop = round(t.pop/sum(t.pop)*100,1))
## `summarise()` has grouped output by 'Nome_do_subdistrito'. You can override
## using the `.groups` argument.
tab02e %>% head(14) %>% kbl() %>% kable_minimal()
| Nome_do_subdistrito | Situacao_setor_agreg | t.pop | p.pop |
|---|---|---|---|
| NOROESTE | Urbano | 331362 | 100 |
| NORDESTE | Urbano | 291110 | 100 |
| OESTE | Urbano | 286118 | 100 |
| BARREIRO | Urbano | 282552 | 100 |
| CENTRO-SUL | Urbano | 272285 | 100 |
| VENDA NOVA | Urbano | 262183 | 100 |
| LESTE | Urbano | 249273 | 100 |
| NORTE | Urbano | 212953 | 100 |
| PAMPULHA | Urbano | 187315 | 100 |
# Bairros de Belo Horizonte
tab02f <- df %>%
filter(Nome_do_municipio == "BELO HORIZONTE") %>%
group_by(Nome_do_bairro,Situacao_setor_agreg) %>%
summarise(t.pop = sum(V001))%>%
arrange(desc(t.pop)) %>%
mutate(p.pop = round(t.pop/sum(t.pop)*100,2))
## `summarise()` has grouped output by 'Nome_do_bairro'. You can override using
## the `.groups` argument.
tab02f %>% head(14) %>% kbl() %>% kable_minimal()
| Nome_do_bairro | Situacao_setor_agreg | t.pop | p.pop |
|---|---|---|---|
| Sagrada Família | Urbano | 34395 | 100 |
| Buritis | Urbano | 29374 | 100 |
| Padre Eustáquio | Urbano | 28773 | 100 |
| Lindéia | Urbano | 24146 | 100 |
| Santa Monica | Urbano | 23883 | 100 |
| Céu Azul | Urbano | 23817 | 100 |
| Santa Cruz | Urbano | 22306 | 100 |
| Santo Antônio | Urbano | 21642 | 100 |
| Alto Vera Cruz | Urbano | 21459 | 100 |
| Jardim dos Comerciarios | Urbano | 21238 | 100 |
| Piratininga | Urbano | 21149 | 100 |
| Mantiqueira | Urbano | 20282 | 100 |
| Serra | Urbano | 20277 | 100 |
| Sion | Urbano | 19700 | 100 |
O mesmo pode ser realizado por sexo:
# setor censitário escolhido
tab03a <- df %>%
filter(Cod_setor == setor_escolhido) %>%
summarise(t.pop_h = sum(V045),
t.pop_m = sum(V089),
p.pop_h = round(sum(V045)/(t.pop_h+t.pop_m)*100,1),
p.pop_m = round(sum(V089)/(t.pop_h+t.pop_m)*100,1),
r.sexo = t.pop_h/t.pop_m)
tab03a %>% kbl() %>% kable_minimal()
| t.pop_h | t.pop_m | p.pop_h | p.pop_m | r.sexo |
|---|---|---|---|---|
| 407 | 492 | 45.3 | 54.7 | 0.8272358 |
# bairro escolhido
bairro_escolhido <- df$Nome_do_bairro[df$Cod_setor==setor_escolhido]
tab03b <- df %>%
filter(Nome_do_bairro == bairro_escolhido) %>%
summarise(t.pop_h = sum(V045),
t.pop_m = sum(V089),
p.pop_h = round(sum(V045)/(t.pop_h+t.pop_m)*100,1),
p.pop_m = round(sum(V089)/(t.pop_h+t.pop_m)*100,1),
r.sexo = t.pop_h/t.pop_m)
tab03b %>% kbl() %>% kable_minimal()
| t.pop_h | t.pop_m | p.pop_h | p.pop_m | r.sexo |
|---|---|---|---|---|
| 2250 | 2512 | 47.2 | 52.8 | 0.8957006 |
# Minas Gerais
tab03c <- df %>%
summarise(t.pop_h = sum(V045),
t.pop_m = sum(V089),
p.pop_h = round(sum(V045)/(t.pop_h+t.pop_m)*100,1),
p.pop_m = round(sum(V089)/(t.pop_h+t.pop_m)*100,1),
r.sexo = t.pop_h/t.pop_m)
tab03c %>% kbl() %>% kable_minimal()
| t.pop_h | t.pop_m | p.pop_h | p.pop_m | r.sexo |
|---|---|---|---|---|
| 9641877 | 9955453 | 49.2 | 50.8 | 0.9685021 |
# Municípios de Minas Gerais
tab03d<- df %>% group_by(Nome_do_municipio) %>%
summarise(t.pop_h = sum(V045),
t.pop_m = sum(V089),
p.pop_h = round(sum(V045)/(t.pop_h+t.pop_m)*100,1),
p.pop_m = round(sum(V089)/(t.pop_h+t.pop_m)*100,1),
r.sexo = t.pop_h/t.pop_m) %>% arrange(r.sexo)
tab03d %>% slice (1:10) %>% kbl() %>% kable_minimal()
| Nome_do_municipio | t.pop_h | t.pop_m | p.pop_h | p.pop_m | r.sexo |
|---|---|---|---|---|---|
| BELO HORIZONTE | 1113513 | 1261638 | 46.9 | 53.1 | 0.8825931 |
| CACHOEIRA DA PRATA | 1718 | 1936 | 47.0 | 53.0 | 0.8873967 |
| JUIZ DE FORA | 244024 | 272223 | 47.3 | 52.7 | 0.8964121 |
| SÃO LOURENÇO | 19758 | 21899 | 47.4 | 52.6 | 0.9022330 |
| GOVERNADOR VALADARES | 125237 | 138452 | 47.5 | 52.5 | 0.9045518 |
| JOÃO MONLEVADE | 35049 | 38561 | 47.6 | 52.4 | 0.9089235 |
| NOVA ERA | 8349 | 9179 | 47.6 | 52.4 | 0.9095762 |
| BARBACENA | 60162 | 66122 | 47.6 | 52.4 | 0.9098636 |
| TEÓFILO OTONI | 64466 | 70279 | 47.8 | 52.2 | 0.9172868 |
| SÃO SEBASTIÃO DO RIO PRETO | 772 | 841 | 47.9 | 52.1 | 0.9179548 |
# Subdistritos de Belo Horizonte
tab03e<- df %>%
filter(Nome_do_municipio == "BELO HORIZONTE") %>%
group_by(Nome_do_subdistrito) %>%
summarise(t.pop_h = sum(V045),
t.pop_m = sum(V089),
p.pop_h = round(sum(V045)/(t.pop_h+t.pop_m)*100,1),
p.pop_m = round(sum(V089)/(t.pop_h+t.pop_m)*100,1),
r.sexo = t.pop_h/t.pop_m) %>% arrange(r.sexo)
tab03e %>% slice(1:10) %>% kbl() %>% kable_minimal()
| Nome_do_subdistrito | t.pop_h | t.pop_m | p.pop_h | p.pop_m | r.sexo |
|---|---|---|---|---|---|
| CENTRO-SUL | 122159 | 150126 | 44.9 | 55.1 | 0.8137098 |
| LESTE | 115056 | 134217 | 46.2 | 53.8 | 0.8572387 |
| NOROESTE | 154055 | 177307 | 46.5 | 53.5 | 0.8688602 |
| OESTE | 133788 | 152330 | 46.8 | 53.2 | 0.8782774 |
| NORDESTE | 137196 | 153914 | 47.1 | 52.9 | 0.8913809 |
| PAMPULHA | 89023 | 98292 | 47.5 | 52.5 | 0.9056993 |
| NORTE | 101381 | 111572 | 47.6 | 52.4 | 0.9086599 |
| VENDA NOVA | 124847 | 137336 | 47.6 | 52.4 | 0.9090624 |
| BARREIRO | 136008 | 146544 | 48.1 | 51.9 | 0.9281035 |
# Bairros de Belo Horizonte
tab03f <- df %>%
filter(Nome_do_municipio == "BELO HORIZONTE") %>%
group_by(Nome_do_bairro) %>%
summarise(t.pop_h = sum(V045),
t.pop_m = sum(V089),
p.pop_h = round(sum(V045)/(t.pop_h+t.pop_m)*100,1),
p.pop_m = round(sum(V089)/(t.pop_h+t.pop_m)*100,1),
r.sexo = t.pop_h/t.pop_m) %>% arrange(desc(r.sexo))
tab03f %>% slice(1:10) %>% kbl() %>% kable_minimal()
| Nome_do_bairro | t.pop_h | t.pop_m | p.pop_h | p.pop_m | r.sexo |
|---|---|---|---|---|---|
| CDI Jatoba | 128 | 76 | 62.7 | 37.3 | 1.684211 |
| Baleia | 10 | 7 | 58.8 | 41.2 | 1.428571 |
| Grotinha | 245 | 202 | 54.8 | 45.2 | 1.212871 |
| Maravilha | 30 | 26 | 53.6 | 46.4 | 1.153846 |
| Vila Madre Gertrudes 4ª Seção | 107 | 94 | 53.2 | 46.8 | 1.138298 |
| Vila Madre Gertrudes 3ª Seção | 224 | 197 | 53.2 | 46.8 | 1.137056 |
| Unidas | 195 | 172 | 53.1 | 46.9 | 1.133721 |
| Vila Nova Paraíso | 374 | 330 | 53.1 | 46.9 | 1.133333 |
| Capitão Eduardo | 667 | 589 | 53.1 | 46.9 | 1.132428 |
| Vila Petropolis | 156 | 142 | 52.3 | 47.7 | 1.098591 |
Produzir dados mais desagregados é algo requisitado para conhecer realidades locais, porém é necessário ter cautela nos cálculos dos indicadores dado que com populações pequenas, alguns deles não informam o que deveriam informam e perdem sentido.