Este tutorial é de autoria do professor Leonardo S. Barone e pode ser encontrado no link. Agradeço pela generosidade em compartilhar.
Abrindo dados no R
Neste tutorial vamos cobrir uma série de métodos disponíveis para abrirmos arquivos de texto, editores de planilhas e de outros softwares de análise de dados no R. Vamos dar atenção aos argumentos das funções de forma a solucionar dificuldades de abertura de dados com diferentes características ou em sistemas operacionais variados.
Pacotes no R
Antes de avançarmos à tarefa principal, vamos aprender um pouco mais sobre pacotes. Já foi destacado diversas vezes que uma das vantagens do R é a existência de uma comunidade produtiva e que desenvolve continuamente novas funcionalidades, tudo em código aberto.
Para instalarmos um novo pacote de R que esteja disponível no CRAN – “The Comprehensive R Archive Network” – utilizamos a função install.packages. Veja o exemplo com o pacote beepr:
install.packages("beepr")
Note que o nome do pacote deve estar em parêntese e aspas. Além disso, é possível que você tenha sido perguntada sobre de qual servidor do CRAN você quer baixar o pacote. A escolha em nada muda o resultado, exceto o tempo de duração do download.
Uma vez que um pacote foi instalado, ele está disponível em seu computador, mas não ainda para uso neste script e sessão R. Apenas depois de executarmos a função library é que teremos o pacote em nossa “biblioteca” de funções.
library(beepr)
Você pode dispensar as aspas ao usar a função library, pois é opcional.
Se você quiser usar rapidamente apenas uma função de um pacote sem carregá-lo, você pode utilizar a função precedidade por “:” duas vezes e o nome do pacote. Veja o exemplo:
beepr::beep()
Caminhos no R
Cada opção para importar dados para R depende de informar a R onde procurar no seu disco pelo arquivo. R sempre começa a procurar no ‘diretório de trabalho’. Você pode verificar em qual diretório está trabalhando executando o seguinte comando:
getwd()
E como eu altero o “wd” (working directory)?
setwd("C:\\User\\Documents")
Simples e muito útil para evitar escrevermos “labirintos de pastas” cada vez que queremos importar dados. Agora só precisamos nos referir ao nome do arquivo (e não a sua pasta) para abrí-lo. É uma boa prática manter todos os arquivos, scripts e saídas importados em uma pasta de projeto bem organizada.
Um detalhe fundamental para quem usa Windows: os caminhos devem ser escritos com duas barras no lugar de uma, como no exemplo acima. É uma chatice e a melhor solução é mudar definitivamente para Linux e nunca mais pagar por software proprietário.
Readr
Existem muitas funções para abrir arquivos de dados, mas para simplificar neste curso, vamos nos concentrar em um conjunto de funções do pacote Readr. O pacote readr, parte do tidyverse (conjunto de pacotes com o qual vamos trabalhar), contém funções para abertura de dados ‘retangulares’ (.csv, .tsv, .txt).
A maneira mais fácil de acessar as funções do Readr é abrir a biblioteca do tidyverse (instale-a primeira, se necessário).
library(tidyverse)
Provavelmente a função mais usada no Readr é read_csv, que abre arquivos .csv. Em vez de abrir arquivos do nosso computador, também podemos abrir links e, para simplificar, disponibilizamos vários arquivos em nosso repositório do github. Você pode colar o url de cada arquivo no navegador para ver o seu formato antes de executar o código.
file1 <- "https://raw.githubusercontent.com/retaoliveira/relements/main/data/file1.txt"
dados <- read_csv(file1)
dados deve aperecer como um objeto em seu ‘Environment’. A função read_delim nos dá mais flexibilidade para lidar com tipos incomuns de arquivos. Por exemplo, podemos especificar o caractere usado para separar as colunas (por padrão, esta é a vírgula em read_csv):
dados <- read_delim(file1,
delim = ",")
file_semi_colon <- "https://raw.githubusercontent.com/leobarone/ifch_intro_r/master/data/bf_amostra_hp.csv"
dados <- read_delim(file_semi_colon,
delim = ";")
file_tab <- "https://raw.githubusercontent.com/leobarone/ifch_intro_r/master/data/bf_amostra_ht.csv"
dados <- read_delim(file_tab,
delim = "\t")
O padrão de read_delim (e read_csv) é importar a primeira linha como nome das variáveis. Se nossos dados não tiverem um header (cabeçalho, ou seja, nomes das variáveis na primeira linhas), a primeira linha de dados se torna equivocadamente o nome das variáveis (inclusive os números, que aparecem antecedidos por um “X”). Para corrigir o problema utilizamos o argumento “col_names”, que deve ser igual a “FALSE” para os dados armezenados sem nomes de colunas, por exemplo:
file_sem_header <- "https://raw.githubusercontent.com/leobarone/ifch_intro_r/master/data/bf_amostra_nv.csv"
dados <- read_delim(file_sem_header,
col_names = F,
delim = ",")
Além dos valores lógicos, “col_names” também aceita um vetor com novos nomes para as colunas como argumento:
dados <- read_delim(file_sem_header,
col_names = c("estado", "municipio_cod", "municipio_nome",
"NIS", "transferido"),
delim = ",")
Por vezes, é interessante definir as classes das variáveis a serem importadas, para evitar novas transformações quando os dados forem importados. O argumento col_types deve ser uma sequência de caracteres onde “c” = “character”, “d” = “double”, “l” = “logical” e “i” = “integer”. Por exemplo:
dados <- read_delim(file1,
delim = ",",
col_types = "cicid")
Perceba que quando abrimos os dados sem especificar o tipo da coluna, a função read_csv tenta identificá-los.
Uma complexidade de abertura de dados brasileiros é o uso da vírgula como separador decimal e o ponto para indicar milhares. Temos que especificar no argumento locale essas diferenças.
dados <- read_delim(file1,
delim = ",",
locale = locale(decimal_mark=",",grouping_mark="."))
Também podemos usar locale para especificar o formato da hora, o formato da data e o encoding do arquivo que estamos lendo.
Finalmente, é comum termos problemas para abrir arquivos que contenham caracteres especiais, pois há diferentes formas do computador transformar 0 e 1 em vogais acentuadas, cecedilha, etc. O “encoding” de cada arquivo varia de acordo com o sistema operacional e aplicativo no qual foi gerado.
dados <- read_delim(file1,
delim = ",",
locale = locale(encoding='latin1'))
Para resolver este problema, informamos ao R o parâmetro encoding dentro do locale, que indica qual é o “encoding” esperado do arquivo. Infelizmente não há formas automáticas infalíveis de descobrir o “encoding” de um arquivo e é preciso conhecer como foi gerado – seja por que você produziu o arquivo ou por que você teve acesso à documentação – ou partir para tentativa e erro. Alguns “encodings” comuns são “latin1”, “latin2” e “utf8”, mas há diversos outros. Como arquivo com o qual estamos trabalhando não contém caracteres especiais, não é preciso fazer nada.
Tibbles
Se inspecionarmos o objeto criado por qualquer uma das operações acima, dados parecem um pouco diferentes do que vimos antes. dados é um data.frame, mas também tem alguns característicos adicionais que facilitam o nosso trabalho. Ele se chama um tibble (um objeto pode ser de mais de uma clase). Observe que não utilizamos head para imprimir as primeiras linhas. Essa é uma característica de tibbles: o output contém uma fração do banco, a informação sobre número de linhas e colunas, e os tipos de cada variável abaixo dos nomes das colunas. Você pode ler mais sobre tibbles aqui.
Dados em arquivos editores de planilhas
Editores de planilha são, em geral, a primeira ferramenta de análise de dados que aprendemos. Diversas organizações disponibilizam (infelizmente) seus dados em formato .xls ou .xlsx e muitos pesquisadores utilizam editores de planilha para construir bases de dados.
Vamos ver como obter dados em formato .xls ou .xlsx diretamente, sem precisar abrir os arquivos e exportá-los para um formato de texto.
Há dois bons pacotes com funções para dados em editores de planilha: readxl e gdata. Vamos trabalhar apenas com o primeiro, mas convém conhecer o segundo se você for trabalhar constantemente com planilhas e quiser editá-las, e não só salvá-las. readxl também é parte do tidyverse mas temos que abri a biblioteca direitamente. Importe o pacote:
library(readxl)
Um pouco sobre donwload e manipulação de arquivos
Nosso exemplo será a Pesquisa Perfil dos Municípios Brasileiros de 2005, produzida pelo IBGE e apelidade de MUNIC. Diferentemente das demais funções deste tutorial, precisamos baixar o arquivo para o computador e acessá-lo localmente. Faça o download diretamente do site do IBGE e descompacte. Ou, mais interessante ainda, vamos automatizar o download e descompactação do arquivo (aviso: pode dar erro no Windows e tentaremos corrigir na hora – use Linux!).
Em primeiro lugar, vamos guardar o endereço url do arquivo em um objeto e fazer o download. Note que na função download.file o primeiro argumento é o url e o segundo é o nome do arquivo que será salvo.
url_arquivo <- "ftp://ftp.ibge.gov.br/Perfil_Municipios/2005/base_MUNIC_2005.zip"
download.file(url_arquivo, "temp.zip", quiet = F)
O argumento “quiet = F” serve para não imprimirmos no console “os números” do download (pois o tutorial ficaria poluído), mas você pode retirá-lo ou alterá-lo caso queira ver o que acontece.
Com unzip, vamos extrair o conteúdo da pasta:
unzip("temp.zip")
Use list.files para ver todos os arquivos que estão na sua pasta caso você não saiba o nome do arquivo baixado. No nosso caso utilizaremos o arquivo “Base 2005.xls”
list.files()
Vamos aproveitar e excluir nosso arquivo .zip temporário:
file.remove("temp.zip")
Voltando às planilhas
Para não repetir o nome do arquivo diversas vezes, vamos criar o objeto “arquivo” que contém o endereço do arquivo no seu computador (ou só o nome do arquivo entre aspas se você tivê-lo no seu wd):
arquivo <- "Base 2005.xls"
Com excel_sheets examinamos quais são as planilhas existentes do arquivo:
excel_sheets(arquivo)
No caso, temos 11 planilhas diferentes (e um bocado de mensagens de erro estranhas). O dicionário, para quem já trabalhou alguma vez com a MUNIC, não é uma base de dados, apenas textos espalhados entre células. As demais, no entanto, têm formato adequado para data frame.
Vamos importar os dados da planilha “Variáveis externas”. As duas maneiras abaixo se equivalem:
# 1
transporte <- read_excel(arquivo, "Variáveis externas")
# 2
transporte <- read_excel(arquivo, 11)
A função read_excel aceita os argumentos “col_names” e “col_types” tal como as funções de importação do pacote readr.