R Básico - Importação de Dados para o R

November 17, 2015

Introdução

Hoje falaremos de importação de dados para o R. Existem diversas formas para importar os mais variados tipos de dados para que possamos usar o R e fazer todas as análises que desejamos. Alguns dos formatos mais utilizados são:

  • CSV (Comma separated values)
  • Dados em tabela, usando outros separadores que não a vírgula
  • Dados espaçados por TAB
  • Arquivos Xls (Excel)
  • Linhas de arquivo de texto
  • HTML, XML, Json
  • E muitos outros (HDF5, SPSS, Stata)

Vamos começar.

Arquivos CSV e outros em formato de tabela

O CSV, ou Comma Separated Value, é um dos formatos mais utilizados para armazenar informações em formato de tabela. Neste formato, basicamente, a vírgula indica a passagem para a próxima coluna. A tabela pode ter um cabeçalho (header) com os nomes das colunas ou não.

Vamos utilizar um CSV com informaçoes sobre passageiros de linhas aéreas. Você pode baixa-lo clicando aqui.

Depois disso, vamos importar este CSV para um data frame no R usando a função read.csv. Vejamos:

airline_dataframe <- read.csv("AirPassengers.csv", header=TRUE)
head(airline_dataframe)
##   X     time AirPassengers
## 1 1 1949.000           112
## 2 2 1949.083           118
## 3 3 1949.167           132
## 4 4 1949.250           129
## 5 5 1949.333           121
## 6 6 1949.417           135

Utilizamos a função com o argumento header=TRUE pois neste CSV, a primeira linha indica o nome das colunas, ou seja, é seu cabeçalho, seu header. Caso utilizassemos header=FALSE, os valores constantes na primeira linha não seriam os nomes das colunas, mas sim itens do próprio data frame. O R daria nomes genéricos para as colunas neste caso. Também podemos usar o read.table, para ler arquivos em formato de tabela, inclusive CSVs, bastando definir o separado utilizado no arquivo através do argumento sep. O separador deve estar entre aspas:

airline_dataframe <- read.table("AirPassengers.csv", header=TRUE, sep=",")
head(airline_dataframe)
##   X     time AirPassengers
## 1 1 1949.000           112
## 2 2 1949.083           118
## 3 3 1949.167           132
## 4 4 1949.250           129
## 5 5 1949.333           121
## 6 6 1949.417           135

Agora outro exemplo, onde o separador é o TAB e o arquivo é um txt. Você pode baixar o arquivo clicando aqui :

test_dataframe <- read.table("test.txt", header=TRUE, sep="\t")
head(test_dataframe)
##    X t1 t2 t3 t4 t5 t6 t7 t8
## 1 r1  1  0  1  0  0  1  0  2
## 2 r2  1  2  2  1  2  1  2  1
## 3 r3  0  0  0  2  1  1  0  1
## 4 r4  0  0  1  1  2  0  0  0
## 5 r5  0  2  1  1  1  0  0  0
## 6 r6  2  2  0  1  1  1  0  0

Em alguns casos, o arquivo onde estão as informações possui em suas primeiras linhas instruções para utilização. Nestes casos, você pode usar o argumento skip para indicar quantas linhas devem ser puladas. Vamos usar o mesmo arquivo do último exemplo, mas editei-o para incluir algumas linhas de texto no início. Baixe o arquivo atualizado aqui: clique aqui para baixar

test_dataframe <- read.table("test2.txt", skip=4, header=TRUE, sep="\t")
head(test_dataframe)
##    X t1 t2 t3 t4 t5 t6 t7 t8
## 1 r1  1  0  1  0  0  1  0  2
## 2 r2  1  2  2  1  2  1  2  1
## 3 r3  0  0  0  2  1  1  0  1
## 4 r4  0  0  1  1  2  0  0  0
## 5 r5  0  2  1  1  1  0  0  0
## 6 r6  2  2  0  1  1  1  0  0

Temos outros argumentos úteis. Com o na.strings você define qual texto deve ser interpretado como um NA. Com o row.names e col.names, você pode suprir os nomes das linhas e colunas. Você também pode definir se strings devem ser interpretados como factors ou não com o argumento stringsAsFactors. Para ver a lista completa de argumentos possiveis para o read.table, acesse aqui:

Lendo arquivos do Excel

Para arquivos em Excel, existem algumas maneiras. A primeira é salvar o arquivo em formato CSV pelo Excel. O Excel permite e tem uma boa interface para isso.

Mas, para ler o próprio arquivo XLS, também podemos usar um pacote chamado xlsx.

Após instalar o pacote com install.packages("xlsx"), carregue o mesmo com library("xlsx"). Então, para carregar os dados, você deve usar a função read.xlsx, fornecendo o nome do arquivo a ser lido e o nome ou índice da planilha. Fiz um arquivo de teste, que você pode baixar clicando aqui:

library(xlsx)
## Loading required package: rJava
## Loading required package: xlsxjars
xl_data <- read.xlsx("test_excel.xlsx", "Plan1")
print(xl_data)
##     Nome Idade             Email
## 1 Felipe    70 felipe@felipe.com
## 2   Jose    30     jose@jose.com
## 3  Maria    20   maria@maria.com
## 4 Rafael    34 rafael@rafael.com
## 5  Luiza    25   luiza@luiza.com

Com este pacote, você também pode definir a linha de início (startRow), a linha de término (endRow), se a tabela tem cabeçalho (header), definir a classe de cada coluna (colClasses), entre outros. Para ver a lista completa de comandos, acesse o manual do pacote neste link.

Lendo arquivos de texto

Você também pode querer analisar longos arquivos de texto. Um arquivo de texto pode conter, por exemplo, tweets que você deseja analisar, um em cada linha. Fiz um arquivo de texto para teste que pode ser baixado clicando aqui. Para esta análise, você pode usar a função readLines. Basta prover o nome do arquivo ou uma conexão. Adicionalmente, você pode definir a quantidade de linhas a serem lidas, com o argumento n:

text_vector <- readLines("linhas_texto.txt")
## Warning in readLines("linhas_texto.txt"): incomplete final line found on
## 'linhas_texto.txt'
print(text_vector)
## [1] "Este é um exemplo com linhas de texto. Esta é a primeira"
## [2] "A segunda linha de texto tem mais um pouco de texto"
## [3] "Linha de texto número 3 chegando"
## [4] "Só mais uma para finalizar"
text_vector_2 <- readLines("linhas_texto.txt",2)
print(text_vector_2)
## [1] "Este é um exemplo com linhas de texto. Esta é a primeira"
## [2] "A segunda linha de texto tem mais um pouco de texto"

Lendo uma página da Internet

Outra possibilidade é ler uma página da Internet. Desta forma, você pode extrair através do próprio R informações importantes. Para isso, você cria uma conexão com a função url e aí pode utilizar o readLines da mesma forma que vimos acima:

conexao <- url("https://felipegalvao.com.br/")

linhas_pagina <- readLines(conexao)

print(head(linhas_pagina))
## [1] "<!DOCTYPE html&gt;"              "<html lang=\"pt\"&gt;"
## [3] ""                             "<head&gt;"
## [5] ""                             "    <meta charset=\"utf-8\"&gt;"

Por enquanto é isso. O R possui muitas outras opções para importação de dados, e eventualmente falaremos sobre elas aqui no blog.

Abraços!