Análise de Dados em R (FNDE) - Módulo 1

Sessão 6 - Leitura, Escrita e Manipulação de Dados

Allan Vieira
janeiro de 2018

Objetivos desta Sessão


  • Conhecer as formas básicas de leitura de dados externos ao R;

  • Aprender técnicas básicas de manipulação de dados no R;

  • Aprender técnicas básicas de escrita de dados em arquivos externos ao R;

Introdução



  • nem sempre os dados estão da forma como desejamos;

  • 90% do trabalho da análise de dados é preparar os dados;

  • assim como no caso dos gráficos, o R possui dezenas de pacotes para leitura e escrita de dados – uns focam em rapidez, outros na praticidade e outros no tamanho dos dados a serem lidos;

Leitura de Dados



  • Na maioria das vezes que fizermos uma leitura de dados no R, ele tentará carregá-los como um dataframe;

  • Lembre-se de que você sempre poderá confirmar o tipo de objeto resultante da leitura com as funções str() ou class().

Função scan() (1)

  • Um dos melhores usos para a função scan() é a leitura de dados por meio de Ctrl+C / Ctrl+V;

  • Pode ser muito útil em situações com tabelas de um único tipo, pequenas e que estão em arquivos do word, uma página da internet ou até mesmo num .PDF (OCR, não imagens)

  • Função scan() é limitada e serve mais como um “quebra galho” quando queremos ler poucos dados rapidamente;

  • OBS: alguns parâmetros de entrada de dados podem ser controlados, como o separador decimal com sep=“,” ou sep=“.”;
  • Leia os dados da seguinte tabela com a função scan() ( out <- scan() ):
    10 34 22 21
    2 34 109 3
    23 10 67 88
    45 88 1 1
    0 291 38 92

Função scan() (2)

  • Note que a função scan() lerá seus dados como um único vetor (Verifique com str(out)) ! Cabe a você separá-los da forma correta.

  • Se quiser transformá-los em um data.frame, jogue primeiro para uma matriz (usando o parâmetro byrow=TRUE) e depois force-os como dataframe, utilizando as.data.frame():

out_df <- as.data.frame(matrix(out, ncol=4, byrow=TRUE))

Função readLines()



  • Assim como scan(), readLines é uma função bastante básica do R e não deve ser utilizada quando temos dados já estruturados;

  • No entanto, pode ser bastante útil quando desejamos ler todas as informações de um arquivo (.txt por exemplo) para trabalhar posteriormente com expressões regulares;

  • Verifique mais sobre esta função depois com help(readLines).

Funções da família read.table() (1)



  • As funções da família read.table() são as que você mais irá utilizar (inicialmente) para leitura de dados externos ao R;

  • read.table() é uma função genérica com a qual você poderá ler principalmente arquivos .txt e .csv;

  • Verifique o help() de read.table()!

  • Há vários parâmetros que podem ser passados a ela, mas 5 são extremamente importantes de serem observados:

    • 1. localização do arquivo;
    • 2. existência ou não de cabeçalho nos dados;
    • 3. forma de separação das colunas;
    • 4. forma de especificação da casa decimal nos dados;
    • 5. stringsAsFactors.

Funções da família read.table() (2)

  • 1. Localização do arquivo - parâmetro file:
#informar a localização correta do arquivo em seu computador;
#lembrar de usar barra invertida dupla no Windows:
df <- read.table(  file="C:\\caminho\\até\\meu\\arquivo\\meu_arquivo.txt")
  • 2. Os dados possuem cabeçalho? - parâmetro header:
    • caso POSITIVO:
df <- read.table(  file="C:\\caminho\\até\\meu\\arquivo\\meu_arquivo.txt", header=TRUE)
  • caso NEGATIVO:
df <- read.table(  file="C:\\caminho\\até\\meu\\arquivo\\meu_arquivo.txt", header=FALSE)
  • 3. Como estão separadas as colunas? - parâmetro sep:
    • por vírgula:
df <- read.table(  file="C:\\caminho\\até\\meu\\arquivo\\meu_arquivo.txt", ... , sep=",")
  • por ponto e vírgula:
df <- read.table(  file="C:\\caminho\\até\\meu\\arquivo\\meu_arquivo.txt", ..., sep=";")
  • por espaço:
df <- read.table(  file="C:\\caminho\\até\\meu\\arquivo\\meu_arquivo.txt", ..., sep=" ")
  • por TAB:
df <- read.table(  file="C:\\caminho\\até\\meu\\arquivo\\meu_arquivo.txt", ..., sep="\t")

Funções da família read.table() (3)

  • 4. Qual a especificação decimal para seus dados numéricos? parâmetro dec:
    • caso seja “,” (padrão brasileiro):
df <- read.table(  file="C:\\caminho\\até\\meu\\arquivo\\meu_arquivo.txt", ..., dec=",")
  • caso seja “.” (padrão anglo saxão):
df <- read.table(  file="C:\\caminho\\até\\meu\\arquivo\\meu_arquivo.txt", ..., dec=".")
  • Após serem lidos no R, o tratamento para a casa decimal sempre passará a ser o ponto “.” !!
  • 5. parâmetro stringsAsFactors:
    • O parâmetro stringsAsFActors indica como você quer ler as colunas de strings: como variáveis qualitativas categóricas/ fatores; ou como caracteres apenas.
    • O mais recomedado é passas stringsAsFactors=FALSE sempre
df <- read.table(  file="C:\\caminho\\até\\meu\\arquivo\\meu_arquivo.txt", ... , stringsAsFactors=FALSE)
  • Caso haja alguma coluna nos seus dados que deva ser tratada como variável qualitativa categórica, você poderá modificá-la postriormente com as.factor(nome_da_variavel).

Funções da família read.table() (4)

  • Com read.table(), você pode ler qualquer arquivo de qualquer extensão desde que esteja organizado em uma das formas descritas anteriormente e desde que você especifique corretamente os parâmetros;

  • Você pode por exemplo ter um arquivo .dat que consegue abrir no bloco de notas para identificar como deve passar os parâmetros no R;

  • Como na maioria das vezes, estamos lidando com arquivos do tipo .txt ou .csv separados por TAB, vírgula ou ponto e vírgula, o R já traz quatro funções específicas para não perdermos tempo com a especificação dos parâmetros:

    • read.csv() - (separador vírgula, decimal com ponto)
    • read.csv2() - (separador ponto e virgula, decimal vírgula)
    • read.delim() - (separador “\t” (TAB), e decimal ponto)
    • read.delim2() - (separador “\t” (TAB), e decimal vírgula)
  • Mais informações sobre elas, você encontra no help de read.table!!

Macete na especificação do caminho do arquivo

  • Para você não ter que ficar digitando toda vez o caminho completo até seu arquivo, há uma função que te permite navegar até o arquivo, selecioná-lo e, então guardar a sua localização como uma string em um objeto no R.

  • Tente:

arq.loc <- file.choose()