Professional Documents
Culture Documents
Marcos F. Silva
http://sites.google.com/site/marcosfs2006
Trabalho em elabora
c~
ao...
Sum
ario
1 Introduc
ao
2 Dicion
ario de Dados
5 Conclus
ao
10
Introduc
ao
Dicion
ario de Dados
Ao serem divulgados ao p
ublico, os microdados sao acompanhados do dicionario de dados,
que e um arquivo onde normalmente constarao as seguintes informacoes: o codigo das variaveis,
a descricacao da variavel e as posicoes de incio e fim de cada variavel no arquivo.
O pacote IBGEPesq introduz um formato para o dicionario de dados que sera muito u
til. O
dicionario de dados, consiste de um data frame contendo as seguintes variaveis: inicio,
tamanho, cod e desc.
A variavel inicio contem a posicao de incio de cada campo no arquivo de dados, a variavel
tamanho informa o comprimento de cada campo, a variavel cod informa o codigo da variavel e
a variavel desc traz a descricao de cada uma das variaveis.
O pacote IBGEPesq mantido pelo IBGE traz alguns dicionarios de dados. O pacote dicionariosIBGE disponibiliza os dicionarios de dados de diversas PNADs (Pesquisa Nacional
por Amostras de Domiclios), da POF (Pesquisa de Orcamentos Familiares) e PME (Pesquisa
2
Mensal de Empregos).
Apenas para efeito de visualizacao, apresentamos a seguir, os primeiros registros dos dicionarios
de dados dos arquivos de domiclios e de pessoas da PNAD de 2006 contido no pacote IBGEPesq
versao 1.0-3.
> library(IBGEPesq)
> data(dicPNAD2006)
> ls()
[1] "dicdom2006" "dicpes2006"
> head(dicdom2006)
1
2
3
4
5
6
inicio
1
5
5
13
16
18
cod tamanho
desc
V0101
4
ANO DE REFERENCIA
UF
2 UNIDADE DA FEDERACAO
V0102
8
NUMERO DE CONTROLE
V0103
3
NUMERO DE SERIE
V0104
2
TIPO DE ENTREVISTA
V0105
2
TOTAL DE MORADORES
> head(dicpes2006)
1
2
3
4
5
6
inicio
1
5
5
13
16
18
cod tamanho
desc
V0101
4
ANO DE REFERENCIA
UF
2 UNIDADE DA FEDERACAO
V0102
8
NUMERO DE CONTROLE
V0103
3
NUMERO DE SERIE
V0301
2
NUMERO DE ORDEM
V0302
1
SEXO
Aproveitando o fato de que tanto o IBGE quanto o INEP distribuem os microdados acompanhados de um arquivo contendo um script para leitura do arquivo utilizando o software
SAS, escrevi uma pequena funcao (getdic()) para converter estes arquivos em um dicionario
de dados com a mesma estrutura dos que sao disponibilizados nos pacotes acima mencionados (IBGEPesq e dicionariosIBGE). Com este script sera possvel gerar os dicionarios para a
importacao dos microdados das pesquisas realizadas pelo INEP.
Para gerar o dicionario de dados dos microdados das escolas do Censo Escolar de 2010, podemos
utilizar a funcao acima da seguinte forma:
> source("getdic.R")
> dicEscola2010 <- getdic("INPUT_SAS_ESCOLA.sas")
> head(dicEscola2010)
3
1
2
3
4
5
6
inicio tamanho
cod
desc
1
5
ANO_CENSO
Ano do Censo
6
9
PK_COD_ENTIDADE
C
odigo da Escola
15
5
COD_ORGAO_REGIONAL_INEP C
odigo do Org~
ao Regional de Ensino
20
15 DESC_SITUACAO_FUNCIONAMENTO
Situa
c~
ao de funcionamento
35
20
DT_ANO_LETIVO_INICIO
In
cio do ano letivo
55
20
DT_ANO_LETIVO_TERMINO
T
ermino (Previs~
ao) do ano letivo
1
2
3
4
5
6
A funcao selectvar() apresenta ao usuario uma janela com a relacao de todas as variaveis
contidas no dicionario de dados. No caso presente, todas as variaveis do dicionario relativo aos
microdados das Escolas.
A selecao de mais de uma variavel e feita clicando-se na descricao das variaveis apresentada na
janela com a tecla CTRL pressionada.
Escolhidas as variaveis que se deseja importar, cuja informacao encontra-se no objeto variaveis, que e uma lista com os componentes cod, contendo os codigos das variaveis selecionadas
e tamanho, contendo os tamanhos dos campos das variaveis a serem importadas1 devemos passar
esta informacao a` funcao read.fwf() conforme ilustrado seguir:
> escolas2010 <- read.fwf("TS_ESCOLA.TXT", widths=variaveis$tamanho,
comment.char="", strip.white=TRUE)
> names(escolas2010) <- variaveis$cod
Com isto serao importados apenas os dados relativos a`s variaveis escolhidas. No nosso caso
as variaveis C
odigo da Escola, Situa
ca
~o de Funcionamento, C
odigo do Munic
pio, Depend^
encia Administrativa e Localiza
ca
~o.
> head(escolas2010[, 1:3])
PK_COD_ENTIDADE DESC_SITUACAO_FUNCIONAMENTO FK_COD_MUNICIPIO
1
12001945
1
1200336
1
Na realidade, este componente da lista apresenta os tamanhos dos campos de todas as variaveis do arquivo
de microdados, mas apenas os tamanhos das variaveis a serem importadas sao positivos. Os tamanhos das
vari
aveis que n
ao ser
ao importadas s
ao precedidas de um sinal de menos, visto que esta e a forma de se indicar
a func
`
ao read.fwf() quais vari
aveis n
ao deverao ser importadas
2
3
4
5
6
12006726
12006742
12006750
12006769
12006777
2
1
1
2
2
1200344
1200344
1200344
1200344
1200344
1
2
3
4
5
6
inicio tamanho
cod
desc
1
4 V0101
ANO DA PESQUISA
5
2
UF UNIDADE DA FEDERA
C~
AO
5
8 V0102
NUMERO DE CONTROLE
13
3 V0103
NUMERO DE SERIE
16
2 V0104
TIPO DE ENTREVISTA
18
2 V0105
TOTAL DE MORADORES
1
3
4
5
6
7
inicio tamanho
cod
desc
1
4 V0101
ANO DA PESQUISA
5
8 V0102
NUMERO DE CONTROLE
13
3 V0103
NUMERO DE SERIE
16
2 V0104
TIPO DE ENTREVISTA
18
2 V0105
TOTAL DE MORADORES
20
2 V0106 TOTAL MORADORES 10 ANOS OU +
Deve ser observado que as duas primeiras posicoes no valor da variavel V0102 corresponde ao
codigo da UF.
Com a exclusao da variavel UF do dicionario, a importacao pode ser feita sem maiores problemas
conforme ilustrado a seguir:
1
2
3
4
5
6
V0101
2009
2009
2009
2009
2009
2009
1
2
3
4
5
6
Um problema bem conhecido do R e sua dificuldade em lidar com conjuntos de dados muito
grandes o que faz com que em algumas circunstancias nao seja possvel carregar toda a base de
7
dados para a memoria como acabamos de fazer com a base de dados de escolas que tem apenas
56,2MB.
Para arquivos maiores como o arquivo contendo os dados das matrculas para o Estado do Rio
de Janeiro TS_MATRICULA_RJ.txt possui 652MB ja comeca a ficar difcil carregar toda a base.
Para trabalhar com arquivos de microdados que nao possam ser carregados integralmente
para a memoria, apresentamos a seguir uma forma de lidar com esta situacao, que consiste em
realizar consultas em SQL na base de dados. Obviamente esta nao e a u
nica e talvez nao seja
a melhor forma de lidar com esta situacao, mas e uma possibilidade.
Existem alguns pacotes que procuram solucionar este problema, sendo possvel citar o bigmemory e o ff.
Para executar a estrategia que iremos apresentar a seguir, sera nessario utilizar o pacote sqldf
que pode ser baixado no CRAN.
Em linhas gerais, a estrategia consiste em converter o arquivo de microdados para um arquivo
.csv e utilizar o pacote sqldf para realizar as consultas em SQL diretamente no arquivo .csv
como se este fosse uma tabela de um banco de dados. Esta estrategia e interessante porque
possibilita a extracao de um subconjunto dos dados constantes do arquivo de microdados.
A seguir mostraremos como implementar esta estrategia utilizando os microdados de matrculas
(arquivo TS_MATRICULA_RJ.txt).
O primeiro passo e realizar a conversao do arquivo de microdados para .csv, para o que sera
utilizada a funcao fwf2csv() que escrevemos com este objetivo.
>
>
>
>
>
>
>
# Carrega as fun
c~
oes para o R
source("fwf2csv.R")
source("txt2df.R") # Fun
c~
ao auxiliar usada pela fun
c~
ao fwf2csv()
# Gera o dicion
ario de dados
dicMatricula2010 <- getdic("INPUT_SAS_MATRICULA.sas")
# Converte o arquivo de microdados para um arquivo csv
fwf2csv(input="TS_MATRICULA_RJ.txt",
output="Matriculas_2010.csv",
dic=dicMatricula2010,
colunas=dicMatricula2010$cod)
A funcao fwf2csv() recebe como argumento o arquivo de microdados, o nome do arquivo .csv
que se deseja criar, o dicionario de dados correspondente e os codigos das variaveis. O arquivo
.csv gerado possui ponto e vrgula como separador e apresenta como cabecalho os codigos das
variaveis utilizadas no dicionario de dados.
Feita a conversao dos dados, o proximo passo e realizar a consulta SQL no arquivo .csv recem
criado.
Supondo que tenhamos o interesse em obter a quantidade de matrculas declaradas como sendo
de alunos residentes na area urbana e rural por escola e por municipio, nas escolas p
ublicas
estaduais do Rio de Janeiro, podemos submeter a seguinte consulta a` base de dados:
>
>
>
>
>
library(sqldf)
# Abertura de conex~
ao com a base de dados
BaseDados <- file("Matriculas_2010.csv")
# Defini
c~
ao da consulta em SQL
consulta <- "select
count(FK_COD_ALUNO) as QtdMatric,
ID_ZONA_RESIDENCIAL as ZonaResid,
ID_N_T_E_P as TipoTransp,
ID_RESPONSAVEL_TRANSPORTE as RespTransp,
PK_COD_ENTIDADE as Censo,
COD_MUNICIPIO_ESCOLA as Municipio,
ID_DEPENDENCIA_ADM_ESC as DepAdm
from
BaseDados
where
ID_DEPENDENCIA_ADM_ESC = '2'
group by PK_COD_ENTIDADE, ID_ZONA_RESIDENCIAL"
> # Submiss~
ao da consulta `
a base de dados.
> QtdMatricUrbRur <- sqldf(consulta, file.format=list(header=TRUE, sep=";"))
> head(QtdMatricUrbRur)
1
2
3
4
5
6
Conclus
ao