Análise de Dados com o Software R:
Métodos Estatísticos, Computacionais e Econométricos

Prof. Adriano Azevedo Filho (azevedofilho@usp.br)

Preparação dos dados para análise

sumário geral | anterior | próximo

Conteúdo do Módulo

  1 - Lendo o conjunto de dados externo em "data.frame" do R
      read.csv2, <-, identificadores de variáveis
      
  2 - Lendo um conjunto de dados em arquivo no seu computador
      file.choose
    
  3 - Verificação da integridade dos dados (leitura foi ok?)
      dim, names, uso de [] em nomes de data.frames
    
  4 - Tipos de valores e criação de vetores de interesse
      numeric, character, logic, NA, Inf, NaN, número:número, rep, seq
    
  5 - Modificando nomes das variaveis no data.frame
      names(nome) <- c("nome1","nome2")
      
  6 - Modificando os nomes das categorias de variáveis qualitativas
      levels(nome) <- c("nome1","nome2")
      
  7 - Visualização de variáveis e reordenação de categorias em variáveis qualitativas
      factor(nomedavariável, levels(nomedavariavel)[vetor])
      
  8 - Alteração de valores de variáveis no data.frame
      nome<-valor
      
  9 - Criando novas variáveis a partir das existentes
  
 10 - Salvando o data.frame modificado em arquivo no seu computador
      write.table, getwd, setwd
    

1 - Lendo o arquivo “esalq2012.csv” de site na internet

Para ler o arquivo com o conjunto de dados (codificado no formato csv BR) de um site externo no “data.frame” do R que denominamos “alunos”, use

alunos<-read.csv2('http://ihbs.com.br/html/esalq2012.csv')

Note como definir o “caminho” de forma apropriada. Após a execução bem sucedida dessa linha, o conjunto de dados estará “contido” no objeto “alunos”, um “data.frame”.

o símbolo "<-" indica: guarde o objeto definido pelo 
conteúdo da expressão da direita (no caso um "data.frame")
em uma região da memória do computador indentificada pelo 
"identificador" especificado à esquerda ("alunos")
regras para identificadores: não exceda 20 caracteres
                             use só letras, números e 
                             pontos, evite acentos
                             nota: isso é só uma sugestão,
                             há mais flexibilidade no R
                             
ex: altura, peso.ind, pesoInd, renda.pessoal2, rendaPess

2 - Lendo o arquivo se estiver no seu computador

Se o arquivo csv (BR) estiver no seu próprio computador, pode utilizar

caminho<-file.choose()       #seleção de arquivo via menus
alunos<-read.csv2(caminho)

A função “file.choose” abre um menú que possibilita a escolha de um caminho que define um arquivo no seu computador. Esse caminho é posteriormente passado para a função “read.csv2” que lê o arquivo, através da variável “caminho”, como fizemos parte 1.

3 - Verificando se o arquivo foi lido corretamente

É sempre oportuno verificar se o arquivo foi lido corretamente. Pode ter havido algum problema na conversão do arquivo original para o formato csv, ou problemas na opção de codificação. Algumas funções do R facilitam a verificação de potenciais problemas.

dim(alunos)   ## mostra número de linhas e colunas
## [1] 56 14
names(alunos) ## mostra nomes das variáveis no data.frame
##  [1] "sexo"     "curso"    "ingresso" "idade"    "cidade"   "reprov"  
##  [7] "anospub"  "peso"     "altura"   "time"     "satisf"   "reprmat" 
## [13] "pg"       "carreira"
alunos[1:4,1:5] ## mostra linhas 1 a 4 e colunas 1 a 5 do data.frame
##   sexo curso ingresso idade                                cidade
## 1    M  Econ     2010    20 Outra cidade do interior de Sao Paulo
## 2    M  Econ     2010    20 Outra cidade do interior de Sao Paulo
## 3    F  Econ     2010    22 Outra cidade do interior de Sao Paulo
## 4    M  Econ     2009    22 Outra cidade do interior de Sao Paulo

4 - Tipos de valores e criação de vetores de interesse

