Você está na página 1de 186

Curso de programação R e análise de dados

O que o R pode fazer para você?


Sobre o R
 A linguagem R foi criada por Ross Ihaka e Robert Gentleman na Universidade de
Auckland, Nova Zelândia.
 O nome “R” esta baseado na letra inicial dos dois primeiros autores e faz uma referência
indireta à linguagem S da Bell Labs, versão comercial similar ao R.
 O código fonte para o ambiente de software R está disponível gratuitamente sob a
licença GNU General Public para vários sistemas operacionais (MAC, Windows e Linux).
 Disponibiliza uma ampla variedade de técnicas estatísticas e gráficas, incluindo
modelagem linear e não linear, testes estatísticos clássicos, análise de séries
temporais, classificação e agrupamento.
 É facilmente extensível através de bibliotecas.
 É uma linguagem interpretada
 Atualmente mantido pela Fundação R
2
Por que R?

 De graça!!!
 Tradução da matemática para código é direta
 R é escrito por estatísticos, para estatísticos
 É uma linguagem de programação, o que faz dele um ambiente flexível e versátil
 Atualizado frequentemente e com grande gama de funções analíticas
 Comunidade ativa e crescente
 Colaboração entre a Fundação R, RStudio, Microsoft, TIBCO, Google, Oracle, HP e
outros. Patrocínio para financiar e inspirar ideias que permitirão que o R se torne uma
plataforma ainda melhor para a ciência, a pesquisa e a indústria.

3
Quando não usar R?
 Vai fazer uma análise rápida e “suja” incluindo visualizações rápidas? - Excel
 Análise única de poucos dados (única mesmo) - Excel
 Desempenho crítico – Fortran, C, Julia

Desvantagens do R?
 É uma linguagem de programação
 Não é visual
 Você não consegue ter ideia imediata de tudo que acontece
 Não é user friendly

4
Ambiente R
https://www.r-project.org/

5
RStudio
https://www.rstudio.com/

6
Instalando R e RStudio

7
Criando um projeto R

8
Criando um projeto R

9
Criando um projeto R

10
Instalando Bibliotecas
Uma das grandes vantagens do R é a possibilidade de instalar bibliotecas. Existem
uma infinidade delas para cada tipo de problema.

Existem três principais maneiras de instalar bibliotecas:

Via CRAN (Comprehensive R Archive Network) e terminal:


install.packages("nome-do-pacote").

Via Github: devtools::install_github("nome-do-repo/nome-do-pacote")

Via CRAN e RStudio:

11
Instalando Bibliotecas
Exemplo

install.packages("magrittr")

Depois de instalar basta chamar a biblioteca toda a vez que for utilizar

library(magrittr)

12
R como calculadora

Operador Descrição
x + y Adição de x com y
x - y Subtração de y em x
x * y Multiplicação de x e y
x / y Divisão de x por y
x^y ou x**y x elevado a y-ésima potência
x%%y Resto da divisão de x por y (módulo)
x%/%y Parte inteira da divisão de x por y

13
Operadores lógicos
Operadores lógicos retornarão sempre TRUE ou FALSE. Eles definem perguntas que aceitam
apenas verdadeiro e falso como resposta.
Operador Descrição
x < y x menor que y?
x <= y x menor ou igual a y?
x > y x maior que y?
x >= y x maior ou igual a y?
x == y x igual a y?
x != y x diferente de y?
!x Negativa de x
x & y x e y são verdadeiros?
x | y x ou y são verdadeiros?
14
xor(x, y) x ou y são exclusivamente verdadeiros?
Operadores lógicos - Exemplos
Teste Resposta
1 < 1 FALSE
1 <= 1 TRUE
1 == 0.999 FALSE
13.5 != 13.5 FALSE
!TRUE FALSE
TRUE & FALSE FALSE
TRUE & TRUE TRUE
xor(TRUE, FALSE) TRUE
TRUE == 1 TRUE
TRUE == 2 FALSE
FALSE == 0 TRUE
15
Números complexos
O R manipula números complexo de maneira fácil e intuitiva do mesmo jeito que trata os
números reais.

Função Descrição
Re(z) Parte real de z
Im(z) Parte imaginária de z
Mod(z) Módulo de z
Arg(z) Argumento de z
Conj(z) Complexo conjugado de z
16
Valores especiais

Certas operações matemáticas podem suscitar em valores não numéricos. Exemplo disso
são log de números negativos e divisões por zero. Para tais operações, o R reservou valores
especiais para serem retornadas quando operações não resultarem em um número
propriamente dito.

Valor Ocorrência
Inf/-Inf Divisões por zero, valores da ordem de 10^308
NaN Indeterminações matemáticas, como 0/0 e log(-1)
NA Indeterminado (Not Available), caracteriza observação perdida.

17
Criando uma variável (atribuição)

No R a criação de uma variável, ou atribuição de valor é dada pelo símbolo <-


Exemplo

18
Estruturas de dados no R

Tipos básicos de estrutura no R:

 Atomic vector: homogêneo e unidimensional


 Fator: utilizados para armazernar dados categorizados
 Matriz: homogêneo e bidimensional
 Array: homogêneo e multidimensional
 Lista: heterogêneo
 Data frame: heterogêneo e retangular

19
Atomic vectors
Atomic vectors são a estrutura de objetos mais simples do R. Toda a estrutura base
é um vetor, tendo tamanho 1 ou n.

Tipos de atomic vectors:

 lógico
 inteiro
 duplo
 complexo
 caractere

20
Atomic vectors

Para criar vetores de comprimento maior que 1

