Tutorial 2: Introdução ao R
Workflow: RStudio e Scripts.
O que é o R?
R é uma linguagem de programação de código aberto, versátil, útil tanto para estatística quanto para ciência de dados. É Inspirada na linguagem de programação S. Essas são algumas das principais vantagens do R:
- Software de código aberto.
- Superior (se não apenas comparável) às alternativas comerciais. Em janeiro de 2019, R ocupava o 12º lugar no índice TIOBE, que mede a popularidade das linguagens de programação. É amplamente utilizado na academia e na indústria, especialmente no círculo de cientistas de dados.
- Disponível em todas as plataformas (Unix, Windows, Linux).
- Como resultado de ser uma linguagem de dados aberta, se você fizer sua análise em R, qualquer pessoa poderá replicá-la facilmente.
- Funciona não apenas para análise estatística, mas também programação de uso geral.
- É linguagem de objetos (= R possui objetos) e funcional (= Você pode escrever funções).
- Grande e crescente comunidade de usuários.
Rstudio
O RStudio é a principal interface gráfica do usuário (GUI) e o ambiente de desenvolvimento integrado (IDE) que facilita o uso do R.
Como escrever códigos em R?
A maior parte dos usuários iniciantes em R costuma digitar seus códigos diretamente na linha de comando. Esta é uma péssimoa opção.
A melhor forma para trabalhar com R consiste em utilizar scripts. Estes scripts – que não são nada mais do que um arquivo de texto – permite a você contruir seu código de forma mais integrada, e com mais flexibilidade.
Vamos revisar como funciona o R Studio, para entender melhor a utilização de scripts, e fluxos básicos de programação em R.
Noções básicas.
Abra o RStudio! Em seguida, abra um novo script clicando em “Arquivo -> Novo arquivo -> Script R” ou pressionando Ctrl + Shift + N
(PC) oucommand + shift + N
(Mac). Depois de abrir um novo script, você verá quatro “painéis”.
Painel superior esquerdo (entrada / script)
Neste painel, você escreve seu código. Digite 2 + 2
no seu script e execute uma linha de código pressionandocommand + enter
(Mac) ou Ctrl + enter
(PC). Ou clique no botão “Executar” na parte superior do script.
O nome do seu arquivo de script está na guia na parte superior da janela do script - o nome padrão é Untitled1
. Certifique-se de salvar seu script clicando em “Arquivo -> Salvar” ou command + s
(Mac) ouCtrl + s
(PC). Você também pode clicar no ícone de disquete para salvar.
Painel inferior esquerdo (saída / console)
O resultado do código é exibido no `console ’no painel inferior esquerdo. Esse espaço também é bom para procurar e experimentar o código que você não deseja salvar em seu script.
Painel superior direito (ambiente global)
Os dados são salvos na memória de R como objetos. Os objetos são simplesmente espaços reservados para um valor, expressão matemática, palavra, função ou conjunto de dados! A guia “Ambiente” global no painel superior direito exibe as variáveis que você atribuiu / salvou.
Painel inferior direito (arquivos, plotagens, pacotes e ajuda)
Aqui você encontra guias úteis para navegar no sistema de arquivos, exibir gráficos, instalar pacotes e visualizar páginas de ajuda. Pressione a tecla control
e um número (1 a 9) no teclado para atalho entre esses painéis e guias.
Como Interagir com R
Há duas formas para interagir com R via R Studio.
Via Console (Tela Inferior Esquerda).
Via Script. (Tela Superior Esquerda)
R via console.
No console, o prompt >
indica que seu R está pronto para receber o comando. Copie e cole o código abaixo em seu Console e click Enter.
2+2
## [1] 4
Se o seu prompt estiver com símbolo +
, basta clicar no console e pressionar a tecla esc
no teclado quantas vezes forem necessárias para retornar ao prompt. O R usa +
quando o código é dividido em várias linhas e o prompt ainda espera mais código.
Uma linha de código geralmente não termina até que R encontre um parâmetro ou pontuação de parada apropriado que conclua algum código, como parêntese fechado fechado )
, colchete ]
, colchete }
ou aspas `.
Por exemplo, copie e cole este código em seu console
incompleto <- "Eu sou um objeto incompleto
Você verá em seu R como este código está incompleto. Faltou você fechar as aspas. Por isto, o promt to R estava com o símbolo +
, esperando você finalizar a linha de código.
Abrindo um script
Você pode abrir um script novo clicando na aba File
-> New File
-> R Script
. O seu editor de script funciona basicamente como um documento de texto qualquer. Na verdade você pode escrever seu código em um editor de texto (notepad), e copiar e colar para seu console, ou linha de comando do seu computador.
O RStudio integra este editor de script com outras ferramentas, incluindo o console. Por isto, o RStudio é considerado um ambiente de desenvolvimento integrado (IDE). Agora, abra um script, e copie e cole o código abaixo. Depois, rode usando command + enter
(Mac) ou Ctrl + enter
(PC).
2^2
## [1] 4
2*2
## [1] 4
2/2
## [1] 1
Programadores em geral não utilizam diretamente o console, seja em R, Python, Java, ou qualquer outro. Utilizar um script traz inúmeros vantagens: mais flexibilidade ao código, permite escrever códigos mais longos e complexos, fazer comentários no seu código, explicar suas decisões e permitir que outros entendem melhor seus códigos, salvar seus códigos e compartilhá-lhos são apenas algumas das vantagens de usar um editor de script.
Quando deve criar um script?
Organizar seus códigos, pastas e fluxo de trabalho em R é fundamental. Na próxima semana, discutiremos este tópico em detalhes!
Porém, vamos a nossa regra para criação de script. Eu recomendo que você tenha um script para cada tarefa distinta executada em R. Por exemplo, eu sugiro que vocês tenham um script para cada uma de nossas aulas.
Commentários
Uma hashtag #
diz ao R que você não deseja que essa linha ou bloco de código seja executado - isso é chamado de comentando seu código. Isso é útil para você fazer anotações e pode até adicionar hashtags após linhas de código executável, na mesma linha.
Sempre anote seus códigos Ajude você no futuro!
Pacotes em R.
Um pacote em R é simplemente um conjunto de funções - e às vezes com dados - disponibilizados por outros usuários ou pela própria equipe de manutenção e criação do R. Estas funções em gerais são colocadas juntas em um pacote porque servem a um propósito específico, por exemplo, um modelo estatístico novo, um conjunto de funções para visualização de dados ou um pacote com funções para acessar dados eleitorais.
Instalar um pacote consiste, basicamente, em fazer download de uma pasta – onde estão salvas um conjunto de funções – para seu computador. Por isso, você instala o pacote somente uma vez.
No entanto, cada vez que você abre seu R, você precisa lembrá-lo de que você possui determinados pacotes instalados, e, ao invés de baixar tudo outra vez, você pode somente ativá-los. Esta é a diferença entre install.packages()
e library()
Instalar Pacotes Via Cran.
O CRAN é o repositório oficial do R. Lá estão todos os pacotes que cumprem determinados requisitos da equipe do R, e, portanto, entram no repositório oficial.
install.packages("devtools", force=TRUE)
Ativar um pacote.
library(devtools)
Instalar Pacotes Via Github.
Nem todos os pacotes estão no CRAN. Há pacotes, e versões mais atualizadas de determinados pacotes, que estão disponíveis no Github – um repositório de códigos para programadores.
install_github("silvadenisson/electionsBR")
Funções de Ajuda.
Há duas formas principais de pedir ajuda em R.
Pedindo ajuda via R
Todas as funções e pacotes de R possuem uma documentação. Esta documentação explica como utilizar determinada função, quais seus argumentos, e provê exemplos de uso. Esta ajuda aparecerá em painel inferior direito. Você pede ajuda desta forma:
# Ajuda específica.
?mean # Help para a função mean.
help(mean)
# Ajuda mais geral: busca todas as ocorrências do nome da função.
??mean
Pedindo ajuda via Google.
Você deve usar o Google e o StackOverflow para solucionar erros em seus códigos. Aqui estão algumas dicas sobre como pesquisar erros no Google:
Google: nome do função/pacote + texto na mensagem de erro.
Remova as informações específicas do usuário e dos dados primeiro!
Veja se você consegue encontrar exemplos que produzem e não produzem o erro. Experimente o código de outras pessoas, mas
Tende entender a solução. Copiar e Colar não resolver seu problema.
A Regra dos 15 minutos
Retirado de Rochele Terman plsc-31101.
Objetos em R.
Cada linguagem de programação possui regras próprias sobre como criar, acessar e guardar variáveis no seu ambiente de trabalho.
Em R, variáveis, ou objetos, são criados atribuindo determinado dado a um determinado nome, e você pode acessá-los exatamente por nome atribuído.
Criando Objetos
Para criar um objeto usamos esta função de atribuição (assignment operator) <-
.
# Variáveis Numéricas
x <- 5
y <- 7
# Variáveis de Texto.
nome <- "Tiago Ventura"
Acima, nós atribuímos os valores 5, 7, e “Tiago Ventura” aos objetos de nome x, y, e nome.
Esta é a lógica: object_name <- value
É possível criar variáveis utilizando =
. Porém, o uso deste operador não é recomendado, visto que =
também possui diversas outras funcionalidade em R. Por exemplo:
mean(x=c(5, 7))
## [1] 6
Pergunta: Qual o valor de x agora?
????
Objetos no ambiente de trabalho?
Todos os objetos de R estão salvos em nosso ambiente de trabalho e podemos acessá-los diretamente, usando o nome dos objetos.
# Verificar ambiente de trabalho
ls()
## [1] "nome" "x" "y"
# Acessando os objetos
x
## [1] 5
y
## [1] 7
x+y
## [1] 12
Removendo Objetos.
# Para Remover
rm(x)
ls()
## [1] "nome" "y"
Visualizando objetos.
nome # ou
## [1] "Tiago Ventura"
print(nome)
## [1] "Tiago Ventura"
Modificando objetos.
nome <- "Tiago Augusto Ventura"
Regras para nomes dos objetos.
Nomes de objetos podem conter apenas letras, números, "_" e “..”
Boas Práticas: crie nomes de forma efetiva, que descrevem de forma acurada os objetos do seu ambiente de trabalho.
Nosso objetivo enquanto acadêmicos é produzir ciência e pesquisa, e parte do processo de criar conhecimento consiste em compartilhar suas pesquisas, incluindo seus códigos. Portanto, crie nomes que qualquer outro acadêmico ao ler seu código entenderá a que este objeto se refere .
Alerta
: Nomes em R são sensitivos a capitalização.
r_intro_css <- 10
r_Intro_css
## Error in eval(expr, envir, enclos): object 'r_Intro_css' not found
r_intro_css_
## Error in eval(expr, envir, enclos): object 'r_intro_css_' not found
Classes de Objetos
Cada objeto em R possui uma Classe. Em síntese, a classe descreve qual tipo de valores esse objeto está armazenando. De forma práticas, veremos objetos em R nas seguintes classes:
Character
Numeric
Interger
Logical
Exemplos:
Exemplo | Tipo |
---|---|
a , swc | Character |
2, 3, 15 | Numeric |
1, 2 | Interger |
FALSE, TRUE | Logical |
Classas são importante porque o R está programado para lidar com estes tipos de variáveis. Em resumo, o R entende que determinado tipo de objeto é numérico, e portanto, este objetivo pode realizar determinadas funções.
A função class()
permite que você descubra a classe de um objeto.
class(3)
## [1] "numeric"
class(TRUE)
## [1] "logical"
meu_numero_da_sorte= "13"
class(meu_numero_da_sorte)
## [1] "character"
class(meu_numero_da_sorte==13)
## [1] "logical"
Um exemplo sobre como o R advinha as classes e usa-as para definir quais funções podem ser aplicadas a estes objetos:
25 - "13"
## Error in 25 - "13": non-numeric argument to binary operator
Esta substituição retorna um erro porque o objeto “13” não é numérico, e operações matemáticas exigem objetos numéricos.
is.class?
É possível, por exemplo, checar diretamente se objetos são de determinada class.
is.numeric(2)
## [1] TRUE
is.logical(TRUE)
## [1] TRUE
is.character("2")
## [1] TRUE
is.integer(1L)
## [1] TRUE
Coerção: Alterando Classes.
Classes de objetos em R também podem ser alteradas usando as funções as.class()
# Cria Objeto
num_1_5 <- c(1, 2, 3, 4, 5)
# Altera a classe
char_1_5 <- as.character(num_1_5)
# Checando
class(char_1_5)
## [1] "character"
class(num_1_5)
## [1] "numeric"
# Ou
as.numeric("25")
## [1] 25
Desafio 1.
Vamos praticar um pouco o que aprendemos até aqui. O que os comandos abaixo retornarão? Qual o resultado e porquê?
Questão 1:
install.packages(tidyverse) # Este código irá funcionar?
Questão 2:
false <- "FALSE"
false <- as.logical(false)
class(false)
Questão 3
x=10
mean(x = sample(1:50, 5)) == mean(x) # TRUE ou FALSE
Operadores Booleanos e Operadores Lógicos
Expressões booleanas são valores lógicos que retornam se determinada relação é verdadeira ou falsa.
Estão expressão booleanas são a base de diversas linguagens de programação, incluindo R. Usaremos expressões booleanas para filtrar vetores ou bancos de dados, escrever loops, funções, relações condicionais, ou simplesmente comparar dois números.
Quando você digita uma expressão booleana em R, R produzirá TRUE se a expressão for verdadeira e FALSE se a expressão for falsa. Os operadores booleanos são:
Operador | O_que_Faz |
---|---|
< | menor que |
<= | menor ou igual que |
> | maior que |
>= | maior ou igual que |
== | exatamente igual |
!= | diferente |
%in% | é um objeto nesta lista |
Operadores Lógicos
Por outro lado, operadores lógicos servem para combinar multiplas análises usando operadores booleanos. Operadores lógicos são:
tribble(~Operador, ~O_que_Faz,
" x & y ", " x E y",
"x | y " , "x ou y",
"!x" , "Oposto de x") %>%
kbl() %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
Operador | O_que_Faz |
---|---|
x & y | x E y |
x | y | x ou y |
!x | Oposto de x |
Alguns exemplos:
x <- 10
y <- 20
# Booleano Básico
x>y
## [1] FALSE
x==y
## [1] FALSE
x%in%y
## [1] FALSE
x<y
## [1] TRUE
# Operadores Lógicos
x>15 | y > 15
## [1] TRUE
x >15 & y > 15
## [1] FALSE
Porquê isso importa?
Operadores Booleanos não são inicialmente intuitivos, e mais importante, é difícil de entender sua utilidade quando você inicia a programar. Porém, um bom entendimento de operadores booleanos e lógicos formam uma sólida base da sua capacidade de programçaõ em R.
Uma das principais utilidades é usar operadores boleanos para filtrar variáveis. Esta lógica se aplica a estruturas de dados mais complexos, que veremos a seguir.
x <- sample(-50:50, 10)
# Quais números são positivos?
x>0
## [1] FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE
# Posso selecionar eles?
x[x>0]
## [1] 22 36 29 9
Estrutura de Dados.
Um objeto pode ter diferente estruturas. Vamos vê-las rapidamente.
vector
matrix
data.frame
list
array
Vector
# vetor de números
X <- c(1, 2.3, 4, 5, 6.78, 6:10)
X
## [1] 1.00 2.30 4.00 5.00 6.78 6.00 7.00 8.00 9.00 10.00
# Class
class(X)
## [1] "numeric"
# Tamanho
length(X)
## [1] 10
Matrix
Estrutura de Dados Retangular (Linhas x Colunas). Extremamente útil para operações matemáticas, rápida manipulação.
Principal característica: comporta somente elementos numéricos
# Coerce to a matrix
as.matrix(X)
## [,1]
## [1,] 1.00
## [2,] 2.30
## [3,] 4.00
## [4,] 5.00
## [5,] 6.78
## [6,] 6.00
## [7,] 7.00
## [8,] 8.00
## [9,] 9.00
## [10,] 10.00
# Cria uma Matrix do zero
matrix(1:10, nrow=5, ncol=2)
## [,1] [,2]
## [1,] 1 6
## [2,] 2 7
## [3,] 3 8
## [4,] 4 9
## [5,] 5 10
List
A lista é extremamente útil para aplicações mais avançadas. Funciona como um repositório de vários objetos. É como uma grande gaveta onde você pode salvar sua bagunça.
Principal Característica: Tudo cabe dentro de uma lista. Elementos podem ser de classes varidas.
# coerce to a list
as.list(X)
## [[1]]
## [1] 1
##
## [[2]]
## [1] 2.3
##
## [[3]]
## [1] 4
##
## [[4]]
## [1] 5
##
## [[5]]
## [1] 6.78
##
## [[6]]
## [1] 6
##
## [[7]]
## [1] 7
##
## [[8]]
## [1] 8
##
## [[9]]
## [1] 9
##
## [[10]]
## [1] 10
# or
lista_1 <- list(X, as.matrix(X), as.character(X))
# Visualize a lista.
str(list)
## function (...)
Data Frame.
Em português, banco de dados. É uma estrutura de dados retangular, porém, diferente da matrix, comporta colunas de classes diferentes. É como uma planilha de excel no seu ambiente R.
A existência de data frames como classes básicas do R é uma das característica que fizeram do R um software tão útil para ciência de dados, sobretudo, no que se refere a manipulação e limpeza de dados retangulares. O Python, por exemplo, não possui data frames em seus tipos de objetos básico.
Vamos abaixo focar um pouco na manipulação de bancos de dados, dado que está é um conhecimento importante para nossas aplicações práticas.
Criando um banco de dados.
# Coercing
as.data.frame(X)
## X
## 1 1.00
## 2 2.30
## 3 4.00
## 4 5.00
## 5 6.78
## 6 6.00
## 7 7.00
## 8 8.00
## 9 9.00
## 10 10.00
# Criando Manualmente
data <- data.frame(name=c("Tiago", "Tiago"), last_name=c("Ventura", "Ventura") , school=c("UMD", "FGV"), age=c(30,32))
Além disso, o R possui diversos bancos de dados pre-armazenados na sua memória, ou em pacotes disponíveis para download. Para começar, vamos instalar e fazer o download do banco de dados sobre o show do netflix The Great British Bake Off. Neste link, você pode ver mais informações do pacote
Este pacote possui um conjunto de bancos de dados. Para ativar o banco de dados do pacote, precisamos somente usar a função
data()
#devtools::install_github("apreshill/bakeoff")
library(bakeoff) # Chamando o pacote
# O que tenho no meu ambiente?
ls()
## [1] "char_1_5" "data" "lista_1"
## [4] "meu_numero_da_sorte" "nome" "num_1_5"
## [7] "r_intro_css" "x" "X"
## [10] "y"
# ativa o banco de dados
data("bakers")
ls()
## [1] "bakers" "char_1_5" "data"
## [4] "lista_1" "meu_numero_da_sorte" "nome"
## [7] "num_1_5" "r_intro_css" "x"
## [10] "X" "y"
# Examine o objeto.
class(bakers)
## [1] "tbl_df" "tbl" "data.frame"
str(bakers)
## tibble[,8] [120 × 8] (S3: tbl_df/tbl/data.frame)
## $ series : Factor w/ 10 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ baker_full : chr [1:120] "Annetha Mills" "David Chambers" "Edward \"Edd\" Kimber" "Jasminder Randhawa" ...
## $ baker : chr [1:120] "Annetha" "David" "Edd" "Jasminder" ...
## $ age : num [1:120] 30 31 24 45 25 51 44 48 37 31 ...
## $ occupation : chr [1:120] "Midwife" "Entrepreneur" "Debt collector for Yorkshire Bank" "Assistant Credit Control Manager" ...
## $ hometown : chr [1:120] "Essex" "Milton Keynes" "Bradford" "Birmingham" ...
## $ baker_last : chr [1:120] "Mills" "Chambers" "Kimber" "Randhawa" ...
## $ baker_first: chr [1:120] "Annetha" "David" "Edward" "Jasminder" ...
Acessando dados em um Data Frame
Pela Ordem da Coluna
bakers[,1] # primeira coluna
## # A tibble: 120 x 1
## series
## <fct>
## 1 1
## 2 1
## 3 1
## 4 1
## 5 1
## 6 1
## 7 1
## 8 1
## 9 1
## 10 1
## # … with 110 more rows
Pela Nome da Coluna
bakers$age
## [1] 30 31 24 45 25 51 44 48 37 31 31 31 40 63 19 41 31 45 25 31 40 43 63 27 45
## [26] 21 22 27 36 43 38 28 26 50 25 31 66 51 31 37 51 30 38 37 54 20 30 35 31 69
## [51] 39 31 32 41 42 17 60 66 38 37 53 19 41 66 37 30 49 49 35 29 32 25 23 31 61
## [76] 37 67 46 20 28 30 26 66 50 71 46 21 29 19 52 33 42 34 29 46 30 33 36 33 47
## [101] 60 27 30 26 30 29 56 28 24 32 36 40 20 20 26 35 56 34 28 28
# Ou
bakers[,"age"]
## # A tibble: 120 x 1
## age
## <dbl>
## 1 30
## 2 31
## 3 24
## 4 45
## 5 25
## 6 51
## 7 44
## 8 48
## 9 37
## 10 31
## # … with 110 more rows
Pela posição da linha
bakers[1:5, ]
## # A tibble: 5 x 8
## series baker_full baker age occupation hometown baker_last baker_first
## <fct> <chr> <chr> <dbl> <chr> <chr> <chr> <chr>
## 1 1 "Annetha Mi… Annet… 30 Midwife Essex Mills Annetha
## 2 1 "David Cham… David 31 Entrepreneur Milton … Chambers David
## 3 1 "Edward \"E… Edd 24 Debt collect… Bradford Kimber Edward
## 4 1 "Jasminder … Jasmi… 45 Assistant Cr… Birming… Randhawa Jasminder
## 5 1 "Jonathan S… Jonat… 25 Research Ana… St Alba… Shepherd Jonathan
Por linha e coluna
bakers[1:5, "age"]
## # A tibble: 5 x 1
## age
## <dbl>
## 1 30
## 2 31
## 3 24
## 4 45
## 5 25
bakers[5:15, 3:5]
## # A tibble: 11 x 3
## baker age occupation
## <chr> <dbl> <chr>
## 1 Jonathan 25 Research Analyst
## 2 Lea 51 Retired
## 3 Louise 44 Police Officer
## 4 Mark 48 Bus Driver
## 5 Miranda 37 Food buyer for Marks & Spencer
## 6 Ruth 31 Retail manager/Housewife
## 7 Ben 31 Graphic Designer
## 8 Holly 31 Advertising executive
## 9 Ian 40 Fundraiser for English Heritage
## 10 Janet 63 Teacher of Modern Languages
## 11 Jason 19 Civil Engineering Student
Nota rápida sobre como acessar estruturas de dados.
Há duas formas mais gerais de se acessar valores dentro de determinadas estruturas de dados (vetores, matrizes, listas…). É possível acessar via índices (indexes) e chaves (keys).
Índices referem-se as posições de forma númerica. E as chaves são os textos, com nomes, de cada valor. Por exemplo, ao usarmos este commando bakers[1,1]
acessamos a primeira linha e a primeira coluna. Por outro lado, bakers[1,"age"]
ou
bakers$age
, acessamos usando a chave “age” que é o nome da coluna.
Cada estrutura de dados possui formas específicas de acessar seus valores. Matrizes e Vetores permitem somente indexação númerica. Listas permitem índices e chaves. Vamos aprender mais sobre isso no decorrer do curso.
Funções úteis para data frames
A classe data.frame possuí algumas funções pré-construídas bastante úteis. Alguns exemplos:
head(bakers) # Mostra primeiras cinco linhas
## # A tibble: 6 x 8
## series baker_full baker age occupation hometown baker_last baker_first
## <fct> <chr> <chr> <dbl> <chr> <chr> <chr> <chr>
## 1 1 "Annetha Mi… Annet… 30 Midwife Essex Mills Annetha
## 2 1 "David Cham… David 31 Entrepreneur Milton K… Chambers David
## 3 1 "Edward \"E… Edd 24 Debt collec… Bradford Kimber Edward
## 4 1 "Jasminder … Jasmi… 45 Assistant C… Birmingh… Randhawa Jasminder
## 5 1 "Jonathan S… Jonat… 25 Research An… St Albans Shepherd Jonathan
## 6 1 "Lea Harris" Lea 51 Retired Midlothi… Harris Lea
tail(bakers) # últimas cinco linhas
## # A tibble: 6 x 8
## series baker_full baker age occupation hometown baker_last baker_first
## <fct> <chr> <chr> <dbl> <chr> <chr> <chr> <chr>
## 1 10 Michael Cha… Micha… 26 Theatre man… Stratfor… Chakraver… Michael
## 2 10 Michelle Ev… Miche… 35 Print shop … Tenby, W… Evans-Fec… Michelle
## 3 10 Phil Thorne Phil 56 HGV driver Rainham Thorne Phil
## 4 10 Priya O'Shea Priya 34 Marketing c… Leicester O'Shea Priya
## 5 10 Rosie Brand… Rosie 28 Veterinary … Somerset Brandreth… Rosie
## 6 10 Steph Black… Steph 28 Shop assist… Chester Blackwell Steph
summary(bakers) # clase de cada coluna
## series baker_full baker age
## 4 :13 Length:120 Length:120 Min. :17.00
## 10 :13 Class :character Class :character 1st Qu.:28.75
## 2 :12 Mode :character Mode :character Median :34.00
## 3 :12 Mean :37.39
## 5 :12 3rd Qu.:45.00
## 6 :12 Max. :71.00
## (Other):46
## occupation hometown baker_last baker_first
## Length:120 Length:120 Length:120 Length:120
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
dim(bakes) # dimensões de linha e coluna
## [1] 548 6
glimpse(bakers) # outro modo de ver seus dados.
## Rows: 120
## Columns: 8
## $ series <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2…
## $ baker_full <chr> "Annetha Mills", "David Chambers", "Edward \"Edd\" Kimber"…
## $ baker <chr> "Annetha", "David", "Edd", "Jasminder", "Jonathan", "Lea",…
## $ age <dbl> 30, 31, 24, 45, 25, 51, 44, 48, 37, 31, 31, 31, 40, 63, 19…
## $ occupation <chr> "Midwife", "Entrepreneur", "Debt collector for Yorkshire B…
## $ hometown <chr> "Essex", "Milton Keynes", "Bradford", "Birmingham", "St Al…
## $ baker_last <chr> "Mills", "Chambers", "Kimber", "Randhawa", "Shepherd", "Ha…
## $ baker_first <chr> "Annetha", "David", "Edward", "Jasminder", "Jonathan", "Le…
Operações Boolenas: back, back, back again.
Podemos filtrar bancos de dados com base em operações boleanas.
# Bakers com mais de 60 anos
bakers[bakers$age>60,]
## # A tibble: 10 x 8
## series baker_full baker age occupation hometown baker_last baker_first
## <fct> <chr> <chr> <dbl> <chr> <chr> <chr> <chr>
## 1 2 "Janet Basu" Janet 63 Teacher of… Formby, … Basu Janet
## 2 3 "Brendan Ly… Brend… 63 Recruitmen… Sutton C… Lynch Brendan
## 3 4 "Christine … Chris… 66 Director o… Didcot, … Wallace Christine
## 4 5 "Diana Bear… Diana 69 Women's In… Alkingto… Beard Diana
## 5 5 "Norman Cal… Norman 66 Retired Na… Portknoc… Calder Norman
## 6 6 "Marie Camp… Marie 66 Retired Auchtera… Campbell Marie
## 7 7 "Jane Beedl… Jane 61 Garden des… Beckenham Beedle Jane
## 8 7 "Lee Banfie… Lee 67 Pastor Bolton Banfield Lee
## 9 7 "Valerie \"… Val 66 Semi-retir… Yeovil Stones Valerie
## 10 8 "Flo Atkins" Flo 71 Retired Merseysi… Atkins Flo
#Bakers de Londers
bakers[bakers$hometown=="London",]
## # A tibble: 8 x 8
## series baker_full baker age occupation hometown baker_last baker_first
## <fct> <chr> <chr> <dbl> <chr> <chr> <chr> <chr>
## 1 2 Robert Bill… Robert 25 Photographer London Billington Robert
## 2 4 Kimberley W… Kimbe… 30 Psychologist London Wilson Kimberley
## 3 6 Mat Riley Mat 37 Fire fighter London Riley Mat
## 4 7 Selasi Gbor… Selasi 30 Client servi… London Gbormittah Selasi
## 5 9 Antony Amou… Antony 30 Banker London Amourdoux Antony
## 6 9 Dan Beasley… Dan 36 Full-time pa… London Beasley-H… Dan
## 7 9 Manon Lagrè… Manon 26 Software pro… London Lagrève Manon
## 8 9 Ruby Bhogal Ruby 29 Project mana… London Bhogal Ruby
Meio confuso né? Sim. Concordo. Por isso, vamos usar um pacote chamado dplyr para manipulação de bancos de dados. Vamos chegar lá nas próximas aulas.
Exportando banco de dados.
Uma função importante do R consiste em exportar seus resultados, incluindo um novo banco de dados. Há diversas funções para fazer isso, a depender do formato do output que você deseja. Alguns exemplos:
write.table()
for txtwrite.csv()
for csvwrite.xlsx
for xlsxsave()
to export as a RData
E muitas outras!
Um exemplo com .csv
# make a fake data set
dfake <- data.frame(normal=rnorm(100, 0, 1),
uniform=runif(100, 0, 1),
pois=rpois(100, 10))
# write.function(data, name_to_be_saved)
write.csv(dfake, "dfake.csv")
Mas… Onde estão meus dados? E onde R está olhando?
Na próxima semana, vamos discutir como organizar seus dados em R e como ter um fluxo de trabalho organizado. No entanto, vamos aprender primeiro o básico sobre diretórios de trabalho no R – que eu não recomendo seja sua rotina – porém que nos ajuda a entender como o R funciona.
Definir seu diretório de trabalho é um passo que sempre causa muita dor de cabeça à iniciantes em R. É simples, porém, como somos treinados com o point-and-click do windows, no começo pode parecer difícil.
O R
não sabe intuitivamente onde estão seus dados. Se os dados estiverem em uma pasta especial chamada “pesquisa super secreta”, temos que dizer ao R
como chegar lá.
Podemos fazer isso de duas maneiras:
- Aprenda onde seus arquivos estão.
- Defina seu diretório de trabalho para essa pasta;
Toda vez que o R
é inicializado, ele olha para o mesmo lugar (chamado de global path), a menos que seja solicitado a ir para outro lugar.
# Onde meu R está olhando?
getwd()
## [1] "/home/venturat/Dropbox/fgv_capes_print/website/fgv_intro_css_/content/Tutoriais"
# Onde eu quero que olhe?
setwd("/home/venturat/Downloads")
Importando dados.
Os dados mais comuns que iremos importar serão .csv Estes tipos de arquivo são básicamente um arquivo de excel mais simples. Caso este arquivo esteja em seu diretório de trabalho, importá-lo para R é simples:
# Checa diretorio
getwd()
## [1] "/home/venturat/Dropbox/fgv_capes_print/website/fgv_intro_css_/content/Tutoriais"
# Ve arquivos neste diretorio.
list.files()
## [1] "cao.png" "data.jpeg"
## [3] "deputados_alerj.csv" "dfake.csv"
## [5] "example_markdown.html" "example_markdown.Rmd"
## [7] "figs" "mun_1985.csv"
## [9] "rstudio.png" "styles.css"
## [11] "tutorial_api.html" "tutorial_api.rmd"
## [13] "tutorial_joins_cache" "tutorial_joins.html"
## [15] "tutorial_joins.rmd" "tutorial_raspagem_cache"
## [17] "tutorial_raspagem.html" "tutorial_raspagem.rmd"
## [19] "tutorial_visualizacao_cache" "tutorial_visualizacao_files"
## [21] "tutorial_visualizacao_II_cache" "tutorial_visualizacao_II_files"
## [23] "tutorial_visualizacao_II.html" "tutorial_visualizacao_II.rmd"
## [25] "tutorial_visualizacao.html" "tutorial_visualizacao.rmd"
## [27] "tutorial1_instalacao.html" "tutorial1_instalacao.rmd"
## [29] "tutorial2_rbasico_cache" "tutorial2_rbasico_files"
## [31] "tutorial2_rbasico.html" "tutorial2_rbasico.rmd"
## [33] "tutorial2_rbasico.rmd.lock~" "tutorial3_rbasicoII.html"
## [35] "tutorial3_rbasicoII.rmd" "tutorial4_rmarkdown.html"
## [37] "tutorial4_rmarkdown.rmd" "tutorial5_rprojects.html"
## [39] "tutorial5_rprojects.rmd" "tutorial6_dplyr_cache"
## [41] "tutorial6_dplyr_files" "tutorial6_dplyr.html"
## [43] "tutorial6_dplyr.rmd" "tutorial7_tidydata.html"
## [45] "tutorial7_tidydata.rmd"
# Importa os dados.
dados <- read.csv("dfake.csv")
dados
## X normal uniform pois
## 1 1 1.05839342 0.083907538 9
## 2 2 0.72568021 0.422676714 8
## 3 3 -0.02611961 0.960513331 12
## 4 4 -0.96014305 0.327119922 10
## 5 5 0.63756339 0.201721686 9
## 6 6 -0.28472444 0.937967959 11
## 7 7 0.96073160 0.656437221 5
## 8 8 -1.58847398 0.344172079 15
## 9 9 -0.43869715 0.491008148 8
## 10 10 -0.23832596 0.303767503 6
## 11 11 -1.05874443 0.040193108 8
## 12 12 0.06844130 0.406652383 18
## 13 13 -1.37598756 0.223522570 12
## 14 14 -0.65499908 0.508981349 10
## 15 15 -0.74205451 0.579689276 7
## 16 16 1.58401428 0.486986908 7
## 17 17 0.48016476 0.269492050 8
## 18 18 -0.48615112 0.211876932 9
## 19 19 -0.73779716 0.889837916 10
## 20 20 -0.02957682 0.126897496 8
## 21 21 -0.91514677 0.099062991 13
## 22 22 0.02059756 0.018231801 13
## 23 23 -1.02806419 0.961531074 13
## 24 24 -2.35275523 0.278478305 9
## 25 25 -0.03963388 0.926778834 6
## 26 26 0.21155378 0.785121141 8
## 27 27 0.77235860 0.872812555 7
## 28 28 1.06353446 0.883585070 8
## 29 29 1.46667086 0.570160669 4
## 30 30 1.60955191 0.923460112 8
## 31 31 0.53109550 0.882896548 10
## 32 32 0.88890801 0.765389902 10
## 33 33 -0.86010115 0.752865166 12
## 34 34 -0.46639940 0.845591280 8
## 35 35 1.02471721 0.686706473 9
## 36 36 -0.44034261 0.752772692 14
## 37 37 0.08744307 0.951882144 12
## 38 38 0.05945331 0.914729854 14
## 39 39 0.28747814 0.282164482 8
## 40 40 -1.39198792 0.352023190 9
## 41 41 -0.33663789 0.461884863 7
## 42 42 -1.90393245 0.731584809 11
## 43 43 0.13965932 0.024922722 10
## 44 44 1.27319335 0.054795202 8
## 45 45 0.73421789 0.367920491 14
## 46 46 0.55495294 0.103272372 5
## 47 47 0.48403171 0.505670601 7
## 48 48 -1.21641688 0.333808986 9
## 49 49 -0.78210193 0.141061922 14
## 50 50 -0.76965524 0.773063051 5
## 51 51 -0.32384330 0.015055847 9
## 52 52 -1.66228410 0.015217601 14
## 53 53 0.71017910 0.936234810 12
## 54 54 -1.19461387 0.212494839 12
## 55 55 0.85876846 0.218512829 10
## 56 56 1.26043359 0.816747219 8
## 57 57 -2.40011829 0.138287176 8
## 58 58 -0.82817272 0.623255290 8
## 59 59 0.13754639 0.473274995 6
## 60 60 0.49569422 0.270645487 10
## 61 61 0.31874543 0.929958987 12
## 62 62 0.85637157 0.883855921 12
## 63 63 0.95665500 0.477444114 11
## 64 64 0.02612439 0.519624064 12
## 65 65 -0.29376447 0.463479884 6
## 66 66 -1.15939449 0.474200962 9
## 67 67 -1.81413562 0.005159762 9
## 68 68 -1.78749571 0.393862783 12
## 69 69 -0.36447765 0.586772554 9
## 70 70 -0.11412513 0.740586771 11
## 71 71 -0.46454306 0.304490996 12
## 72 72 -0.61708660 0.033328769 8
## 73 73 -0.42140987 0.030072994 18
## 74 74 0.79299569 0.863866405 15
## 75 75 -0.85414669 0.490470741 8
## 76 76 1.26111795 0.834986040 12
## 77 77 -0.82277200 0.121290795 10
## 78 78 1.28564254 0.815818344 8
## 79 79 0.75784843 0.709173859 13
## 80 80 1.61386404 0.725295042 9
## 81 81 1.29614350 0.853127639 9
## 82 82 0.13608120 0.514760664 8
## 83 83 0.08491760 0.453090254 11
## 84 84 -0.45682619 0.181166531 9
## 85 85 -0.46604936 0.984378396 10
## 86 86 0.86816737 0.672659246 10
## 87 87 1.15981205 0.059031170 5
## 88 88 0.02675689 0.999804850 11
## 89 89 -0.87618598 0.838986212 4
## 90 90 0.52030054 0.751445759 11
## 91 91 -1.16961787 0.216527095 10
## 92 92 -2.13672540 0.101751544 7
## 93 93 -0.61376161 0.901545833 10
## 94 94 0.48706913 0.320436247 18
## 95 95 -2.14857762 0.202340078 18
## 96 96 -0.71191066 0.202320317 14
## 97 97 0.04049229 0.431886403 14
## 98 98 0.05124224 0.553126397 12
## 99 99 0.32673601 0.498391295 11
## 100 100 -0.66981951 0.514991716 13
Assim como para write
, há diversas funções para importar dados em R. Exemplos:
read.table()
mais flexível, funciona principalmente para txt.read_excel()
arquivos de excel (pacote readxl)read_dta()
arquivos de Stata (pacote haven).
Estes são somente alguns poucos exemplos. Há multiplas funcões, algumas para abrir o mesmo tipo de arquivo, disponíveis para baixar.
Por exemplo, vamos usar mais a função read_csv
, ao invés do read.csv
, do pacote readr
, porque esta função é mais eficiente quando lidamos com conjunto grande de dados.
Desafio 2
Acima, quando filtramos o banco de dados bakers, usamos a seguinte função:
bakers[bakers$age>60,]
Me explique com o máximo de detalhes o que está linha de código está fazendo. Porque a operação booleana está antes da virgula? Qual o output da operação booleana?