Antes de prosseguirmos é importante explicar que o R considera 3 tipos de valores principais: numérico (“numeric”), que pode ser inteiro ou real, texto (“character”), lógic (“logic”). Variáveis que representam vetores contém coleções ordenadas de valores de um só tipo (listas, um outro tipo de objeto do R pode conter tipos diferentes). Textos envolvidos com aspas são frequentemente denominados “strings” na linguagem usada em computação.

Os vetores podem ser lidos externamente, em data.frames, ou definidos através do comando “c”, de “concatenate” como ilustrado a seguir:

x<-c(2,4.2,5,4.88)  ## criando um vetor tipo numeric
x
## [1] 2.00 4.20 5.00 4.88
x<-c("a","carro","c2","22")  ## criando um vetor com texto (tipo character)
x
## [1] "a"     "carro" "c2"    "22"
x<-c(FALSE, TRUE, TRUE) ## criando um vetor com valores lógicos (TRUE e FALSE)
x
## [1] FALSE  TRUE  TRUE

O R também reconhece 3 valores especiais para indicar situações que ocorrem na prática da análise de dados, que são codificados com os símbolos * NA - um valor que indica que o valor é inexistente (not available) * Inf - infinito (resultado de uma operação como 1/0) * NaN - resultado indefinido (resultado de uma operação como log(-1))

Alguns exemplos de operações em vetores envolvendo esses valores

x<-c(NA, 9, 16, -1)
x
## [1] NA  9 16 -1
sqrt(x)  # raiz
## Warning in sqrt(x): NaNs produzidos
## [1]  NA   3   4 NaN
x/0
## [1]   NA  Inf  Inf -Inf

No caso da operação sqrt(x), o R também produziu um aviso (warning), para alertar o usuário sobre o resultado da operação que produziu um NaN.

Comandos adicionais para criação de vetores

Em muitas situações de análise, é necessário recorrer ao uso de certos vetores especiais realização de operações.

Vetores com sequências de números inteiros [número inteiro:número inteiro]

1:10    ## situação bem usual
##  [1]  1  2  3  4  5  6  7  8  9 10
-2:4    ## sequência iniciando com número negativo
## [1] -2 -1  0  1  2  3  4
10:1    ## sequência descrescente
##  [1] 10  9  8  7  6  5  4  3  2  1

Vetores com valores repetidos [rep(valor,repetições)]

rep(1,5)
## [1] 1 1 1 1 1
rep("gato",3)   ## pode ser um vetor de "strings"
## [1] "gato" "gato" "gato"

Vetores com valores reais com espaçamento constante [seq(início,fim,espaçamento)]

seq(1,2,0.2)
## [1] 1.0 1.2 1.4 1.6 1.8 2.0
seq(-2,2,0.5) 
## [1] -2.0 -1.5 -1.0 -0.5  0.0  0.5  1.0  1.5  2.0
seq(3,2,-0.1)
##  [1] 3.0 2.9 2.8 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0

5 - Modificando nomes das variáveis no data.frame

Vamos modificar os nomes das variáveis para nomes mais compactos para facilitar o manuseio das variáveis nas análises. Além disso, como os nomes são usados como rótulos para identificação das variáveis nos resultados (tabelas, gráficos, etc.), nomes muito longos podem ser inconvenientes.

names(alunos) ## mostra nomes das variáveis no data.frame, na ordem
##  [1] "sexo"     "curso"    "ingresso" "idade"    "cidade"   "reprov"  
##  [7] "anospub"  "peso"     "altura"   "time"     "satisf"   "reprmat" 
## [13] "pg"       "carreira"

Vamos agora fazer a alteração:

names(alunos)<-c("sex","cur","ing","ida","cid","rep","pub","pes","alt","tim","sat","rmat","pg","car")
names(alunos) ## mostrando os novos nomes
##  [1] "sex"  "cur"  "ing"  "ida"  "cid"  "rep"  "pub"  "pes"  "alt"  "tim" 
## [11] "sat"  "rmat" "pg"   "car"
A função "c" do R cria um vetor, concatenando elementos separados por vírgulas. 
No caso, criou-se um vetor de textos ou "strings" na linguagem usada em computação. 
Cada "string" substituirá o "string" original que definia o nome da variável, 
na ordem mostrada quando da primeira execução de names(alunos)