21
Coerção
Quando dois tipos de objetos são inseridos uma estrutura homogênea (atomic vectors,
arrays ou matrizes), o R converterá o objeto para o tipo mais flexível, seguindo a
ordem:

 caractere
 complexo
 duplo
 inteiro
 lógico

22
Fatores

Factors são utilizados para armazernar dados categorizados e são caracterizados


por conterem apenas valores pré-definidos, chamados levels; e se basearem num
vetor de inteiros.

Vantagem de guardar vetores de caracteres como inteiros


23
Matrizes
Conjunto homogêneo e bidimensional de dados

24
Matrizes
As funções length(), dim(), nrow(), ncol() são usadas para determinar o
comprimento de cada dimensão de um objeto.

25
Listas
Listas são definidas usando a função list()

26
Data Frames
Data frames são listas em que todos os elementos têm o mesmo comprimento.
São definidos usando a função data.frame()

Em um data frame, os caracteres são convertidos em factors. Se essa conversão é indesejável, use o argumento
27
stringAsFactors = F
Data Frames
Se usarmos a função names() obtemos o nome das colunas do data frame.
Também é possível mudar o nome das colunas para algo útil

28
Combinando data frames
É possível combinar data frames usando as funções rbind() e cbind()

29
Subconjuntos
No R existem três tipos principais de operação de subconjuntos:
a) Números inteiros positivos: Retornam os elementos do vetor associados aos
índices especificados.

30
Subconjuntos
b) Números inteiros negativos. Para excluir os valores indicados

31
Subconjuntos
c) Vetores lógicos. Idealmente usados para filtras valores específicos cujas
posições não são conhecidas

32
Funções Nativas Básicas
Funções são códigos encapsulados (escritos geralmente fora da rotina principal)
que realizam uma ação qualquer. Podem ser chamadas à qualquer hora e quantas
vezes forem necessárias. Podem receber, ou não, parâmetros/argumentos, assim
como, podem ou não retornar valor.

Considerei 3 grupos de funções básicas:


 Numéricas
 Manipulação de Caracteres
 Operações Matemáticas

33
Funções Numéricas
Funções básicas como arredondamento, valor absoluto, etc.

Função Descrição
abs(x) valor absoluto
ceiling(x) arredondamento para o inteiro superior
floor(x) arredondamento para o inteiro inferior
trunc(x) trunca valor na parte inteira
round(x, digits=n) arredondamento pelo número de decimais passados
sign(x) retorna 1 para positivo, -1 para negativo e 0 para 0

34
Funções Numéricas
Exemplos

35
Funções de Manipulação de Caracteres 1/2

Função Descrição
substr(x, start=n1, stop=n2) Extrai ou altera uma sequência de caracteres

grep(pattern, x , Procura padrão definido em x, retornando a


ignore.case = FALSE, localização vetorial. Fixed TRUE define
fixed = FALSE) “palavra”, ou expressão regular (FALSE)
sub(pattern, replacement, x, Encontra o padrão em x e troca pelo texto
ignore.case = FALSE, definido
fixed = FALSE)
strsplit(x, split) Abre o caractere x em um vetor de acordo
com o separador split

36
Expressão regular: http://regexlib.com/CheatSheet.aspx?AspxAutoDetectCookieSupport=1
Funções de Manipulação de Caracteres 1/2
Exemplos

37
Funções de Manipulação de Caracteres 2/2

Função Descrição
paste(..., sep = "") Concatena caracteres usando o sep como separador entre eles

paste0(...) Concatena caracteres sem separador

toupper(x) Transforma em maiúsculas

tolower(x) Transforma em minúsculas

38
Funções de Manipulação de Caracteres 2/2
Exemplos

39
Funções de Operações Matemáticas 1/2

Função Descrição
sqrt(x) raiz quadrada
log(x) logaritmo natural
log10(x) logaritmo na base 10
exp(x) e^x
sin(x) seno de x
cos(x) cosseno de x
tan(x) tangente de x
sum(x, na.rm = T) soma dos valores em x
min(x, na.rm = T) menor valor em x
max(x, na.rm = T) maior valor em x
40
na.rm = T, parâmetro para desconsiderar NA dentro da estrutura de dados
Funções de Operações Matemáticas 1/2
Exemplos

41
Funções de Operações Matemáticas 2/2

Função Descrição
mean(x, trim=0, na.rm = T) Média de x. trim remove algum percentual de
valores altos e baixos
cumsum(x) Soma acumulada dos valores de x

diff(x, lag=1) Diferença entre valores de x, utilizando o lag como


referência para diferenças
range(x, na.rm = T) Encontra o máximo e mínimo de x

42
Funções de Operações Matemáticas 2/2
Exemplos

43
O operador pipe %>% (magrittr)
O operador %>% (pipe) foi uma das grandes revoluções do R, tornando a leitura de
códigos mais lógica, fácil e compreensível. Foi introduzido por Stefan Milton Bache no
pacote magrittr.

A ideia do pipe é bem simples, usar o valor resultante da expressão do lado esquerdo
como primeiro argumento da função do lado direito.

44
O operador pipe %>% (magrittr)

O exemplo ilustra um caso em que há um grande número de funções aninhadas.


A utilização do pipe transforma um código confuso e difícil em algo simples e intuitivo.

45
Funções de Estatística e Probabilidade 1/3

Função Descrição
sd(x, na.rm = T) Retorna o desvio padrão de uma amostra

median(x, na.rm = T) Retorna a mediana de uma amostra

quantile(x, probs, na.rm = T) Retorna o quantil definido para uma amotra

fivenum(x, na.rm = TRUE) Retorna os cinco valores de Tukey (mínimo, 1º quartil,


mediana, 3º quartil e máximo) de uma amostra
cor(x, y = NULL, Correlação linear entre x e y
use = "everything",
method = "pearson")
46
Funções de Estatística e Probabilidade 1/3
Exemplos

