Importação de dados para o R

Tutoriais de R
Autora

Esthela Sá

Data de Publicação

29 de março de 2023

Introdução

Neste post vamos aprender a importar dados para o R. Utilizaremos os dados do IDEB (Índice de Desenvolvimento da Educação Básica).

Dentre os pacotes do tidyverse, há vários que podem ser utilizados para baixar arquivos com as mais diferentes extensões:

  • readr: para importar arquivos de texto delimitados (como CSV, TSV e arquivos com delimitadores personalizados);
  • readxl: para importar dados do Microsoft Excel;
  • haven: para importar dados de arquivos SAS, SPSS e Stata.

Pacotes utilizados

library(zip)
library(readxl)
library(tidyverse) 
library(kableExtra)

Baixar e descompactar arquivos no R

As explicações sobre o código abaixo, sobre como baixar e descompactar arquivos diretamente no R, estão em um post anterior que pode ser acessado clicando aqui.

if(!file.exists("./data")){dir.create("./data")}

url <- "https://download.inep.gov.br/educacao_basica/portal_ideb/planilhas_para_download/2021/divulgacao_anos_iniciais_escolas_2021.zip"

destfile <- "./data/divulgacao_anos_iniciais_escolas_2021.zip" 

download.file(url = url,
              destfile = destfile,
              mode = "wb")

unzip(zipfile = "./data/divulgacao_anos_iniciais_escolas_2021.zip",
      exdir = "./data", 
      overwrite = T)

Importação do banco de dados

Ao baixar o arquivo, vimos que ele tem uma extensão .xlsx e, portanto, está no formato do programa excel. Para importá-lo, vamos utlizar o pacote readxl.

A princípio, na função read_excel, vamos fornecer somente o caminho para o arquivo que queremos importar.

escolas_2021 <- read_excel("./data/divulgacao_anos_iniciais_escolas_2021.xlsx") 

Usamos a função slice_head para dar uma olhada nas 10 primeiras linhas (casos) do arquivo.

As nove primeiras não tem informações úteis. Somente na décima linha há os nomes das variáveis.

escolas_2021 |> 
  slice_head(n = 10) |> 
kable() |>  
  kable_styling(latex_options = "striped") |>  
  scroll_box(width = "100%", height = "300px")
...1 Ministério da Educação ...3 ...4 ...5 ...6 ...7 ...8 ...9 ...10 ...11 ...12 ...13 ...14 ...15 ...16 ...17
NA Instituto Nacional de Estudos e Pesquisas Educacionais Anísio Teixeira NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Ensino Fundamental Regular - Anos Iniciais NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Indicadores educacionais compostos por: Taxa de Aprovação, SAEB e IDEB por escola e rede de ensino - 2021. NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Sigla da UF Código do Município Nome do Município Código da Escola Nome da Escola Rede Taxa de Aprovação - 2021 NA NA NA NA NA NA Nota SAEB - 2021 NA NA IDEB 2021 (N x P)
NA NA NA NA NA NA NA NA NA NA NA NA NA Matemática Língua Portuguesa Nota Média Padronizada (N) NA
NA NA NA NA NA NA 1º ao 5º ano Indicador de Rendimento (P) NA NA NA NA
SG_UF CO_MUNICIPIO NO_MUNICIPIO ID_ESCOLA NO_ESCOLA REDE VL_APROVACAO_2021_SI_4 VL_APROVACAO_2021_SI VL_APROVACAO_2021_1 VL_APROVACAO_2021_2 VL_APROVACAO_2021_3 VL_APROVACAO_2021_4 VL_INDICADOR_REND_2021 VL_NOTA_MATEMATICA_2021 VL_NOTA_PORTUGUES_2021 VL_NOTA_MEDIA_2021 VL_OBSERVADO_2021
RO 1100015 Alta Floresta D'Oeste 11024372 EMEIEF ANA NERY Municipal 93.3 83.3 100 100 84.6 100 0.92893400000000004 ND ND - -

A imagem abaixo mostra o arquivo aberto no Excel. É possível ver que há um cabeçalho e várias informações que não são importantes para deixar o banco de dados num formato organizado (“tidy”) para as análises.

Vamos usar o argumento skip para que as nove primeiras linhas sejam ignoradas. Com esse ajuste, importamos o arquivo de modo que a primeira linha lida na planilha do excel correspondeu aos nomes das variáveis.

escolas_2021 <- read_excel("data/divulgacao_anos_iniciais_escolas_2021.xlsx", 
    skip = 9)

escolas_2021 |> 
  slice_head()
# A tibble: 1 × 17
  SG_UF CO_MUNICIPIO NO_MUNICIPIO          ID_ESCOLA NO_ESCOLA       REDE     
  <chr>        <dbl> <chr>                     <dbl> <chr>           <chr>    