6 - Modificando os nomes das categorias de variáveis qualitativas

Da mesma forma que fizemos para os nomes das variáveis, podemos também modificar os nomes ou identificadores que caracterizam as“categorias” ou “níveis” de variáveis qualitativas (também chamadas de fatores em estatística).

Para acesso a cada variável, precedemos o nome da variável com o nome do data.frame ao qual ela pertence, separando os dois nomes com o símbolo “$”

levels(alunos$sex) ## mostra os níveis ou categorias da variável sex no data.frame alunos
## [1] "F" "M"

Para alterar os nomes dessas categorias, que indicam o sexo do aluno, para “f” e “m”, letras minúsculas, use

levels(alunos$sex)<-c("f","m") ## mostra os níveis ou categorias da variável sex no data.frame alunos
levels(alunos$sex)  ## mostrando os novos nomes, já alterados na variável
## [1] "f" "m"

Vamos agora proceder a alteração dos níveis de todas as variáveis qualitativas para torná-los mais compactos:

levels(alunos$cur) ## Curso (a-agronomia e-economia)?
## [1] "Agro" "Econ"
levels(alunos$cur)<-c("a","e")
levels(alunos$tim) ## Time que torce?
## [1] "Corinthians" "Nenhum time" "Outro time"  "Palmeiras"   "Santos"     
## [6] "Sao Paulo"
levels(alunos$tim)<-c("c","n","o","p","s","t")
levels(alunos$cid) ## Cidade onde nasceu?
## [1] "Cidade no exterior"                         
## [2] "Outra cidade do Brasil fora do Estado de SP"
## [3] "Outra cidade do interior de Sao Paulo"      
## [4] "Piracicaba"                                 
## [5] "Sao Paulo, Capital"
levels(alunos$cid)<-c("ext","fsp","isp","pir","csp")
levels(alunos$rmat) ## Teve reprovação em matemática?
## [1] "Nao" "Sim"
levels(alunos$rmat)<-c("n","s")
levels(alunos$pg) ## Deseja fazer pós-graduação?
## [1] "Me interesso pela pos graduacao em economia aplicada na ESALQ"
## [2] "Me interesso por pos graduacao em outras areas"               
## [3] "Nao me interesso no momento"                                  
## [4] "Nao sei ainda"
levels(alunos$pg)<-c("pgea","pgou","nint","nsei")
levels(alunos$car) ## Qual carreira deseja seguir?
## [1] "Nao sei ainda"                                  
## [2] "Ser empresario"                                 
## [3] "Ser professor ou pesquisador (universidade)"    
## [4] "Trabalhar em empresa privada"                   
## [5] "Trabalhar em empresa pública (concurso público)"
levels(alunos$car)<-c("nsei","empr","pesq","priv","publ")

Para visualizar todas as modificações realizadas, vamos ver as 10 primeiras linhas do nosso data.frame “alunos” usando:

alunos[1:10,]
##    sex cur  ing ida cid rep pub pes alt tim sat rmat   pg  car
## 1    m   e 2010  20 isp   1   0  57 172   t   2    s nsei nsei
## 2    m   e 2010  20 isp   4   0  78 175   p   2    s nint priv
## 3    f   e 2010  22 isp   2   5  59 170   s   2    s pgou priv
## 4    m   e 2009  22 isp   6   0  78 179   o   2    s nint nsei
## 5    m   e 2010  22 isp   3   4  80 180   t   5    s nsei priv
## 6    m   e 2011  21 isp   0   0  66 174   c   3    n nsei nsei
## 7    m   e 2011  19 pir   0   0  85 172   p   4    n nsei priv
## 8    f   e 2011  19 isp   0   0  54 162   s   4    n nsei priv
## 9    m   e 2011  20 isp   0   4  63 175   p   3    n pgou publ
## 10   f   e 2010  21 pir   3   0  62 175   p   3    s nint priv

7 - Visualização de variáveis e reordenação de categorias em variáveis qualitativas

names(alunos)       #mostrando os nomes das variáveis no data.frame
##  [1] "sex"  "cur"  "ing"  "ida"  "cid"  "rep"  "pub"  "pes"  "alt"  "tim" 
## [11] "sat"  "rmat" "pg"   "car"