47
Funções de Estatística e Probabilidade 1/3
Correlação
Coeficientes de correlação variam entre -1 e 1
Sinal significa direção da correlação
Magnitude significa grau da correlação

48
Funções de Estatística e Probabilidade 1/3
Correlação: Outlier

49
Funções de Estatística e Probabilidade 1/3
Correlação Espúria

50
Funções de Estatística e Probabilidade 2/3
Função Descrição
dnorm(x, mean = 0, sd = 1, Função de densidade de probabilidade Normal
log = FALSE) com quantis x, média e desvio padrão definidos; log,
log.p definem se as probabilidade de p são em log(p)
pnorm(q, mean = 0, sd = 1) Função de distribuição acumulada da Normal com
quantis q, média e desvio padrão

qnorm(p, mean = 0, sd = 1) Quantil Normal – valor de quantil para o percentil p


de uma distribuição normal

rnorm(n, mean = 0, sd = 1) Gera amostra de tamanho n a partir de uma Normal


com média e desvio padrão definidos

51
Funções de Estatística e Probabilidade 2/3
Exemplos

52
Funções de Estatística e Probabilidade 3/3
No lugar de norm em dnorm, pnorm, qnorm e rnorm pode-se trocar por outra
distribuição de probabilidade. Algumas das possibilidades:

Distribuição Apelido
Normal norm
Uniforme unif
Beta beta
Chi Quadrado chisq
Exponencial exp
F de Snedecor f
Gama gamma
Poisson pois 53
Funções de Estatística e Probabilidade 3/3
Exemplos

54
Teste de Normalidade Shapiro-Wilk
Testa-se a hipótese nula de que a variável x adere à Distribuição Normal.
Função: shapiro.test(x)
Argumentos:
x um vetor numérico de valores de dados. Valores ausentes são permitidos, mas o
número de valores não ausentes deve estar entre 3 e 5000.
Saídas:
Uma lista com a classe "htest" contendo os seguintes componentes:
statistic valor da estatística de Shapiro-Wilk.
p.value valor p aproximado para o teste. É considerado adequado > 0,05 para
rejeitar a hipótese nula com nível de significância de 5%
method cadeia de caracteres "Shapiro-Wilk normality test".
55
data.name cadeia de caracteres fornecendo o (s) nome (s) dos dados.
“... É uma prática comum julgar um resultado significativo se
for produzido ao acaso com uma frequência de uma em vinte
tentativas. Este é um nível de significância arbitrário, mas
conveniente... O teste de significância só lhe diz o que
ignorar, ou seja, todos os experimentos nos quais resultados
significativos não são obtidos”.

Fisher, Ronald (1929). Proceedings of the Society for Psychical Research, 39: 189-192.

Ronald Fisher

“O valor para o qual P = 0,05, ou 1 em 20 ... é conveniente tomar este ponto como um
limite para julgar se um desvio deve ser considerado significativo ou não.”
Fisher, Ronald (1925). Statistical Methods for Research Workers. Edinburgh: Oliver and Boyd. p. 47.
56
Teste de Normalidade Shapiro-Wilk
Exemplos:

57
Teste de Normalidade Shapiro-Wilk
Exemplos:

58
Inferência

59
Inferência: Bootstrap
Bootstrapping é especialmente útil quando há dúvidas
de que os pressupostos da distribuição são válidos e
precisos. É um método não paramétrico que permite
calcular intervalos de confiança e testes de hipóteses.
Geralmente segue os seguintes passos básicos:
P95
• Reamostrar um determinado conjunto de dados
um número especificado de vezes
• Calcular alguma estatística de cada amostra
e seu desvio padrão

55
Inferência

61
Inferência
Bootstrap

P95

62
Funções: Criando a sua
Funções são códigos encapsulados (escritos geralmente fora da rotina principal) que
realizam uma ação qualquer. Abstraem uma rotina para casos mais gerais por meio de
parâmetros.

Estrutura:
nome_da_funcao <- function(<parâmetros>) {
# faz coisas com os parâmetros
return(resultado)
}

# uso da função
nome_da_funcao(param1, param2, ...)

Parâmetros: Funções aceitam quaisquer e quantos parâmetros precisar. Pode-se


colocar nomes que servirão de objetos (número, texto, vetor, lista, etc.) na função. 63
Funções: Criando a sua
Parâmetros: Funções aceitam quaisquer e quantos parâmetros precisar. Pode-se
colocar nomes que servirão de objetos (número, texto, vetor, lista, etc.) na função.

Há 3 tipos de parâmetros: Obrigatórios, opcionais e indiretos

Exemplo parâmetro obrigatório

64
Funções: Criando a sua
Exemplo parâmetro opcional

65
Funções: Criando a sua
Exemplo parâmetro indireto

66
Controle de fluxo (flow controls ou loops) 1/4
if, else e else if

Estrutura:
if(<condição1>) {
# se a condição1 for verdadeira...
# faz coisas
} else if (<condição2>) {
# caso a condição1 seja falsa e a condição2 seja verdadeira
# faz coisas para este caso
} else {
# faz coisas caso todas as condições anteriores falhem
}
As condições devem ser expressões lógicas, ou testes que retornem T ou F. O código entre {}
será executado se a condição for T ou será ignorado se a condição for F. 67
Controle de fluxo (flow controls ou loops) 1/4
if, else e else if

Exemplo:

68
Controle de fluxo (flow controls ou loops) 1/4
if, else e else if