1 RO         1100015 Alta Floresta D'Oeste  11024372 EMEIEF ANA NERY Municipal
# ℹ 11 more variables: VL_APROVACAO_2021_SI_4 <chr>,
#   VL_APROVACAO_2021_SI <chr>, VL_APROVACAO_2021_1 <chr>,
#   VL_APROVACAO_2021_2 <chr>, VL_APROVACAO_2021_3 <chr>,
#   VL_APROVACAO_2021_4 <chr>, VL_INDICADOR_REND_2021 <chr>,
#   VL_NOTA_MATEMATICA_2021 <chr>, VL_NOTA_PORTUGUES_2021 <chr>,
#   VL_NOTA_MEDIA_2021 <chr>, VL_OBSERVADO_2021 <chr>

Agora vamos ver as últimas linhas do arquivo.

As três últimas linhas também não têm informações importantes, portanto, não precisam ser importadas.

escolas_2021 |> 
  slice_tail(n = 10) |> 
kable() |>  
  kable_styling(latex_options = "striped") |>  
  scroll_box(width = "100%", height = "300px")
SG_UF CO_MUNICIPIO NO_MUNICIPIO ID_ESCOLA NO_ESCOLA REDE VL_APROVACAO_2021_SI_4 VL_APROVACAO_2021_SI VL_APROVACAO_2021_1 VL_APROVACAO_2021_2 VL_APROVACAO_2021_3 VL_APROVACAO_2021_4 VL_INDICADOR_REND_2021 VL_NOTA_MATEMATICA_2021 VL_NOTA_PORTUGUES_2021 VL_NOTA_MEDIA_2021 VL_OBSERVADO_2021
DF 5300108 Brasília 53068165 EC 02 DA ESTRUTURAL Estadual 96.6 100 98.8 92.1 99 100 0.97885200000000006 204.84 191.58 5.3564860000000003 5.2
DF 5300108 Brasília 53068173 EC 831 DE SAMAMBAIA Estadual 96 97 100 89.8 100 92.3 0.95640000000000003 222.24 217.86 6.1663649999999999 5.9
DF 5300108 Brasília 53068190 EC 01 DO PORTO RICO Estadual 99.3 98.8 100 98.1 100 100 0.99373699999999998 ND ND - -
DF 5300108 Brasília 53068203 EC 02 DO ITAPOA Estadual 96.2 100 98.7 80.8 99.2 96.6 0.94445500000000004 201.88 203.75 5.5212700000000003 5.2
DF 5300108 Brasília 53068211 CEF MIGUEL ARCANJO Estadual - - - - - - - - - - -
DF 5300108 Brasília 53068220 EC DOM BOSCO Estadual 93.1 98.7 97.8 83.8 100 87.7 0.93123100000000003 234.2 223.56 6.498246 6.1
DF 5300108 Brasília 53068238 EC VILA BURITIS Estadual 98 100 100 92 100 97.3 0.97757300000000003 229.85 218.26 6.318867 6.2
NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Fonte: MEC/Inep NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Notas: ND - Número de participantes no SAEB insuficiente para que os resultados sejam divulgados. NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

É possível ver na imagem do arquivo aberto no excel que as últimas linhas são notas explicativas.

A função glimpse mostra que o arquivo agora tem 63529 casos, mas só vamos precisar de 63526 linhas.

escolas_2021 |> 
  glimpse()
Rows: 63,529
Columns: 17
$ SG_UF                   <chr> "RO", "RO", "RO", "RO", "RO", "RO", "RO", "RO"…
$ CO_MUNICIPIO            <dbl> 1100015, 1100015, 1100015, 1100015, 1100015, 1…
$ NO_MUNICIPIO            <chr> "Alta Floresta D'Oeste", "Alta Floresta D'Oest…
$ ID_ESCOLA               <dbl> 11024372, 11024666, 11024682, 11024828, 110249…
$ NO_ESCOLA               <chr> "EMEIEF ANA NERY", "EMEIEF BOA ESPERANCA", "EE…
$ REDE                    <chr> "Municipal", "Municipal", "Estadual", "Municip…
$ VL_APROVACAO_2021_SI_4  <chr> "93.3", "98.5", "100", "100", "-", "67.5", "-"…
$ VL_APROVACAO_2021_SI    <chr> "83.3", "100", "-", "100", "-", "100", "-", "1…
$ VL_APROVACAO_2021_1     <chr> "100", "100", "-", "100", "-", "100", "-", "10…
$ VL_APROVACAO_2021_2     <chr> "100", "100", "-", "100", "-", "75", "-", "100…
$ VL_APROVACAO_2021_3     <chr> "84.6", "100", "100", "100", "-", "50", "-", "…
$ VL_APROVACAO_2021_4     <chr> "100", "94.4", "100", "100", "-", "38.5", "-",…
$ VL_INDICADOR_REND_2021  <chr> "0.92893400000000004", "0.98827500000000001", …
$ VL_NOTA_MATEMATICA_2021 <chr> "ND", "ND", "216.53", "168.75", "-", "169.64",…
$ VL_NOTA_PORTUGUES_2021  <chr> "ND", "ND", "206.92", "157.99", "-", "170.73",…
$ VL_NOTA_MEDIA_2021      <chr> "-", "-", "5.8584860000000001", "4.05701800000…
$ VL_OBSERVADO_2021       <chr> "-", "-", "5.9", "4.0999999999999996", "-", "2…