Se o número de observações é relativamente pequeno podemos observar diretamente os valores da variável, como por exemplo o peso em kg (variável pes) simplesmente indicando o nome da variável, precedido do nome do data.frame, separado por um “$”

alunos$pes   
##  [1]  57.0  78.0  59.0  78.0  80.0  66.0  85.0  54.0  63.0  62.0  59.0
## [12]  56.0  80.0  60.0  66.0  73.0  73.0  98.0  69.0  65.0  87.0  64.0
## [23]  52.5  62.0  55.0  75.0  41.0  46.0  53.0  62.0  72.0  67.5  52.0
## [34]  52.0  62.0 100.0  75.0  60.5  77.0  69.5  54.0 115.0  74.0  65.0
## [45]  66.0  85.0 110.0  66.0  55.5  89.7  75.0  54.0  80.0  67.0  65.0
## [56]  68.0

Para uma variável quantitativa como o peso (alunos$pes), são apresentados os valores dessa variável. Para qualquer variável, numa listagem, no início de cada linha é mostrado o número da observação correspondente ao próximo valor da linha.

Para observar o sexo (variavel sex) de cada observação, usamos:

alunos$sex   
##  [1] m m f m m m m f m f f f m f f m m m m m m m f f f m f f f m m m f f f
## [36] m f f m m f m m m f m m m m m f f m m m m
## Levels: f m

Note que para uma uma variável qualitativa (também chamada categórica ou fator), também são apresentados, ao final da listagem, todas as categorias ou níveis encontrados, em ordem alfabética. Essa ordem será utilizada em todas as análises.

Se quisermos alterar a ordem de apresentação das categorias da variável qualitativa alunos$sex, fazendo a categoria “m” ser apresentada anteriormente a “f” podemos utilizar:

alunos$sex<-factor(alunos$sex,levels(alunos$sex)[c(2,1)]) # reordenação de níveis

O vetor mostra o número de ordem da categoria atual que deve ser posicionada em cada posição do vetor. No caso “m” ocupava a posição, e como 2 foi posto na primeira posição, essa é nova posição que deve ocupar. Verificaremos que a ordem dos níveis ou categorias foi de fato alterada:

alunos$sex   ## verificando se a ordem dos níveis foi alterada
##  [1] m m f m m m m f m f f f m f f m m m m m m m f f f m f f f m m m f f f
## [36] m f f m m f m m m f m m m m m f f m m m m
## Levels: m f

8 - Alteração de valores de variáveis no data.frame

Podemos facilmente modificar valores de variáveis. Para alterar o valor da quarta observação da variável alunos$alt use para o valor 180 (originalmente estava 179) use

alunos$alt[4]<-180

Para alterar vários valores simultaneamente (no caso os valores das observações 4, 7 e 8):

alunos$alt[c(4,7,8)]<-c(180,175,160)

Para verificar a substituição realizada

alunos[1:10,]
##    sex cur  ing ida cid rep pub pes alt tim sat rmat   pg  car
## 1    m   e 2010  20 isp   1   0  57 172   t   2    s nsei nsei
## 2    m   e 2010  20 isp   4   0  78 175   p   2    s nint priv
## 3    f   e 2010  22 isp   2   5  59 170   s   2    s pgou priv
## 4    m   e 2009  22 isp   6   0  78 180   o   2    s nint nsei
## 5    m   e 2010  22 isp   3   4  80 180   t   5    s nsei priv
## 6    m   e 2011  21 isp   0   0  66 174   c   3    n nsei nsei
## 7    m   e 2011  19 pir   0   0  85 175   p   4    n nsei priv
## 8    f   e 2011  19 isp   0   0  54 160   s   4    n nsei priv
## 9    m   e 2011  20 isp   0   4  63 175   p   3    n pgou publ
## 10   f   e 2010  21 pir   3   0  62 175   p   3    s nint priv

Vamos retornar os valores originais, usando:

alunos$alt[c(4,7,8)]<-c(179,172,162)

Para verificar a alteração (mostrando as 10 primeiras linhas)

