O documento apresenta uma introdução à linguagem R para estatística e ciência de dados. Em menos de 3 frases, o documento discute o que é R e por que aprendê-lo, apresenta alguns motivos para aprender R como ser gratuito, fácil de aprender e ter grande quantidade de tutoriais disponíveis, e descreve brevemente o que pode ser feito com R como análise de dados, visualização de dados e relatórios.
1. Cartilha de R para Estatística e
Data Science
Edkallenn Lima
Mestre em Ciência da Computação, Agente de
Polícia Federal e professor
2. O que é R e por que aprendê-lo?
R é uma linguagem de programação estatística que vem passando por diversas
evoluções e se tornando cada vez mais uma linguagem de amplos objetivos
R é também um conjunto de pacotes e ferramentas para computação estatística,
munido de funções que facilitam sua utilização, desde a criação de simples rotinas
até análises de dados complexas, com visualizações bem acabadas
3. Motivos para aprender R
É gratuito, parte do projeto Free Software Foundation's GNU;
Curva de aprendizado bastante amigável, sendo muito fácil de se aprender;
Enorme quantidade de tutoriais e ajuda disponíveis gratuitamente na internet;
É excelente para criar rotinas e sistematizar tarefas repetitivas;
Amplamente utilizado pela comunidade acadêmica e pelo mercado;
Quantidade enorme de pacotes, para diversos tipos de necessidades;
Ótima ferramenta para criar relatórios e gráficos.
4. R também é uma linguagem de programação
Qual é a vantagem?
É um texto
É reprodutível
Dá para compartilhar!
5. O que podemos fazer com R?
Análise de dados - Estatística, modelagem, etc.
Visualização de dados
Apresentações
Relatórios dinâmicos
Escrever livros - Pacote Bookdown
Mineração de dados
E muito mais ...
6. RStudio
RStudio é o IDE da Linguagem R, ou seja, o ambiente
que utilizamos para editar e executar os códigos em
R.
Facilita a utilização do R.
É possível usar o R em Windows, Linux e Mac
O R é, prioritariamente, um ambiente de
programação de linha de comando
Felizmente existe o RStudio, ferramenta auxiliar que
usaremos durante a cartilha
7. Vantagens do RStudio
Sugestão de funções ou objetos ao escrever palavras similares nas linhas de código;
Autocompletar de funções;
Abas específicas para determinada ação, tal como gráficos, bases de dados etc;
Histórico de códigos utilizados;
Executor de linhas de código sequenciais;
Identificação de erros antes de executá-los;
Separação entre linhas de código e resultados, facilitando a escrita e execução de
comandos.
8. Instalando RStudio
Primeiro deve-se instalar o R nesse link
Em seguida, basta acessar: https://rstudio.com/products/rstudio/download/.
Na tela inicial você já vai ver DOWNLOAD;
Clique no link e o download vai dar início.
Depois de baixado, é só clicar no instalador e ir clicando em próximo e/ou avançar,
como a maioria dos programas
9. Layout e funcionalidades
A primeira janela no topo a esquerda é onde
escrevemos os códigos, ou seja, é o editor de texto
dessa interface.
Após escrever o código, existem duas formas de
executar o script: (1) através do ícone Run ; ou (2)
através do atalho ctrl + enter .
Essas duas alternativas vão executar o script de
forma sequencial.
Para salvar o script em um arquivo basta clicar no
ícone do disquete, aparecerá o diretório que você
deseja salvar, bem como o campo para nomear o
arquivo
11. Layout
A segunda janela abaixo e a esquerda
é a janela referente ao Console , ou
seja, é o terminal onde os comandos
são executados. (O R vive aqui!)
Todos os comandos executados na
janela de editor de texto aparecem
aqui.
No Console também podemos
executar comandos isolados, de forma
direta do mesmo jeito que faríamos no
terminal convencional do Linux.
e funcionalidades
Acima a direita você tem duas abas:
Environment , History e
Connections .
Nessa janela, na aba Environment você
vai ter seus objetos, seus dados e
variáveis criadas.
Na aba History é onde ficará
armazenado seu histórico do script.
Esse histórico é útil caso o RStudio se
feche ou você escolha salvar seu
workplace, ao abri-lo você não perderá
o histórico.
12. Layout e Funcionalidades
Por fim, abaixo a direita uma outra janela, nela há cinco abas: Files , Plots ,
Packages , Help e Viewer .
Na aba File terá o endereço do seu working directory, ou seja, do diretório no qual
você está trabalhando.
Para saber qual o diretório que você está trabalhando, basta digitar no Console o
código getwd().
Na aba Plots é onde o gráfico que eventualmente você vai gerar vai aparecer.
Já na aba Packages vai aparecer uma lista de pacotes que você pode selecionar e
instalar na hora.
Na aba Help é onde vai aparecer a documentação com exemplos e explicações
sobre alguma função que você possa ter dúvidas de como utilizar.
13. Atalhos úteis dentro do RStudio
CTRL + ENTER : roda a linha selecionada no script
CTRL + ALT + I :cria um chunk no R Markdown
ALT + SHIFT + k : janela com todos os atalhos disponíveis
ALT+-: cria no script um sinal de atribuição (<-). Você o usará o tempo todo.
CTRL+SHIFT+M: (%>% ou |>) operador pipe. Guarde esse atalho, será bastante
utilizado.
CTRL+1: altera cursor para o script.
CTRL+2: altera cursor para o console.
Chunks são os blocos de código que são executados quando o documento é
compilado
No MacOS, substitua CTRL por command e ALT por option.
14. Arquivos
R gera alguns tipos de arquivos que podem ser salvos. As principais deles são:
.R - Usado para salvar códigos criados e rotinas de análises (scripts).
.RData - Usado para salvar os objetos da área de trabalho (workspace).
.Rhistory - Usado para salvar o histórico dos comandos executados
(normalmente salvo automaticamente).
.Rproj - Formato exclusivo do RStudio, serve para salvar todas as
informações utilizadas anteriormente pelo RStudio de maneira simplificada.
15. Área de Trabalho e Diretório de Trabalho
R sempre fica associado a uma pasta específica do seu computador, essa pasta será
o diretório de trabalho (working directory).
Os arquivos que estão neste diretório são fáceis de carregar e qualquer arquivo
exportado será salvo no diretório caso não especificado o contrário.
O diretório de trabalho pode ser alterado, sem qualquer mudanças nos objetos da
área de trabalho.
getwd() # Mostrar o diretório de trabalho atual
dir() # Listar os arquivos do diretório
setwd() # Mudar o diretório de trabalho
16. Área de Trabalho e Diretório de Trabalho 2
É possível salvar a área de trabalho inteira e carregar em outro momento.
ls() # Listar os objetos da área de trabalho
save.image("meu_workspace.RData") # Salvar área de trabalho
load("meu_workspace.RData") # Carregar área de trabalho
17. Projetos
Uma funcionalidade muito importante do RStudio é a possibilidade de criar
projetos.
Um projeto é uma pasta no seu computador. Nessa pasta, estarão todos os
arquivos que você irá usar ou criar nas suas análises.
A principal razão de utilizarmos projetos é organização.
20. Pacotes
Pacotes são coleções de funções, dados e documentação que estendem as
capacidades do R básico. Eles precisam ser instalados e carregados.
21. Pacotes
Como existem muitos pacotes para R e só alguns deles são pré-instalados, os
demais precisam ser instalados no computador.
O procedimento de instalação precisa ser realizado apenas uma vez (além de
atualização de tempos em tempos).
Após instalados os pacotes estarão disponíveis para uso, mas é preciso carregar o
pacote para utilização.
install.packages("bbmle") # Instalar o pacote chamado bbmle
library(bbmle) # Carrega o pacote, ou então...
require(bbmle) # ... também carrega o pacote
22. Dicas sobre pacotes
1. Você só precisa instalar o pacote uma vez, mas precisa carregá-lo sempre que
começar uma nova sessão;
2. Para instalar o pacote use as aspas;
3. Para carregar o pacote, não utilize as aspas.
23. Detalhes Importantes: 1
Diferenças entre caracteres maiúsculos e minúsculos - Existem diferenças entre
caracteres maiúsculos e caracteres minúsculos (case sensitive), então o caractere A
é diferente do caractere a .
Separador decimal - O separador decimal utilizado pelo R é o símbolo do ponto
( . ), o símbolo de vírgula ( , ) é reservado para separar diferentes objetos dentro
de uma função.
Para alterar essa opção é preciso configurar nas preferências gerais do sistema
operacional.
24. Detalhes Importantes: 2
Parênteses, colchetes e chaves - Os símbolos de parênteses ( () ) servem para
agrupar objetos dentro de uma função e os símbolos de chaves ( {} ) servem para
agrupar funções dentro de outras funções.
Os colchetes ( [] ) são utilizados para indexar objetos dentro de outros objetos.
Como são símbolos utilizados para agrupar, eles devem ser abertos e fechados, ou
seja, deve haver um símbolo para finalizar o agrupamento.
Caracteres especiais- Caracteres especiais como por acentos e espaços devem ser
evitados.
Geralmente não são reconhecidos ou causam muitos problemas, pode-se usar os
símbolos de ponto ( . ) ou underline ( _ ) nos lugares dos espaços.
Esses símbolos especiais podem se usados no formato de texto nos resultados
finais, com por exemplo para exportar resultados gráficos.
25. Noções básicas
Ao digitar um comando (na aba Console ) o programa recebe os dados, executa
as funções e retorna os resultados.
Os dados de entrada podem ser fornecidos na hora de executar a função ou podem
estar guardados em algum lugar da memória (geralmente na área de trabalho).
Da mesma forma, os resultados das funções podem ser exibidos na tela ou salvos
em algum objeto (geralmente na área de trabalho).
26. Usando como uma calculadora
Primeiramente o R pode ser usado como uma calculadora.
2+2 # Soma
[1] 4
8-3 # Subtração
[1] 5
3*8 # Multiplicação
[1] 24
8/2 # Divisão
[1] 4
2^8 # Potências
[1] 256
(2+4)/7 # Prioridade de solução
[1] 0.8571429
Note que acompanhado do resultado é mostrado o [1]. Esse valor indica a posição
(índice) do primeiro valor do resultado.
27. Variáveis
Em R, uma variável pode ser definida com o uso do operador <-
Ele significa gets e pode ser traduzido como "atribuição" ou "recebe"
Por exemplo:
> x <- 1
O código acima atribui à variável x o valor 1
Para verificar o valor, basta:
> x
Após teclar ENTER , o valor será mostrado na tela:
[1] 1
Atalho: ALT + - : cria o <- sinal de atribuição
29. Variáveis
Esta notação para atribuição de variáveis é comumente usada em pseudocódigos
e comum em livros que apresentam discussões sobre algoritmos
Não é necessário definir o tipo da variável (tipagem dinâmica)
Mais exemplos de atribuições:
# atribuindo uma cadeia de caracteres (string) à variável x
> x <- "Olá Mundo"
> x
[1] "Olá mundo"
# Atribuindo um valor numérico do tipo real à variável x
> x <- 3.45
> x
[1] 3.45
É possível usar = ou <- e isso pode ser feito com qualquer tipo de objeto
30. Nomes de objetos (variáveis)
Os nomes devem começar com uma letra. Podem conter letras, números, _ e .
Não usar acentuação e espaços nos nomes de objetos.
Recomendação do autor do livro R For Data Science: usar_snake_case, ou seja,
palavras escritas em minúsculo separadas pelo underscore ( _ ).
O R é case sensitive, isto é, faz a diferenciação entre as letras minúsculas e
maiúsculas. Portanto, um objeto chamado teste é diferente de uma outro objeto
chamada Teste .
31. Funções matemáticas
Assim como todas as linguagens de programação, o R possui uma série de
funções nativas. Entre elas, estão as matemáticas. Uso de algumas a seguir:
> # raiz quadrada
> sqrt(2)
[1] 1.414214
> #exponencial
> exp(1)
[1] 2.718282
> #cosseno
> cos(90)
[1] -0.4480736
> #logaritmo: o primeiro argumento é o valor que será aplicada a função logaritmo. O segundo é a base
> log(1024,2)
[1] 10
Nos exemplos acima não foram realizadas atribuições. As funções são executadas
e os resultados não são acessíveis por meio de variáveis
32. Outra forma de executar funções matemáticas
> log(x = 8) # Logaritmo natural de 8
[1] 2.079442
> rep(x = 1, times = 4) # Repetir o valor 1 quatro vezes
[1] 1 1 1 1
> sum(1, 8, 79) # Soma de vários valores
[1] 88
> log(x = 8, base = 2) # Logaritmo de 8 na base 2, especificando cada argumento
[1] 3
> log(8, 2) # Logaritmo de 8 na base 2, seguindo a ordem dos argumentos na função
[1] 3
> log2(1024) #Logaritmo de base 2
[1] 10
33. Ajuda
É possível encontrar o arquivo de ajuda das funções com:
> help(log) # Abre a ajuda da função log, ou então...
? ?log # ... também abre a ajuda
Se a dúvida permanecer, procure no Stack OverFlow ou Google.
E se ainda tiver dúvidas, pergunte para a comunidade (há grupos no Telegram e
outras redes sociais).
34. Os principais itens do arquivo de ajuda da função são
Description - Apresenta um resumo sobre o que a função faz
Usage - Mostra todos os argumentos, ordem e as opções
reestabelecidas de cada um.
Arguments - Explica cada argumento.
Details - Detalhes sobre o uso da função, métodos e aplicação.
Value - Explica cada um dos os resultados.
References – Referências dos métodos.
See also - Funções relacionadas.
Examples - Mostra alguns exemplos que podem ser executados.
35. Ajuda: args e search
A função args mostra apenas os argumentos de uma função, o que pode ser útil
em alguns casos.
> args(log) # Mostra os argumentos da função log
function (x, base = exp(1))
NULL
Ainda é possível pesquisar por assunto, usando a função help.search ou ?? .
Qualquer documentação com o termo da pesquisa é retornada, incluindo funções
de pacotes que não estejam carregados, mas que estejam instalados no
computador.
help.search(mean) # Procura pelo termo mean, ou então...
??mean # ... faz a mesma busca
36. Cheatsheets
O RStudio tem à disposição algumas folhas de cola, as cheatsheets.
Elas trazem um resumão de como utilizar diversos pacotes e até o próprio RStudio.
Para acessá-las, basta clicar no menu Help e então em Cheatsheets , ou no site da
RStudio.
37. O que é um objeto?
Ao se desenvolver um projeto, você irá trabalhar com diversos tipos de arquivos,
além de informações que serão repetidas ao longo do script.
Para reutilizar essas informações ao longo do script utilizamos o que chamamos
de objeto
Um objeto retém e representa um valor, função ou base de dados
38. Mostrar e remover objetos (variáveis)
Durante a execução do R vários objetos são salvos na área de trabalho
(workspace).
Para visualizar todos os objetos da área de trabalho é possível utilizar a função ls e
para remover a função rm.
Os objetos removidos não podem mais ser recuperados.
> ls() # Listar dos objetos termporários da área de trabalho
[1] "x" "X" "y" "z"
> rm(X) # Remover objeto X
> rm(y) # Remover objeto y
> rm(list = ls()) # Remover todos os objetos!
> ls() # Área de trabalho vazia
39. Símbolos especiais
Alguns caracteres e simbolos são reservados para uso especial dentro do R.
Esses devem ser evitados ou não usados fora da proposta original.
Os principais estão listados a seguir:
NA # Indeterminado (Not Available)
NaN # Indeterminado (Not a Number)
Inf # Infinito
TRUE # Variável lógica para verdadeiro, ou abreviação T
FALSE # Variável lógica para falso, ou abreviação F
NULL # Usado para especificar algo nulo ou vazio
pi # Contante pi
40. Funções de uma letra
Também existem algumas função que são composta apenas por uma letra.
Nomes de objetos com essas letras devem ser evitados.
c # Concatenar valores
q # Fechar o R
t # Transpor uma matriz
C # Definer contrastes para um fator
D # Calcular derivadas
I # Mudar a classe de um fator
41. Operadores Lógicos
Igual a: ==
Diferente de: !=
Maior que: >
Maior ou igual: >=
Menor que: <
Menor ou igual: <=
44. Operadores Lógicos
Negação: !
E: &
OU: |
NA
Uma característica importante do R que pode dificultar a comparação são os valores
ausentes ou NAs (não disponíveis).
NA representa um valor desconhecido.
Operações envolvendo um valor desconhecido também será desconhecido
45. Classes Básicas ou Atômicas do R (tipos de dados)
Character: texto
Integer: números inteiros
Numeric: números racionais
Complex: números complexos (raramente usados para Análise de Dados)
Logical: TRUE, FALSE
Factor: variavéis categóricas
46. Tipos de dados
A dados do tipo numeric são números inteiros ou reais. Os números podem
serem escritos normalmente ou com notação científica, utilizando o E (ou e).
> x <- 4.5 # O . é o separador decimal
> x
[1] 4.5
> class(x)
[1] "numeric"
> is.numeric(x) # Confere se o objeto é um da classe numeric
[1] TRUE
> y <- 1E4 # Notação científica
> y
[1] 10000
> class(y)
[1] "numeric"
> is.numeric(y)
[1] TRUE
47. Caractere (character)
Os dados do tipo character são caracteres ou texto. São escritos
obrigatoriamente entre aspas ("" ou ’’) e não são modificados.
Os caracteres podem conter espaços ou acentos, mas isso deve ser utilizado para
mostrar resultados finais, como nomes dos eixos em gráficos.
> x <- "floresta" # Sempre entre aspas
> class(x)
[1] "character"
> is.character(x) # Confere se o objeto é um da classe character
[1] TRUE
> y <- "Diversidade (Simpson)" # Pode conter espaços ou acentos
> class(y)
[1] "character"
> is.character(y)
[1] TRUE
48. Lógico (logical)
Os dados do tipo logical são usados para as palavras que indicam verdadeiro ou
falso, sendo as palavras TRUE ou T usadas para indicar verdadeiro e as palavras
palavras FALSE ou F para indicar falso.
São escritos com letras maiúsculas sem aspas. São utilizados para indicar opções
onde há apenas duas opções ou como resultado de um teste lógico.
> x <- TRUE # Não precisa estar entre aspas, é uma palavra especial no R
> class(x)
[1] "logical"
> is.logical(x) # Confere se o objeto é um da classe logical
[1] TRUE
> y <- F # Pode ser abreviada
> class(y)
[1] "logical"
> is.logical(y)
[1] TRUE
49. Tipos de estruturas
Cada tipo de dados são organizados em diferentes estruturas.
Cada uma delas apresenta um característica e pertence a uma determinada classe.
A função class confere a classe (tipo) de um objeto.
São elas:
Vetores
Fatores (strings indexadas)
Data Frames
Matrizes
Listas
50. Vetores (vector)
Os vetores (vector) são objetos que armazenam um ou mais elementos, do tipo
numeric , character ou logical .
Os vetores podem ser criados com a função c , que concatena objetos.
Um vetor só suporta um único tipo de dados. (Dados homogêneos)
Os vetores ainda possuem duas características, uma delas é o comprimento que
pode ser encontrado com a função length a segunda dela o nomes de cada
elemento, acessada pela função names .
51. Exemplos
> numeros <- c(2, 5, 6, 78, 2, 233) # A função c contena os números
> class(numeros) # Confere a classe, só pode haver uma classe para todo o vetor
[1] "numeric"
> is.vector(numeros) # Confere se o objeto é um vetor
[1] TRUE
> length(numeros) # Mostra o comprimento do vetor
[1] 6
> names(numeros) # Não há nomes
NULL
> names(numeros) <- c("n1", "n2", "n3", "n4", "n5", "n6") # Atribuir nomes ao vetor numeros
> names(numeros) # Os nomes do vetor
[1] "n1" "n2" "n3" "n4" "n5" "n6"
> letras <- c("a", "b", "c", "d", "e", "f") # Classe character
> class(letras)
[1] "character"
> logico <- c(F, T) # Classe logical
> logico
[1] FALSE TRUE
class(logico)
[1] "logical"
52. Indexação de vetores
Como um vetor só tem uma dimensão, para acessar um determinado valor do
vetor é preciso fornecendo a posição do elemento no vetor entre colchetes ( [] ).
Podem ser acessados um ou mais valores ao mesmo tempo.
Se fornecer um valor com o sinal de menos na frente (-), todos os valores serão
selecionados, exceto a posição em questão.
Ainda, nos vetores com nomes é possível fazer a indexação usando o nome do
elemento ou dados lógicos.
53. Indexação de vetores
> numeros[2] # Seleciona o segundo valor do vetor
n2
5
> numeros[c(3, 6, 1)] # Seleciona o terceiro, sexto e primeiro valor do vetor
n3 n6 n1
6 233 2
> numeros[1:3] # Seleciona os primeiros três valores do vetor
n1 n2 n3
2 5 6
> numeros[12] # Índice fora dos limites, retorna um NA
<NA>
NA
> numeros[-3] # Seleciona tudo, exceto o terceiro valor
n1 n2 n4 n5 n6
2 5 78 2 233
> numeros["n5"] # Seleciona o elemento com nome n5, no caso o quinto elemento
n5
2
> numeros[c(TRUE, FALSE, F, F, F, T)] # Seleciona o elemento o primeiro e último elemento
n1 n6
2 233
> numeros[1] <- 12 # muda o valor do item 1 vetor numeros
54. Fatores (factor) - Dados categóricos
A classe factor serve para designar categorias para um vetor.
Essa classe é semelhante a um vetor da classe character , mas tem importância
maior nas análises estatísticas já que designam um número finito (predefinido) de
categorias.
Tanto números quanto caracteres podem ser convertidos em fatores usando a
função factor .
Esses fatores podem não serem ordenados representado apenas diferentes
categorias ou podem representar categorias ordenadas.
A função ordered gera fatores ordenados, ou seja que as categorias tem
diferentes níveis que são maiores uns que os outros.
55. > fator1 <- factor(c("Co", "Co", "Co", "Tr", "Tr", "Tr")) # Fator a partir de caracteres
> fator1
[1] Co Co Co Tr Tr Tr
Levels: Co Tr
> class(fator1)
[1] "factor"
> is.factor(fator1) # Confere se o objeto é um da classe factor
[1] TRUE
> levels(fator1) # Confere as categorias do fator
[1] "Co" "Tr"
> nlevels(fator1) # Confere o número de categorias do fator
[1] 2
> is.ordered(fator1) # Confere se o fator é ordenado ou não
[1] FALSE
> fator2 <- ordered(c(1, 1, 2, 2, 3, 3), levels = c(3, 2, 1)) # Cria um fator ordenado
> fator2 # Note que a um símbolo de < para indicar a ordem
[1] 1 1 2 2 3 3
> Levels: 3 < 2 < 1
levels(fator2) # Confere as categorias do fator
[1] "3" "2" "1"
> is.ordered(fator2) # Confere se o fator é ordenado ou não
[1] TRUE
> fator2 <- ordered(fator2, levels = c(2, 1, 3)) # É possível alterar a ordem dos níveis
> fator2
[1] 1 1 2 2 3 3
Levels: 2 < 1 < 3
56. Indexação de fatores
A indexação dos fatores funciona exatamente da mesma maneira que os vetores.
Ou seja usando o índice entre colchetes []
> fator1[2]
[1] Co
Levels: Co Tr
57. Tabelas de dados (data.frame)
Tabelas de dados podem ser organizadas em data.frames usando a função
data.frame .
Os data.frame s são tabelas que armazenam um ou mais vetores de dados.
Por essas características eles possuem duas dimensões, linhas e colunas.
Cada coluna, será um vetor, podendo portando armazenar vetores de diferentes
tipos (numeric, character ou logical), entretanto o comprimento de todos vetores
de um data.frame deve ser igual.
58. Tabelas de dados ( data.frame )
Os data.frames possuem duas dimensões que podem ser encontradas com a
função dim , nrow e ncol .
Os nomes das linhas e colunas podem ser acessada pelas função rownames e
colnames respectivamente.
As funções str, head e tail mostram parte do data.frame para que sejá possível
conferir os dados sem a nescessidade de visualizar a tabela completa.
59. Data Frames
> numeros <- c(2, 5, 6, 78, 2, 233)
> letras <- c("a", "b", "c", "d", "e", "f")
> names(numeros) <- c("n1", "n2", "n3", "n4", "n5", "n6")
dados <- data.frame(valores = numeros, letras, categorias = y)
# Combinar vetores em um data.frame. Sempre por colunas
> dados
valores letras categorias
n1 2 a TRUE
n2 5 b TRUE
n3 6 c TRUE
n4 78 d TRUE
n5 2 e TRUE
n6 233 f TRUE
61. Data frames
O objeto mais importante para o cientista de dados é, claro, a base de dados. No
R, uma base de dados é representa por objetos chamados de data frames
Eles são equivalentes a uma tabela do SQL ou uma planilha do Excel. A principal
característica de um data frame é possuir linhas e colunas:
mtcars
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
62. mtcars
O mtcars é um data frame nativo do R que contém informações sobre diversos
modelos de carros. Ele possui 32 linhas e 11 colunas (só estamos vendo as
primeiras 10 linhas no slide anterior).
A primeira "coluna" representa apenas o nome das linhas (modelo do carro), não é
uma coluna da base. Repare que ela não possui um nome, como as outras. Essa
estrutura de nome de linha é própria de data frames no R. Se exportássemos essa
base para o Excel, por exemplo, essa coluna não apareceria.
Se você quiser saber mais sobre o mtcars , veja a documentação dele rodando ?
mtcars no Console.
63. Pertence
Um outro operador muito útil é o %in% . Com ele, podemos verificar se um valor está
dentro de um conjunto de valores (vetor).
3 %in% c(1, 2, 3)
## [1] TRUE
"a" %in% c("b", "c")
## [1] FALSE
64. Filtros
Os testes lógicos fazem parte de uma operação muito comum na manipulação de
base de dados: os filtros.
No Excel, por exemplo, quando você filtra uma planilha, o que está sendo feito por
trás é um teste lógico.
Falamos anteriormente que cada coluna das nossas bases de dados será
representada dentro do R como um vetor.
O comportamento que explica a importância dos testes lógicos na hora de filtrar
uma base está ilustrado abaixo:
minha_coluna <- c(1, 3, 0, 10, -1, 5, 20)
minha_coluna > 3
## [1] FALSE FALSE FALSE TRUE FALSE TRUE TRUE
minha_coluna[minha_coluna > 3]
## [1] 10 5 20
65. Mais sobre data frames
Chegou a hora de usarmos tudo o que aprendemos na seção anterior para exploramos
ao máximo o nosso objeto favorito: o data frame.
Para isso, continuaremos a usar o mtcars .
mtcars
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
66. Acessando as colunas
Lembrando que cada coluna de um data frame é um vetor, podemos usar o operador
$ para acessar cada uma de suas colunas.
mtcars$mpg
## [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2
## [15] 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4
## [29] 15.8 19.7 15.0 21.4
mtcars$cyl
## [1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
mtcars$wt
## [1] 2.620 2.875 2.320 3.215 3.440 3.460 3.570 3.190 3.150 3.440 3.440
## [12] 4.070 3.730 3.780 5.250 5.424 5.345 2.200 1.615 1.835 2.465 3.520
## [23] 3.435 3.840 3.845 1.935 2.140 1.513 3.170 2.770 3.570 2.780
67. Dimensões
A classe data frame possui uma característica especial: seus objetos possuem duas
dimensões.
class(mtcars)
## [1] "data.frame"
dim(mtcars)
## [1] 32 11
O resultado do código dim(mtcars) nos diz que a primeira dimensão tem
comprimento 32 e a segunda dimensão tem comprimento 11. Em outras palavras:
a base mtcars tem 32 linhas e 11 colunas.
68. Subsetting
Ter duas dimensões significa que devemos usar dois índices para acessar os valores
de um data frame (fazer subsetting).
Para isso, ainda usamos o colchete, mas agora com dois argumentos: [linha,
coluna].
mtcars[2, 3]
## [1] 160
O código acima está nos devolvendo o valor presente na segunda linha da terceira
coluna da base mtcars .
69. Também podemos pegar todos as linhas de uma coluna ou todas as colunas de
uma linha deixando um dos argumentos vazio:
# Todas as linhas da coluna 1
mtcars[,1]
## [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2
## [15] 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4
## [29] 15.8 19.7 15.0 21.4
# Todas as colunas da linha 1
mtcars[1,]
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21 6 160 110 3.9 2.62 16.46 0 1 4 4
73. O código mtcars$cyl == 4 nos diz em quais linhas estão os carros com 4 cilindros.
Quando usamos o vetor de TRUE e FALSE resultante dentro do subsetting das linhas
em mtcars[mtcars$cyl == 4, ] , o R nos devolve todos as colunas dos carros com 4
cilindros. A regra é a seguinte: linha com TRUE é retornada, linha com FALSE não.
Outro exemplo:
mtcars[mtcars$mpg > 25, ]
## mpg cyl disp hp drat wt qsec vs am gear carb
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
74. Vocabulário
A seguir, apresentamos algumas funções nativas do R úteis para trabalhar com data
frames :
head() - Mostra as primeiras 6 linhas.
tail() - Mostra as últimas 6 linhas.
dim() - Número de linhas e de colunas.
names() - Os nomes das colunas (variáveis).
str() - Estrutura do data frame. Mostra, entre outras coisas, as classes de cada
coluna.
cbind() - Acopla duas tabelas lado a lado.
rbind() - Empilha duas tabelas.
75. Funções
Funções permitem automatizar tarefas comuns de forma mais poderosa do que
copiar e colar.
O R possui muitas funções já implementadas.
Pacotes são coleções de funções, dados e documentação que ampliam as
capacidades do R básico. Veremos como instalá-los no final desta atividade!
Você pode desenvolver suas próprias funções!
76. Exemplo de funções básicas do R
# Combinar elementos - Função c()
ano_nascimento_irmaos <- c(1993, 1998, 2001, 2012, 2012)
# Podemos fazer operações com o resultado
idade_irmaos <- 2020 - ano_nascimento_irmaos
idade_irmaos
## [1] 27 22 19 8 8
# Calculando a média - Função mean()
media_idade_irmaos <- mean(idade_irmaos)
media_idade_irmaos
## [1] 16.8
77. Estrutura de uma função
Nome - é como ela fica salva no ambiente, esse nome é importante para usarmos
a função.
Argumentos - são parâmetros usados internamente pela função. Muitas funções
possuem argumentos com valores padrão.
Corpo - o código que será executado. O resultado dependerá dos argumentos
oferecidos.
# para criar uma funcao
nome_da_funcao <- function(argumentos){
corpo da função
}
# para usar essa função
nome_da_funcao(argumentos = ...)
78. Um exemplo:
Vamos criar uma função que soma dois números.
minha_soma <- function(x, y) {
soma <- x + y soma # resultado retornado
}
Essa função tem os seguintes componentes:
minha_soma : nome da função
x e y : argumentos da função
soma <- x + y : operação que a função executa
soma : valor retornado pela função
79. Então...
Após rodarmos o código de criar a função, podemos utilizá-la como qualquer
outra função do R.
minha_soma(2, 2)
## [1] 4
O objeto soma só existe dentro da função, isto é, além de ele não ser colocado no
seu environment, ele só existirá na memória (RAM) enquanto o R estiver
executando a função.
Depois disso, ele será apagado. O mesmo vale para os argumentos x e y .
80. Valor retornado
O valor retornado pela função representa o resultado que receberemos ao utilizá-
la.
Por padrão, a função retornará sempre a última linha de código que existir
dentro dela.
No nosso exemplo, a função retorna o valor contido no objeto soma , pois é isso
que fazemos na última linha de código da função.
Repare que se atribuirmos o resultado a um objeto, ele não será mostrado no
console:
resultado <- minha_soma(3, 3)
# Para ver o resultado, rodamos o objeto `resultado`
resultado
## [1] 6
81. Funções importantes do R base
Função O que retorna?
sum() Soma
mean() Média
median() Mediana
var() Variância (simples)
sd() Desvio Padrão
max() Valor máximo
min() Valor mínimo
round() Valor arredondado
82. O Tidyverse
É uma coleção de pacotes R projetados para a ciência de dados. Todos os pacotes
compartilham uma mesma filosofia de desenvolvimento, sintaxe e estruturas de
dados. https://www.tidyverse.org/
library(tidyverse)
83. Pacotes do Tidyverse
ggplot2: cria gráficos
dplyr: manipulação de dados
tidyr: arrumar os dados
readr: leitura dos dados
purrr: ferramentas para programação funcional, trabalha com funções e vetores
tibble: dataframes modernos, mais simples de manipular
magrittr: facilita a escrita e leitura do código
stringr: trabalha com strings
85. Importar arquivos:
Via código (próximo slide), ou via "Import Dataset"
RStudio -> Environment -> Import Dataset
From Excel -> arquivos xls
From text (readr) -> csv
File/URL - Colocar o link da tabela (se estiver online), ou colocar o caminho da
tabela no seu projeto
Update - Se selecionar URL, após colar a URL clique em UPDATE. O R irá
procurar essa tabela, e caso encontre, apresentará uma "amostra" da sua
tabela.
SEMPRE copie o Code Preview, e guarde no seu código para que você tenha
o registro das etapas realizadas (lembre-se da reprodutibilidade).
87. Estatística descritiva
mean(ex1) # Média
[1] 18.2645
median(ex1) # Mediana
[1] 6.4935
var(ex1) # Variância
[1] 453.58
sd(ex1) # Desvio padrão
[1] 21.29742
cor(ex1, ex3) # Correlação entre ex1 e ex3
[1] -0.415766
cor(ex1, ex3, method = "spearman") # Correlação entre ex1 e ex3 usando Spearman
[1] -0.8857143
cov(ex1, ex3) # Covariação entre ex1 e ex3
[1] -697.0587
88. Gerar números e sequências
1:10 # Sequência de 1 a 10
> [1] 1 2 3 4 5 6 7 8 9 10
-9:1 # Sequência de -9 a 1
> [1] -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1
seq(from = 1, to = 10, by = 2) # Sequência regular de 1 a 10 por 2
> [1] 1 3 5 7 9
seq(from = 1, to = 3, length.out = 8) # Sequência regular de 1 a 3, com 8 valores
> [1] 1.000000 1.285714 1.571429 1.857143 2.142857 2.428571 2.714286 3.000000
seq_len(12) # Sequência de inteiros de 1 a 12
> [1] 1 2 3 4 5 6 7 8 9 10 11 12
paste("A", 1:6, sep = ".") # Sequência regular de caracteres
> [1] "A.1" "A.2" "A.3" "A.4" "A.5" "A.6"
rep(3, 6) # Repetir o valor 3 por 6 vezes
> [1] 3 3 3 3 3 3
rep(1:4, 3) # Repetir a sequência 1 a 4 por 3 vezes
> [1] 1 2 3 4 1 2 3 4 1 2 3 4
rep(1:4, each = 3) # Repetir os valores 1 a 4 por 3 vezes cada
> [1] 1 1 1 2 2 2 3 3 3 4 4 4
89. Gerar dados aleatórios e amostragem
runif(5, min = 0, max = 10) # Gerar distribuição uniforme, entre 0 e 10...
> [1] 6.742459 8.103175 3.738857 1.388355 3.277760
runif(5, min = 0, max = 10) # ... Note que é diferente a cara execução
> [1] 7.8895152 3.0344302 1.6837370 4.8089219 0.5780624
rnorm(5, mean = 0, sd = 1) # Gerar distribução normal com média 0 e variância 1
> [1] -0.57249929 -1.73642564 0.59179279 -1.28624999 0.05649468
rpois(5, lambda = 1) # Gerar distribuição de Poisson, com lambda 1
> [1] 3 1 1 1 0
sample(1:10, size = 4) # Amostrar 4 valores da sequência de 1 a 10 sem reposição...
> [1] 7 6 5 9
sample(1:10, size = 4, replace = TRUE) # ... Amostrar com reposição
> [1] 10 6 10 1
moeda <- c("cara","coroa") # Vetor com resultados de uma moeda
moeda
> [1] "cara" "coroa"
sample(moeda, size = 1) # Amostrar um resultado
> [1] "coroa"
sample(moeda, size = 3, replace = TRUE) # Amostrar 3 vezes, replace deve ser verdadeiro
> [1] "coroa" "cara" "cara"
90. Para conhecer mais sobre estatística em R
Siga os links:
https://vanderleidebastiani.github.io/tutoriais/Estatistica_Basica_em_R.html
https://docs.ufpr.br/~aanjos/CE002A/estdescritiva.pdf
https://rpubs.com/EstatBasica
http://www.estatisticacomr.uff.br/wp-
content/uploads/2018/10/ap_mci2010.pdf
http://www.uft.edu.br/engambiental/prof/catalunha/arquivos/r/r_bruno.pdf
91. O pacote readr
O pacote {readr} do tidyverse é utilizado para importar arquivos de texto,
como .txt ou .csv , para o R.
library(readr)
O {readr} transforma arquivos de textos em tibbles usando as funções:
read_csv() , read_tsv() , read_delim() , read_table() ou read_log()
92. Algumas funções do pacote:
read_csv() : para arquivos separados por vírgula.
read_tsv() : para arquivos separados por tabulação.
read_delim() : para arquivos separados por um delimitador genérico. O
argumento delim= indica qual caractere separa cada coluna no arquivo de texto.
read_table() : para arquivos de texto tabular com colunas separadas por espaço.
read_fwf() : para arquivos compactos que devem ter a largura de cada coluna
especificada.
read_log() : para arquivos padrões de log.
Tibbles são data frames com ajustes que as deixam mais amigáveis a nós cientistas
de dados. Elas são parte do pacote {tibble}. Assim, para começar a usá-las, instale
e carregue o pacote.
install.packages("tibble")
library(tibble)
93. Lendo arquivos de texto
Como exemplo, utilizaremos uma base de filmes do IMDB, gravada em diversos
formatos. O download dos arquivos pode ser realizado clicando aqui.
Primeiro, vamos ler a base em formato .csv .
imdb_csv <- read_csv(file = "imdb.csv")
## Rows: 11340 Columns: 20
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (11): id_filme, titulo, data_lancamento, generos, pais, idioma, direcao,...
## dbl (9): ano, duracao, orcamento, receita, receita_eua, nota_imdb, num_aval...
##
## Use `spec()` to retrieve the full column specification for this data.
## Specify the column types or set `show_col_types = FALSE` to quiet this message.
94. Quando vírgulas separam casas decimais
No Brasil, as vírgulas são utilizadas para separar as casas decimais dos números,
inviabilizando o uso de arquivos .csv . Nesses casos os arquivos .csv passam a
ser separados por ponto-e-vírgula.
Para importar bases de arquivos separados por ponto-e-vírgula no R, basta usar a
função read_csv2() .
imdb_csv2 <- read_csv2("dados/imdb2.csv")
95. Lendo arquivos txt
Arquivos .txt em geral podem ser lidos com a função read_delim() .
Além do caminho até o arquivo, você também precisa indicar qual é o caractere
utilizado para separar as colunas da base.
Um arquivo separado por tabulação, por exemplo, pode ser lido utilizando a o
código abaixo.
O código t é uma forma textual de representar a tecla TAB.
imdb_txt <- read_delim("dados/imdb.txt", delim = "t")
96. Escrevendo arquivos de texto
Para a maioria das funções read_ , existe uma respectiva função write_ .
Essas funções servem para salvar bases em um formato específico de arquivo.
Além do caminho/nome do arquivo a ser criado, você também precisa passar o
objeto que será escrito.
Para o arquivo criado funcionar corretamente, você precisa especificar a extensão
correta no nome do arquivo.
# Arquivo .csv
write_csv(x = mtcars, path = "data/mtcars.csv")
# Base separada por tabulação
write_delim(x = mtcars, path = "data/mtcars.txt", delim = "t")
97. Gráficos
Para construir um gráfico usa-se função genérica plot .
A função plot é uma função que produz gráficos de maneira automática
dependendo do tipo de informação e classe do objeto passado para ela.
Quando apropriado, os eixos, nomes dos eixos e títulos são gerados
automaticamente (a menos se especificado o contrário).
Ainda existem várias funções auxiliares para adicionar elementos ao gráfico.
98. Função plot()
Dados
Dados anscombe é um conjunto de dados didáticos para uso em regressões
lineares. O conjunto é formado por 4 pares de variávis independente e
dependente totalizando 11 observações
> data(anscombe)
> dados <- anscombe
> str(dados)
'data.frame': 11 obs. of 8 variables:
$ x1: num 10 8 13 9 11 14 6 4 12 7 ...
$ x2: num 10 8 13 9 11 14 6 4 12 7 ...
$ x3: num 10 8 13 9 11 14 6 4 12 7 ...
$ x4: num 8 8 8 8 8 8 8 19 8 8 ...
$ y1: num 8.04 6.95 7.58 8.81 8.33 ...
$ y2: num 9.14 8.14 8.74 8.77 9.26 8.1 6.13 3.1 9.13 7.26 ...
$ y3: num 7.46 6.77 12.74 7.11 7.81 ...
$ y4: num 6.58 5.76 7.71 8.84 8.47 7.04 5.25 12.5 5.56 7.91 ...
99. Gráfico de pontos
Se x e y são dois vetores do tipo numeric o gráfico resultante é de pontos, sendo
mostrado x as coordenadas dos pontos no eixo horizontal e y as coordenadas do
eixo vertical.
> plot(dados$x1, dados$y1) # plot(y1 ~ x1, data=dados) produz o mesmo resultado.
100. Gráfico de séries
Se apenas um vetor do tipo numeric é fornecido a função gera uma série com os
dados, seguindo a ordem que os valores estão no vetor.
> plot(dados$x1)
101. Gáficos de barra
Se apenas um vetor do tipo factor é fornecido a função gera um gráfico de barra.
plot(as.factor(dados$x1))
102. Função par()
Os parâmetros gráficos gerais são predefinidos pela função par
Cada parâmetro define uma opção de configuração do gráfico
103. Alterando eixos
Uma das opções mais utilizada na elaboração de gráficos se refere as alterações
dos aspectos relacionados aos eixos.
Argumentos:
xlab e ylab - Alterar nomes dos eixos x e y respectivamente. Podem ser usados
junto com font.lab para alterar o tipo de fonte, col.lab para alterar cor e cex.lab
para alterar o tamanho da fonte.
main - Alterar nomes do título do gráfico. Pode ser usado junto com font.main,
col.main e cex.main, para alterar fonte, cor e tamanho do título respectivamente.
105. Alguns exemplos de tipos de gráficos gerados em R
Para verificar siga os links abaixo (e continue verificando as opções):
https://vanderleidebastiani.github.io/tutoriais/Graficos_com_R.html#Gr%C3%A
1ficos_personalizados
https://livro.curso-r.com/8-graficos.html
106. Exportar resultados
Assim como para importar dados, para exportar há muitas funções para exportar
dados.
Para exportar tabelas completas é possível usar as funções write.table ou write.csv,
basta especificar o objeto com a tabela completa e o nome do arquivo de saída.
O arquivo será salvo no diretório de trabalho do R.
Para exportar os resultados de análises para visualização é melhor usar
o Rmarkdown (um texto básico pode ser encontrado
em https://vanderleidebastiani.github.io/tutoriais e https://livro.curso-r.com/9-
relatorios.html).
> write.table(dados, "dados.txt", sep = " ") # Exportar em .txt
> write.csv(dados, "dados.csv") # Exportar em .csv
107. Comunicando resultados
Sobre detalhes acerca de relatórios e comunicação em R siga os links:
https://livro.curso-r.com/9-relatorios.html
https://beatrizmilz.github.io/IV-SER-RLadies/#1
https://vanderleidebastiani.github.io/tutoriais/Documentacao_de_resultados_u
sando_R_Markdown.html
https://beatrizmilz.github.io/aMostra-IME-2019-Xaringan/#11
https://beatrizmilz.github.io/slidesR/rmarkdown/rmarkdown_packages.html#1
https://r-ladies-sao-paulo.github.io/xaringan/slides.html#6
108. Prática (Estudos de caso)
Para seguir um tutorial de uma análise de dados em R, siga o link:
https://beatrizmilz.github.io/Oficina_intro_R_UFABC_2018/#64
E continue a apresentação até o fim (há mais 2 estudos de caso nesta
apresentação)
109. Onde estudar mais?
Repositório de materias de estudo com R
Curso R
Curso-R - Cursos presenciais sobre R.
Material Curso-R - Material disponibilizado pela Curso-R para estudo.
Blog Curso-R - Blog do Curso-R com diversos conteúdos interessantes.
Datacamp: Introdução ao R/Introduction to R - Conteúdo: introdução, tipos de
dados no R: vetores, matrizes, fatores, data frames, listas.
110. Livros
Hands-On Programming with R - Livro em inglês, disponibilizado gratuitamente
online. Conteúdo: básico do R e RStudio, Pacotes, objetos, tipos de dados, funções,
etc.
R for Data Science - Livro em inglês, disponibilizado gratuitamente online.
Conteúdo muito bom sobre R.
R Cookbook
Ciência de Dados com R - Instituto Brasileiro de Pesquisa e Análise de Dados
Biblioteca do R-Project, livros em diversas línguas: https://www.r-
project.org/doc/bib/R-books.html
111. Cheatsheets
Ambiente de desenvolvimento RSTUDIO: Português, Inglês
Importar dados/Data import - Inglês
Visualização de dados - Português
Manipular dados - Português
Data transformation - Inglês
Trabalhar com textos/ String manipulation - Inglês
Comunicar seus resultados - RMarkdown - Inglês
Criar gráficos com Ggplot2 - Inglês
LaTeX - Inglês
Expressões regulares - Inglês
Pode conferir também outras cheatsheets em inglês no site: RStudio Cheatsheets -
RStudio