Desta forma, na função read_excel, utilizaremos o argumento n_max para excluir as três últimas linhas.

escolas_2021 <- read_excel("data/divulgacao_anos_iniciais_escolas_2021.xlsx", 
    skip = 9,
    n_max = 63526)

escolas_2021 |> 
  slice_tail()
# A tibble: 1 × 17
  SG_UF CO_MUNICIPIO NO_MUNICIPIO ID_ESCOLA NO_ESCOLA       REDE    
  <chr>        <dbl> <chr>            <dbl> <chr>           <chr>   
1 DF         5300108 Brasília      53068238 EC VILA BURITIS Estadual
# ℹ 11 more variables: VL_APROVACAO_2021_SI_4 <chr>,
#   VL_APROVACAO_2021_SI <chr>, VL_APROVACAO_2021_1 <chr>,
#   VL_APROVACAO_2021_2 <chr>, VL_APROVACAO_2021_3 <chr>,
#   VL_APROVACAO_2021_4 <chr>, VL_INDICADOR_REND_2021 <chr>,
#   VL_NOTA_MATEMATICA_2021 <chr>, VL_NOTA_PORTUGUES_2021 <chr>,
#   VL_NOTA_MEDIA_2021 <chr>, VL_OBSERVADO_2021 <chr>

Agora o banco de dados termina onde deveria. Mais uma olhada no arquivo com a função glimpse.

escolas_2021 |> 
  glimpse()
Rows: 63,526
Columns: 17
$ SG_UF                   <chr> "RO", "RO", "RO", "RO", "RO", "RO", "RO", "RO"…
$ CO_MUNICIPIO            <dbl> 1100015, 1100015, 1100015, 1100015, 1100015, 1…
$ NO_MUNICIPIO            <chr> "Alta Floresta D'Oeste", "Alta Floresta D'Oest…
$ ID_ESCOLA               <dbl> 11024372, 11024666, 11024682, 11024828, 110249…
$ NO_ESCOLA               <chr> "EMEIEF ANA NERY", "EMEIEF BOA ESPERANCA", "EE…
$ REDE                    <chr> "Municipal", "Municipal", "Estadual", "Municip…
$ VL_APROVACAO_2021_SI_4  <chr> "93.3", "98.5", "100", "100", "-", "67.5", "-"…
$ VL_APROVACAO_2021_SI    <chr> "83.3", "100", "-", "100", "-", "100", "-", "1…
$ VL_APROVACAO_2021_1     <chr> "100", "100", "-", "100", "-", "100", "-", "10…
$ VL_APROVACAO_2021_2     <chr> "100", "100", "-", "100", "-", "75", "-", "100…
$ VL_APROVACAO_2021_3     <chr> "84.6", "100", "100", "100", "-", "50", "-", "…
$ VL_APROVACAO_2021_4     <chr> "100", "94.4", "100", "100", "-", "38.5", "-",…
$ VL_INDICADOR_REND_2021  <chr> "0.92893400000000004", "0.98827500000000001", …
$ VL_NOTA_MATEMATICA_2021 <chr> "ND", "ND", "216.53", "168.75", "-", "169.64",…
$ VL_NOTA_PORTUGUES_2021  <chr> "ND", "ND", "206.92", "157.99", "-", "170.73",…
$ VL_NOTA_MEDIA_2021      <chr> "-", "-", "5.8584860000000001", "4.05701800000…
$ VL_OBSERVADO_2021       <chr> "-", "-", "5.9", "4.0999999999999996", "-", "2…

Ainda temos problemas. Como veremos no livro de códigos abaixo, variáveis como VL_OBSERVADO_2021 e VL_NOTA_PORTUGUES_2021 deveriam ser numéricas, mas o R as está tratando como caractere. Logo nos primeiros casos vemos que os valores “ND” e “-” são utilizados para indicar valores ausentes. Em um objeto que contém números e caracteres o R força o objeto a ser caractere (chr). Assim, na função read_excel vamos usar o argumento “na” para que, ao importar o arquivo, o R trate “ND” e “-” como valores ausentes.

