O Censo Demográfico é a maior operação de recenseamento no país, produzindo dados demográficos, econômicos e sociais sobre a população brasileira. Através dos microdados, menor nível de desagregação da pesquisa, podemos construir análises, fazer cruzamentos, realizar estudos e pesquisas de interesse. Neste exercício mostramos como dar o primeiro (e difícil) passo: importar os arquivos de texto formatados em ASCII no R.
Dado a complexidade e volume dos microdados, os arquivos de download são sempre acompanhados de uma documentação auxiliar que fornece os nomes, os códigos e as descrições das variáveis e suas categorias, complementada, quando necessário, dos elementos necessários para o cálculo dos erros amostrais. Ambos estes elementos, microdados e documentação, são essenciais para a correta leitura e análise de dados.
Dessa forma, neste exercício iremos exemplificar a importação dos microdados do Censo 2010, referente ao estado do Rio Grande do Sul. Para saber mais sobre os detalhes e informações do Censo, consulte o site do IBGE.
Pacotes
Para reproduzir o exercício a seguir você precisará dos seguintes pacotes:
1 2 3 4 5 6 7 | library (lodown) # [github::ajdamico/lodown] v0.1.0 library (magrittr) # CRAN v2.0.1 library (dplyr) # CRAN v1.0.7 library (stringr) # CRAN v1.4.0 library (fs) # CRAN v1.5.0 library (SAScii) # CRAN v1.0 library (readr) # CRAN v2.0.2 |
Baixar dados
Existem algumas opções de acesso aos microdados do Censo Demográfico: diretamente no site, através de pacotes, de consultas em banco de dados, arquivos offline, etc. Em todos os casos, é necessário especial cuidado devido a complexidade e dimensão dos dados. Neste exemplo focaremos em reprodutibilidade, portanto, usaremos o pacote lodown que facilita o download dos arquivos de microdados e sua documentação.
A função get_catalog nos fornece diversas informações sobre os microdados abrangidos atualmente pelo pacote. Na posse dessas informações, aplicamos filtros para o Censo de 2010 referente ao estado Rio Grande do Sul e, por fim, baixamos os microdados com a função lodown:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # Buscar catálogo de microdados, aplicar filtros e baixar arquivos catalog <- lodown:: get_catalog (data_name = "censo" , output_dir = "data" ) %>% dplyr:: filter (year == 2010, stringr:: str_detect (state, "rs" )) %>% lodown:: lodown (data_name = "censo" ) # Arquivos baixados fs:: dir_tree (path = "data" ) # data # \-- 2010 # \-- RS # +-- Amostra_Domicilios_43.txt # +-- Amostra_Emigracao_43.txt # +-- Amostra_Mortalidade_43.txt # \-- Amostra_Pessoas_43.txt |
Importar dados
Com os arquivos disponíveis localmente, podemos prosseguir agora para a importação. Nesta etapa é importante definir quais variáveis serão de fato utilizadas - já que há um grande volume de observações que podem causar lentidão no computador por restrição de memória -, fazemos isso no objeto vars_censo. Em seguida, convertemos as instruções de importação (layout) do arquivo Amostra_Pessoas_43.txt para o formato de um data.frame, visando usar estas instruções - de largura e tipo de colunas - na importação através da função read_fwf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # Variáveis a serem importadas vars_censo <- c ( "v0001" , "v0601" , "v6036" , "v0010" , "v0011" , "v0300" ) # Converte arquivo de instruções de importação SAS para o R sas_input <- SAScii:: parse.SAScii (catalog$pes_sas) %>% dplyr:: mutate (varname = stringr:: str_to_lower (varname)) # Importar arquivo TXT raw_censo <- readr:: read_fwf ( file = catalog$pes_file, col_positions = readr:: fwf_widths ( widths = abs (sas_input$width), col_names = sas_input$varname ), col_types = paste0 ( ifelse ( !(sas_input$varname % in % vars_censo), "_" , ifelse (sas_input$char, "c" , "d" ) ), collapse = "" ) ) |
Estrutura dos dados importados:
1 2 3 4 5 6 7 8 9 10 | dplyr:: glimpse (raw_censo) # Rows: 1,388,443 # Columns: 6 # $ v0001 <chr> "43", "43", "43", "43", "43", "43", "43", "43", "43", "43", "43"~ # $ v0011 <chr> "4300034001001", "4300034001001", "4300034001001", "430003400100~ # $ v0300 <dbl> 60085, 60085, 65479, 65479, 65479, 81979, 81979, 81979, 81979, 8~ # $ v0010 <dbl> 2.814269e+13, 2.814269e+13, 2.842956e+13, 2.842956e+13, 2.842956~ # $ v0601 <chr> "1", "2", "2", "2", "1", "2", "2", "1", "1", "2", "1", "2", "2",~ # $ v6036 <dbl> 31, 74, 8, 39, 39, 16, 13, 11, 9, 38, 7, 10, 31, 47, 2, 8, 6, 38~ |
Próximos passos
Com os dados brutos em mãos, o recomendável é usar um framework que suporte a construção de objetos que representem um desenho amostral complexo. Para essa tarefa, recomendamos o uso do pacote survey, que traz diversas facilidades e é usado amplamente, inclusive pela equipe do IBGE.
Seguindo este procedimento podemos chegar, por exemplo, a análises como essa:
Referências
Analyze Survey Data for Free: Brazilian Censo Demografico (Djalma Pessoa)