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>" "<html lang=\"pt\">"
## [3] "" "<head>"
## [5] "" " <meta charset=\"utf-8\">"
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!