Observações
Além de T e F, o R aceita 1 e 0, respectivamente. Não precisa ser 1 e 0 exatamente, a
regra é:
 número diferente de zero é TRUE e
 número igual a zero é FALSE
character, NA, NaN e list não são interpretáveis como lógicos. Será retornado um erro
caso sejam usados
Caso seja passado um array, vector ou matrix, será utilizado apenas o primeiro
elemento (é melhor evitar usar arrays como condições!). Será enviado um aviso de que
isso ocorreu.
69
else e else if são opcionais.
Controle de fluxo (flow controls ou loops) 2/4
for

Estrutura:
for(iterador in <sequencia>) {
# Fazer algo para cada item da <sequencia>
# pode haver outros fors aqui dentro
}

<sequencia> pode ser qualquer vetor com quaisquer elementos

70
Controle de fluxo (flow controls ou loops) 2/4
for

Exemplo:

71
Controle de fluxo (flow controls ou loops) 2/4
for

Exemplo:

Observação: Apesar de parecer mais “elegante” atribuir diretamente os valores ao


iterador, muitas vezes há necessidade de usar os índices dos valores. Casos típicos
são quando se tem um vetor que faz relação com outro 72
Controle de fluxo (flow controls ou loops) 3/4
Ifelse() - migué if com for

Estrutura:

ifelse(teste, sim, não)

ifelse retorna um valor do mesmo formato da variável em teste, preenchido com os


elementos selecionados de acordo com o teste. Sendo o valor sim para testes
Verdadeiros e o valor não para testes Falsos.

73
Controle de fluxo (flow controls ou loops) 3/4
Ifelse()

Exemplo: limitar os valores máximos do vetor em 10

74
Controle de fluxo (flow controls ou loops) 4/4
while

Estrutura:
while(<condições>) {
# coisas para fazer enquanto as <condições> forem TRUE
}

A estrutura é muito similar ao if. Tem uma condição (teste lógico) ou conjunto de testes
lógicos e a estrutura a ser executada enquanto a condição for TRUE

75
Controle de fluxo (flow controls ou loops) 4/4
while

Exemplo:

76
Vetorização
Vetores no R são cadeias ordenadas de elementos (geralmente números ou palavras).
Tudo no R é um vetor ou uma variação de vetor!

77
Reciclagem
O R alinha vetores, mesmo que não possuam o mesmo tamanho, repetindo o vetor
menor até completar o vetor maior. Esse comportamento é chamado de reciclagem.
É útil para fazer operações elemento por elemento, mas pode ser um tanto confuso.

78
A "família" apply
O R é uma linguagem vetorial e controles de fluxo (loops) podem e devem ser
substituídos por outras formas de cálculo sempre que possível.

Pode-se utilizar as funções da família apply para implementar cálculos de forma mais
eficiente.

Basicamente as funções da família apply são capazes de atribuir outras funções do R


em partes selecionadas de vetores, matrizes, listas, etc.

79
A "família" apply 1/6
Função apply(x, MARGIN, FUN, …)

Retorna os valores obtidos da aplicação de uma função em uma dimensão da matriz.


Argumentos:
x uma matriz ou um array. Qualquer objeto que possua dimensão será
convertido para um desses dois tipos de forma transparente.
MARGIN vetor com as dimensões da matriz para aplicar FUN. E.g. linha 1,
coluna 2, 3a dimensão (array) 3, várias dimensões m:n
FUN função que será utilizada
… parâmetros da função FUN, se houver

Saída:
Retorna a classe mais simples entre vetor, matriz e array dependendo da dimensão do
80
resultado.
A "família" apply 1/6
Função apply(x, MARGIN, FUN, …)

Exemplo

81
A "família" apply 2/6
Função lapply(x, FUN, …)

Retorna uma lista do mesmo tamanho que x, onde cada elemento é o resultado da
aplicação de FUN no elemento correspondente de x.
Argumentos:
x um vetor (atômico ou lista). Outros objetos serão convertidos em lista
FUN função que será utilizada
… parâmetros da função FUN, se houver

Saída:
Retorna uma lista do mesmo tamanho e mesma dimensão (se a função permitir) que x

82
A "família" apply 2/6
Função lapply(x, FUN, …)

Exemplo

83
A "família" apply 3/6
Função sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)

É uma versão user-friendly de lapply, retornando, por padrão, um vetor, uma matriz ou,
se simplificar = "array", um array se for apropriado (simplificação).
Argumentos:
x um vetor (atômico ou lista). Outros objetos serão convertidos em lista
FUN função que será utilizada
… parâmetros da função FUN, se houver
simplify lógica ou cadeia de caracteres; O resultado deve ser simplificado
para um vetor, matriz ou dimensional superior, se possível?
USE.NAMES lógico; se T e se x for caractere, use x como names para o resultado,
a menos que já tenha names

Saída:
84
Retorna um vetor, uma matriz ou uma lista do mesmo tamanho que x
A "família" apply 3/6
Função sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)

Exemplo

85
A "família" apply 4/6
Função tapply(x, INDEX, FUN = NULL, ..., default = NA, simplify = TRUE)

Calcula o resultado de uma FUN sobre dados, para cada um dos níveis de INDEX
Argumentos:
x tipicamente um vetor
INDEX uma lista de um ou mais fatores, cada um com o mesmo comprimento
de x. Os elementos são convertidos automaticamente em fatores.
FUN função que será utilizada
… parâmetros da função FUN, se houver
default (apenas no caso de simplificação para um array) o valor com o qual o
array é iniciado em array (default, dim = ..)
simplify lógica ou cadeia de caracteres; O resultado deve ser simplificado para
um vetor, matriz ou dimensional superior, se possível?
Saída:
86
Retorna tipicamente um array
A "família" apply 4/6
Função tapply(x, INDEX, FUN = NULL, ..., default = NA, simplify = TRUE)