alunos[1:10,]
##    sex cur  ing ida cid rep pub pes alt tim sat rmat   pg  car
## 1    m   e 2010  20 isp   1   0  57 172   t   2    s nsei nsei
## 2    m   e 2010  20 isp   4   0  78 175   p   2    s nint priv
## 3    f   e 2010  22 isp   2   5  59 170   s   2    s pgou priv
## 4    m   e 2009  22 isp   6   0  78 179   o   2    s nint nsei
## 5    m   e 2010  22 isp   3   4  80 180   t   5    s nsei priv
## 6    m   e 2011  21 isp   0   0  66 174   c   3    n nsei nsei
## 7    m   e 2011  19 pir   0   0  85 172   p   4    n nsei priv
## 8    f   e 2011  19 isp   0   0  54 162   s   4    n nsei priv
## 9    m   e 2011  20 isp   0   4  63 175   p   3    n pgou publ
## 10   f   e 2010  21 pir   3   0  62 175   p   3    s nint priv

9 - Criando novas variáveis a partir das existentes

É usual definirmos outras variáveis a partir das que já existem no data.frame, para as análises. Suponha que deseja criar, para cada observação, o valor do índice de massa corporal, que chamaremos de “imc”. Ele é definido como peso em kg dividido pela altura em m ao quadrado. Como a altura está medida em centimetros, podemos usar:

alunos$imc<-alunos$pes/(alunos$alt/100)^2

Podemos verificar que a nova variável foi de fato incorporada ao data.frame, usando:

names(alunos)
##  [1] "sex"  "cur"  "ing"  "ida"  "cid"  "rep"  "pub"  "pes"  "alt"  "tim" 
## [11] "sat"  "rmat" "pg"   "car"  "imc"
alunos[1:10,]
##    sex cur  ing ida cid rep pub pes alt tim sat rmat   pg  car      imc
## 1    m   e 2010  20 isp   1   0  57 172   t   2    s nsei nsei 19.26717
## 2    m   e 2010  20 isp   4   0  78 175   p   2    s nint priv 25.46939
## 3    f   e 2010  22 isp   2   5  59 170   s   2    s pgou priv 20.41522
## 4    m   e 2009  22 isp   6   0  78 179   o   2    s nint nsei 24.34381
## 5    m   e 2010  22 isp   3   4  80 180   t   5    s nsei priv 24.69136
## 6    m   e 2011  21 isp   0   0  66 174   c   3    n nsei nsei 21.79945
## 7    m   e 2011  19 pir   0   0  85 172   p   4    n nsei priv 28.73175
## 8    f   e 2011  19 isp   0   0  54 162   s   4    n nsei priv 20.57613
## 9    m   e 2011  20 isp   0   4  63 175   p   3    n pgou publ 20.57143
## 10   f   e 2010  21 pir   3   0  62 175   p   3    s nint priv 20.24490

10 - Salvando o data.frame modificado em arquivo no seu computador

Se quiser salvar o data.frame alunos em arquivo, já com as modificações no seu computador, use

write.table(alunos,"esalq2012mod.csv",sep=";",dec=",",row.names=FALSE)

O data.frame alunos será salvo no arquivo “esalq2012mod.csv”, com as opções corretas que definem um arquivo csv no formato BR desejado: “;” separando valores, “,” separando decimais, com nomes das variáveis na primeira linha do arquivo, e sem nomes identificando linhas.

Onde será salvo o arquivo? Se o caminho não for especificado junto com o nome, o arquivo será salvo no caminho padrão definido na instalação do R. Como saber esse caminho?

getwd()  ## mostrará o caminho ("path") padrão onde o R lerá ou salvará arquivos / dados
## [1] "C:/caminhodefinido"

Esse resultado mostraria que o caminho padrão é “C:/caminhodefinido”. No seu caso poderá obter um valor diferente, definido durante a instalação e/ou configuração do R.

Se quiser alterar esse caminho para um caminho “c:/caminhodesejado” use

setwd("c:/caminhodesejado")  ## defina o caminho desejado (mude a letra do drive se quiser)

Após a execução dessa última linha o R passará a usar “c:/caminhodesejado” como o caminho padrão, para ler e salvar arquivos de comandos e dados, caso o caminho não seja especificado no nome do arquivo.