Missing (ou NAs, na linguagem R) são valores faltantes em uma ou mais variáveis em um conjunto de dados. Isso pode ocorrer por vários motivos, como problemas técnicos durante a coleta de dados, erros de entrada de dados ou simplesmente porque as informações não estavam disponíveis no momento da coleta. Os dados faltantes podem ser problemáticos para as análises, pois podem prejudicar a precisão e a confiabilidade das conclusões obtidas.

escolas_2021 <- read_excel("data/divulgacao_anos_iniciais_escolas_2021.xlsx",
                           na = c("ND","-"),
                           skip = 9,
                           n_max = 63526)

Finalmente, temos o arquivo importado de forma adequada.

escolas_2021 |> 
  glimpse()
Rows: 63,526
Columns: 17
$ SG_UF                   <chr> "RO", "RO", "RO", "RO", "RO", "RO", "RO", "RO"…
$ CO_MUNICIPIO            <dbl> 1100015, 1100015, 1100015, 1100015, 1100015, 1…
$ NO_MUNICIPIO            <chr> "Alta Floresta D'Oeste", "Alta Floresta D'Oest…
$ ID_ESCOLA               <dbl> 11024372, 11024666, 11024682, 11024828, 110249…
$ NO_ESCOLA               <chr> "EMEIEF ANA NERY", "EMEIEF BOA ESPERANCA", "EE…
$ REDE                    <chr> "Municipal", "Municipal", "Estadual", "Municip…
$ VL_APROVACAO_2021_SI_4  <dbl> 93.3, 98.5, 100.0, 100.0, NA, 67.5, NA, 100.0,…
$ VL_APROVACAO_2021_SI    <dbl> 83.3, 100.0, NA, 100.0, NA, 100.0, NA, 100.0, …
$ VL_APROVACAO_2021_1     <dbl> 100.0, 100.0, NA, 100.0, NA, 100.0, NA, 100.0,…
$ VL_APROVACAO_2021_2     <dbl> 100.0, 100.0, NA, 100.0, NA, 75.0, NA, 100.0, …
$ VL_APROVACAO_2021_3     <dbl> 84.6, 100.0, 100.0, 100.0, NA, 50.0, NA, 100.0…
$ VL_APROVACAO_2021_4     <dbl> 100.0, 94.4, 100.0, 100.0, NA, 38.5, NA, 100.0…
$ VL_INDICADOR_REND_2021  <dbl> 0.928934, 0.988275, 1.000000, 1.000000, NA, 0.…
$ VL_NOTA_MATEMATICA_2021 <dbl> NA, NA, 216.53, 168.75, NA, 169.64, NA, NA, 17…
$ VL_NOTA_PORTUGUES_2021  <dbl> NA, NA, 206.92, 157.99, NA, 170.73, NA, NA, 16…
$ VL_NOTA_MEDIA_2021      <dbl> NA, NA, 5.858486, 4.057018, NA, 4.305639, NA, …
$ VL_OBSERVADO_2021       <dbl> NA, NA, 5.9, 4.1, NA, 2.7, NA, NA, 4.1, 3.5, N…

Conclusões

Neste post aprendemos a usar o R para importar arquivos do excel. De modo geral, os mesmos princípios podem ser aplicados para importar arquivos com outras extensões, mas sempre é bom conferir as vinhetas de cada pacote.

Se estiver precisando de ajuda para analisar dados quantitativos ou outras atividades acadêmicas, você pode contatar a Beta Consultoria e Assessoria através do e-mail

Livro de códigos

Nome da Variável Descrição Tipo
SG_UF Sigla da UF Caractere
CO_MUNICIPIO Código do Município Numérico
NO_MUNICIPIO Nome do Município Caractere
ID_ESCOLA Código da Escola Numérico
NO_ESCOLA Nome da Escola Caractere
REDE Rede Caractere
VL_APROVACAO_2021_SI_4 1º ao 5º ano (Taxa de aprovação) Numérico
VL_APROVACAO_2021_SI 1º ano (Taxa de aprovação) Numérico
VL_APROVACAO_2021_1 2º ano (Taxa de aprovação) Numérico
VL_APROVACAO_2021_2 3º ano (Taxa de aprovação) Numérico
VL_APROVACAO_2021_3 4º ano (Taxa de aprovação) Numérico
VL_APROVACAO_2021_4 5º ano (Taxa de aprovação) Numérico
VL_INDICADOR_REND_2021 Indicador de Rendimento (P) Numérico
VL_NOTA_MATEMATICA_2021 Matemática (Nota SAEB) Numérico
VL_NOTA_PORTUGUES_2021 Língua Portuguesa (Nota SAEB) Numérico
VL_NOTA_MEDIA_2021 Nota Média Padronizada (N) (Nota SAEB) Numérico
VL_OBSERVADO_2021 IDEB 2021 (N x P) Numérico