Exemplo

87
A "família" apply 5/6
Função by(data, INDICES, FUN, ..., simplify = TRUE)

Uma implementação da tapply para data frames


Argumentos:
data tipicamente um data frame
INDICES um fator ou uma lista de fatores, cada com comprimento nrow(data)
FUN função que será utilizada
… parâmetros da função FUN, se houver
simplify lógica ou cadeia de caracteres; O resultado deve ser simplificado para
um vetor, matriz ou dimensional superior, se possível?

Saída:
Retorna tipicamente um objeto da clase by, uma lista ou array
88
A "família" apply 5/6
Função by(data, INDICES, FUN, ..., simplify = TRUE)

Exemplo

89
A "família" apply 6/6
Função replicate(n, expr, simplify = "array")

Uma implementação de sapply para avaliação repetida de uma expressão.


Argumentos:
n número de repetições da expr
expr uma expressão que será executada n vezes
FUN função que será utilizada
… parâmetros da função FUN, se houver
simplify cadeia de caracteres; resultado deve ser simplificado para um array?

Saída:
Retorna tipicamente um objeto da array

90
A "família" apply 6/6
Função replicate(n, expr, simplify = "array")

Exemplo

91
Gráficos Básicos
Função plot(x, y, ...)
Função para exibição de gráficos
Estrutura
plot(x, # vetor de pontos de x
y, # vetor de pontos de y
type = "l", # "p" pontos (default), "l" linha, "b" ambos,
# "h" reta vertical, "s" escadas, "n" não plotar
main = "", # título
sub = "", # subtítulo
xlab = "", # nome do rótulo do eixo x
ylab = "", # nome do rótulo do eixo x
col = "black", # cor do gráfico - colours() nome das cores
xlim = c(1,10), # limites do eixo x
ylim = c(min(y), max(y)), # limites do eixo y
94
lwd = 1) # espessura das visualizações
Gráficos Básicos
Função plot(x, y, ...)
Exemplo

95
Gráficos Básicos
Função plot(x, y, ...)
Exemplo 2: Linha

96
Gráficos Básicos
Função plot(x, y, ...)
Exemplo 3: Escada

97
Gráficos Básicos
Função barplot(y, …)

Função para exibição de gráficos de barra


Segue estrutura similar à função plot(). Olhar help(barplot) para mais informações
Exemplo:

98
Gráficos Básicos
Função boxplot(x, ...)

Função para exibição de gráficos tipo box-and-whisker


Segue estrutura similar à função plot(). Olhar help(boxplot) para mais informações
Exemplo:

99
Gráficos Básicos
Função pie(x, …)

Função para exibição de gráficos de torta


Segue estrutura similar à função plot(). Olhar help(pie) para mais informações
Exemplo:

100
Gráficos Básicos
Função hist(x, …)

Função para exibição e criação de histograma


Segue estrutura similar à função plot(). Olhar help(hist) para mais informações
Exemplo:

101
Manipulação de Dados (tidyverse)

Um conceito importante para obtenção de uma base analítica é o data tidying, ou


arrumação de dados. Uma base é considerada tidy se:
• Cada linha da base representa uma observação.

• Cada coluna da base representa uma variável.

• Cada valor tem seu próprio campo

WICKHAM, Hadley . Tidy Data. Journal of Statistical Software, [S.l.], v. 59, Issue 10, p. 1 - 23, sep. 2014. ISSN 1548-7660. Available at: <https://www.jstatsoft.org/v059/i10>. Date 102
accessed: 10 july 2018. doi:http://dx.doi.org/10.18637/jss.v059.i10.
Manipulação de Dados (tidyverse)

Por que tidy?


• Há uma vantagem geral em escolher uma maneira consistente de armazenar dados.
Se você tiver uma estrutura de dados consistente, será mais fácil aprender as
ferramentas que funcionam com ela e usá-las.
• Há uma vantagem em colocar variáveis em colunas pois permite o melhor uso da
natureza vetorizada do R. A maioria das funções R trabalha com vetores de valores.

103
Manipulação de Dados (tidyverse)
Trabalhando com tibbles (tibble)
Uma tibble é um data frame com algumas
melhorias. A classe tibble é herdada da data
frame com três mudanças base:

1. Subconjuntos - “[” sempre retornam uma


tibble e “[[” ou $ sempre retornam um vetor

2. Não há match parcial – Há a necessidade de


utilizar os nomes completos das colunas para
fazer os subconjuntos

3. Exibição – A tibble sempre oferece uma


visualização concisa e adaptada para a tela

104
Manipulação de Dados
Leitura de arquivos do Excel (biblioteca readxl)
Funções read_excel(path, ...), read_xlsx(path, ...) e read_xls(path, ...)
Transferem o conteúdo de uma planilha Excel para um tibble. A read_excel tenta adivinhar o tipo de
excel. O read_xlsx e read_xls são específicos para as versões do excel. Principais argumentos:
path nome do arquivo a ser lido, incluindo o caminho onde ele está
sheet nome da aba do excel onde estão os dados
col_names valor lógico (T ou F), usa os valores da primeira linha como nome das colunas
col_types vetor de caractere que representa a classe de cada coluna. Os formatos são:
"skip", "guess", "logical", "numeric", "date", "text" ou "list".
skip número de linhas que serão ignoradas na leitura
range uma seleção da planilha a ser lida como no excel (ex. "C1:E7"). Usa as funções
cell_rows e cell_cols para definir a seleção por linha ou coluna.
Retorna um tibble
105
Manipulação de Dados
Função read_excel(path, ...)

106
Manipulação de Dados
Função read_xlsx(path, ...)

107
Manipulação de Dados
Função read_xlsx(path, ...)

108
Manipulação de Dados
Escrita de arquivos do Excel (biblioteca writexl)
Função write_xlsx(x, path, ...)
Transferem o conteúdo de um data.frame ou uma lista para uma planilha Excel.

Principais argumentos:
x data.frame ou lista para escrever no Excel. Cada item da lista será uma aba.
path nome do arquivo a ser criado/escrito, incluindo o caminho onde ele está
col_names valor lógico (T ou F), passa o nome das colunas para a primeira linha da tabela
format_headers valor lógico (T ou F), formata col_names como centralizado e negrito

109
Manipulação de Dados
Função write.xlsx2(x, file, ...)

110
Manipulação de Dados (tidyverse)
Leitura de arquivos texto (biblioteca readr)
Funções read_csv(file, ...), read_csv2(file, ...), read_tsv(file, ...) e read_delim(file, ...)
Leitura de arquivos de texto separados por vírgulas (csv), por tabulações (tsv), por “;” (csv2). O csv2
usa a “,” como separador decimal (adaptação EU). Todos são casos especiais do read_delim()
Principais argumentos:
file nome do arquivo a ser lido, incluindo o caminho onde ele está
col_names recebe um valor lógico (T ou F) e indica o uso da primeira linha válida
como nome das colunas.
delim caractere que será usado como separador de coluna.
col_types especifica tipos das colunas através de cols() ou caractere representando todas
as colunas (c,character; i, integer; n,number; d,double; l,logical; D,date). Ex. “idd”
locale controla o local, indicando, por exemplo, o separador de decimal a ser usado.
comment caractere que será usado como comentário. Tudo que estiver nessa linha será
ignorado
111
Retorna um tibble
Manipulação de Dados (tidyverse)
Função read_csv(file, ...)

112
Manipulação de Dados (tidyverse)
Função read_delim(file, ...)

113
Manipulação de Dados (tidyverse)

Biblioteca tidyr
A tidyr é uma gramática de manipulação de dados cujo objetivo é ajudar a criar tidy data

Os principais verbos são:

gather() empilha uma variável em coluna


spread() espalha uma variável nas colunas
separate() transforma uma coluna em várias usando um separador
Na maioria das análises há a necessidade de arrumar os dados. O primeiro passo é
sempre descobrir quais são as variáveis e as observações.
O segundo passo é resolver um dos dois problemas:
• Uma variável pode estar espalhada em várias colunas
114
• Uma observação pode estar espalhada em várias linhas
Manipulação de Dados (tidyverse)
Verbos da tidyr: gather()
O verbo gather() empilha variáveis em colunas.

Exclui a primeira linha da avaliação

115
Manipulação de Dados (tidyverse)
Verbos da tidyr: spread()
O verbo spread() espalha uma variável nas colunas. É o inverso do gather()

116
Manipulação de Dados (tidyverse)
Verbos da tidyr: separate()
O verbo separate() separa uma coluna de caracteres em várias colunas

O verbo inverso é o unite(), que junta duas ou mais colunas 117


Manipulação de Dados (tidyverse)

Biblioteca dplyr
A dplyr é uma gramática de manipulação de dados, fornecendo um conjunto consistente
de “verbos” que ajudam a resolver os desafios mais comuns de manipulação de dados

Os principais verbos são:

select() seleciona colunas


filter() filtra linhas
mutate() cria/modifica colunas
arrange() ordena a base
summarise() resume a base

O dplyr utiliza C e C++ por trás da maioria das funções, tornando o código mais eficiente.
118
Manipulação de Dados (tidyverse)
Verbos da dplyr: select()
O verbo select() seleciona colunas (variáveis). É possível utilizar nomes,
índices, intervalos de variáveis ou utilizar funções para selecionar as variáveis.

Funções úteis:

• starts_with(x) String

• contains(x) String

• matches(x) Exp. Regular

• one_of(x) Vetor

119
Manipulação de Dados (tidyverse)
Verbos da dplyr: select()

120
Manipulação de Dados (tidyverse)
Verbos da dplyr: select()

121
Manipulação de Dados (tidyverse)
Verbos da dplyr: select()

122
Manipulação de Dados (tidyverse)
Verbos da dplyr: distinct()
O verbo distinct() remove duplicatas de acordo com a seleção.

123
Manipulação de Dados (tidyverse)
Verbos da dplyr: filter()
O verbo filter() filtra (seleciona) linhas

Operadores e funções úteis:

• ==, >, >=

• &, |, !, xor()

• %in%

• is.na()

• between(), near()

124
Manipulação de Dados (tidyverse)
Verbos da dplyr: filter()

125
Manipulação de Dados (tidyverse)
Verbos da dplyr: filter()

126
Manipulação de Dados (tidyverse)
Verbos da dplyr: arrange()
O verbo arrange() ordena os dados de acordo com as variáveis desejadas.
A função desc() pode ser utilizada para se obter uma ordem decrescente.

127
Manipulação de Dados (tidyverse)
Verbos da dplyr: arrange()

128
Manipulação de Dados (tidyverse)
Verbos da dplyr: arrange()
Ordenação por múltiplas colunas

129
Manipulação de Dados (tidyverse)
Verbos da dplyr: mutate()
O verbo mutate() cria ou modifica colunas. Novas variáveis devem ter o mesmo
número de linhas da base original (ou terem comprimento 1 para serem repetidas).

Funções úteis:

• lead(), lag() : criação coluna com lag.

• cumsum(), cumprod(), cummin(),


cummax(), cummean()

• min_rank(), dense_rank(), ntile(),


percent_rank(), row_number()

• match()

130
Manipulação de Dados (tidyverse)
Verbos da dplyr: mutate()

131
Manipulação de Dados (tidyverse)
Verbos da dplyr: mutate()

132
Manipulação de Dados (tidyverse)
Verbos da dplyr: mutate()
mutate como join

133
Manipulação de Dados (tidyverse)
Verbos da dplyr: mutate()
mutate como join

134
Manipulação de Dados (tidyverse)
Verbos da dplyr: summarise()
O verbo summarise() aplica uma função às summarise()
variáveis, retornando um vetor de tamanho 1.
Geralmente é utilizado com da função group_by()
para resultados de forma agregada.

Funções úteis:

• n(), n_distinct() : conta valores. group_by()

• sum(), min(), max(), mean(), mad()


summarise()
• nth(), first(), last()

135
Manipulação de Dados (tidyverse)
Verbos da dplyr: summarise()

136
Manipulação de Dados (tidyverse)
Verbos da dplyr: summarise()

137
Manipulação de Dados (tidyverse)
Verbos da dplyr: pull()
O verbo pull() retorna um vetor

138
Manipulação de Dados (tidyverse)

Join (dplyr)
Join é um conceito que vem da área de banco de dados e se caracteriza por operações
que permitem a junção de variáveis (colunas) de duas, ou mais, tabelas. No join é feita
a correspondência entre as observações por suas chaves* gerando uma nova tabela
com as variáveis selecionadas.

*O conceito de chave, em banco de dados, é a definição de uma ou mais colunas que distinguem uma linha
(observação) das demais dentro de uma tabela. A chave determina a unicidade de cada registro dentro de uma tabela. 139
Manipulação de Dados (tidyverse)

inner join (dplyr): inner_join()


O tipo mais simples de join é o inner join. Neste join é feita a combinação colunas
através da chave, retornado observações sempre que haja informação nas duas tabelas

140
Manipulação de Dados (tidyverse)
inner join (dplyr): inner_join(x, y, by = NULL, ...)
Exemplo

141
Manipulação de Dados (tidyverse)

outer join (dplyr): left_join(), right_join() e full_join()


Um outer join mantém observações que aparecem na tabela de referência, ou em
ambas, dependendo do tipo. Eles funcionam adicionando uma observação “virtual”
(NA) a cada coluna de cada tabela quando há alguma chave não correspondida.

142
Manipulação de Dados (tidyverse)
outer join (dplyr): left_join()
Exemplo

143
Manipulação de Dados (tidyverse)
outer join (dplyr): right_join()
Exemplo

144
Manipulação de Dados (tidyverse)
outer join (dplyr): full_join()
Exemplo

145
Manipulação de Dados (tidyverse)

Problemas com chaves duplicadas


Quando se faz um join entre tabelas usando chaves duplicadas poderemos ter
problemas.

146
Manipulação de Dados (tidyverse)
filter join (dplyr): semi_join() e anti_join()
Combinam as observações entre duas tabelas, retornando a primeira tabela
filtrada pela segunda. Existem dois tipos:
semi_join(x,y) anti_join(x,y)

Mantém as observações em x que Descarta as observações em x que


possuem correspondência em y possuem correspondência em y
147
Manipulação de Dados (tidyverse)
filter join (dplyr): semi_join()
Exemplo

148
Manipulação de Dados (tidyverse)
filter join (dplyr): anti_join()
Exemplo

149
Base de Dados (RODBC)
O objetivo da biblioteca RODBC é fornecer uma interface compatível (DBI) para os drivers
de Open Database Connectivity (ODBC). Isso permite uma conexão eficiente e fácil de
configurar para qualquer database management systems (DBMS) com drivers ODBC
disponíveis, incluindo SQL Server, Oracle, MySQL e Access.
O RODBC foi implementado e C++, o que o torna bastante rápido e eficiente.
ODBC funciona configurando uma conexão entre cliente (RODBC) para os DBMSs,
conforme especificado no data source name (DSN).

150
Base de Dados (RODBC)
Criando um DSN
Pesquise e abra “fonte de dados”

151
Base de Dados (RODBC)
Abrindo uma conexão e verificando o banco de dados

Pode-se enviar usuário e senha para abrir uma conexão usando: uid = "user“ e pwd = “****”.

152
Base de Dados (RODBC)
Verificando as colunas de uma tabela

153
Base de Dados (RODBC)
Lendo uma tabela do banco dados

154
Base de Dados (RODBC)
Lendo uma tabela do banco dados (query)

155
Base de Dados (RODBC)
Limpando uma tabela do banco dados e removendo (DROP) uma tabela

156
Base de Dados (RODBC)
Criando uma tabela e escrevendo no banco dados

157
Pode-se incluir novos dados em uma tabela existente com o parâmetro: append = T
Base de Dados (RODBC)
Alterando dados de uma tabela no banco dados

158
Regressão

“Essentially, all models are wrong, but some are useful”

“We have a large reservoir of engineers (and scientists)


with a vast background of engineering know how. They
need to learn statistical methods that can tap into the
knowledge. Statistics used as a catalyst to engineering
creation will, I believe, always result in the fastest and
most economical progress…”

George E. P. Box

159
Regressão
Modelo de regressão linear

Y= 𝛽0 + 𝛽1 𝑋 + 𝜀

𝜀 = 𝑁(0, 𝜎𝜀 )

Geralmente resolvido por mínimos


quadrados

160
Regressão
Função lm(formula, data, ...)
formula: valor esperado ~ var explicativa1 + ... + var explicativan
data: data.frame com dados

𝐶𝑂2𝑝𝑝𝑚 = 𝛽0 + 𝛽1 𝑎𝑛𝑜
161
Regressão
Interpretação dos resultados

162
Regressão
Interpretação dos resultados

Teste t
𝐻0 : 𝛽𝑗 = 𝑏 (𝑐𝑎𝑠𝑜 𝑏 = 0)

𝛽𝑗 − 𝑏
~𝑡(𝑛−𝑝)
𝜎𝛽
𝑗

−2731,25 − 0
~ − 53,41
51,14
𝑡 > 𝑡𝛼,𝑛−𝑝 Valor Crítico
2

α, confiança
n, amostra
p, variáveis
163
Regressão
Interpretação dos resultados

𝑛−1
𝑅2 = 1 − 1 − 𝑅2
𝑛−𝑝
59 − 1
2
𝑅 = 1− 1 − 𝑅2
59 − 2
𝑅2 = 0,9843

n, amostra
p, variáveis

164
Regressão
Interpretação dos resultados

O teste F informa se um
grupo de variáveis, ou até
mesmo um modelo inteiro, é
conjuntamente significativo

165
Regressão
Validando Modelo

166
167
Regressão
Melhorando o Modelo
Regressão
Comparação de Modelos (plotrix)

O diagrama de Taylor é usado para exibir


a qualidade dos resultados dos modelos
em relação aos valores de referência.

Qualifica os modelos em função do


desvio padrão, da correlação e do RMSE.

RMSE

Taylor, K.E. (2001) Summarizing multiple aspects of model performance in a single diagram. Journal of Geophysical Research, 106: 7183-7192 168
Visualização
Gramática de Gráficos (ggplot2)

A gramática nada mais é do que uma


parametrização, onda há a ideia de
construir um gráfico a partir de
múltiplas camadas de dados.

Hadley Wickham (2010) A Layered Grammar of Graphics, Journal of Computational and Graphical Statistics, 19:1, 3-28, DOI: 10.1198/jcgs.2009.07098

169
Visualização
Camada de Dados (ggplot2)

No ggplot2 a primeira camada é dada pela função ggplot(). Ela recebe um data
frame e cria a camada base do gráfico.

170
Visualização
Camada de Estética (ggplot2)

A camada de estética é dada pela função aes(). Ela indica quais valores serão
mapeados e cada eixo. Também se pode atribuir uma propriedade visual aos objetos
em sua trama, como tamanho, a forma ou a cor.

171
Visualização
Camada de Geometria (ggplot2)

A terceira camada é dada pelas funções geom_xxxx(), especificando a forma


geométrica utilizada no mapeamento dos dados.
As camadas são adicionadas usando um “+”

Algumas geometrias:
geom_line() linhas definidas por pares (x,y)
geom_abline() retas definidas por um intercepto e uma inclinação
geom_hline() retas horizontais
geom_bar() barras
geom_histogram() histogramas
geom_boxplot() boxplots
geom_density() densidades
geom_point() pontos 172
Visualização
Camada de Geometria (ggplot2)

173
Visualização
Camada de Geometria e separação visual por aes()(ggplot2)

174
Visualização
Camada de Facet (ggplot2)

A camada facet divide o gráfico em subconjuntos gráficos separados pelo dados


indicado. Para “facetar” um gráfico por uma única variável use facet_wrap().

175
Visualização
Camada de Estatística (ggplot2)

A camada de estatística aplica algumas funções de estatística aos dados e os


apresenta em forma gráfica.

176
Visualização
Camada de Coordenadas (ggplot2)

A camada de coordenadas ajusta os eixos dos gráficos.

177
Visualização
Camada de Tema (ggplot2)

A camada de tema, função theme(), permite controlar a aparência de todos os


componentes que não são dados do gráfico.

https://ggplot2.tidyverse.org/reference/theme.html 178
http://research.stowers.org/mcm/efg/R/Color/Chart/ColorChart.pdf
Visualização
Mapa (ggplot2, brazilmaps)

179
Mapas (raster)

180
Web Scraping
bibliotecas httr, xml2 e rvest

São as bibliotecas mais utilizadas em web scraping. A httr faz requisições web para
obter as informações das páginas de forma relativamente simples. xml2 serve para
estruturar HTML ou XML, tornando possível encontrar tags “<>” e seus atributos. rvest
é escrito sobre as duas anteriores e torna ainda mais fácil o processo de web scraping.

181
http://www.htmlquick.com/reference/tags.html
Web Scraping
GET e POST

São as funções que representam as requisições mais básicas para um servidor


Web. Uma requisição GET envia uma url e recebe como resposta uma página
HTML.

A requisição POST envia uma url para o servidor e também uma lista de dados
preenchidos pelo usuário. Na maioria dos casos, ao submeter um formulário de
um site, fazemos uma requisição POST.

182
Web Scraping
GET

183
Web Scraping
POST

184
Web Scraping
bibliotecas httr, xml2 e rvest

Algumas funções relevantes:

read_html() lê o arquivo HTML de forma estruturada


html_nodes() cria uma lista com os nós identificados por uma busca em
CSS path ou XPath
html_node() caso especial que assume que só será encontrado um nó
html_text() extrai todo o conteúdo de um objeto e retorna um texto
html_table() extrai o conteúdo de uma <table> e transforma em data frame
html_attr() extrai um atributo de uma tag, por exemplo href da tag <a>

185
Web Scraping
Exemplo passo a passo do BIG da ANEEL

186
Web Scraping
Exemplo passo a passo do BIG da ANEEL

187
Web Scraping
Exemplo passo a passo do BIG da ANEEL

188

Você também pode gostar