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.

Contextualização

Censo Demográfico

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.

Setores censitários

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

Identificando setores

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.

Base de 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.

Leitura dos dados

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)

Verificando variáveis

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.

Modificando variáveis

Pensando em cada uma as variáveis. Faça uma lista do é possível calcular dos indicadores demográficos apresentados. Por exemplo:

  1. Total populacional
  2. Total populacional e a proporção por situação de domicílio/ Taxa de urbanização
  3. Total populacional e a proporção por sexo
  4. Razão de sexo
  5. Total populacional e a proporção por sexo e idade (base para a pirâmide etária)
  6. Razão de dependência
  7. Índice de envelhecimento

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")
)

Análise dos dados

Tamanho e distribuição populacional

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

Distribuição por situação do setor

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

População por sexo

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

Considerações finais

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.