Introdução à Ciência de Dados no R


Aula 02 - Comandos básicos

Aula 02

Antonio Vinícius Barbosa

18-12-2024


Como o R funciona?

R Básico

A forma mais simples de se utilizar o R é através de operações básicas:

2 + 2
## [1] 4
sqrt(81)
## [1] 9
pi
## [1] 3.141593
print("Olá, mundo!")
## [1] "Olá, mundo!"

Neste caso, o R executa a operação e retorna seu valor na tela.

Operações básicas

# Adicao
23 + 4
## [1] 27

# Subtracao
13 - 5
## [1] 8

# Multiplicao
9 * 7
## [1] 63

# Divisao
10/3
## [1] 3.333333

# Exponeciacao
2^5
## [1] 32

# Raiz quadrada
sqrt(16)
## [1] 4

# Arredondar
round(pi, 2)
## [1] 3.14

# Logaritmo (base e)
log(10)
## [1] 2.302585

# Logaritmo (outras bases)
log(10, 10)
## [1] 1

O símbolo # é utilizado para adicionar comentários ao código.

Salvando valores em objetos

  • Ao executar uma expressão seu valor é gerado, mas não armazenado.
  • Uma atribuição, por outro lado, salva o valor em um objeto (ou variável).
  • É, normalmente, feito através do operador especial <-
  • Além do operador <-, atribuições podem ser feitas através =
# Lados do triângulo 
a <- 3
b <- 4
# Obter o tamanho da hipotenusa
h = sqrt(a^2 + b^2)
h
## [1] 5

Regra de etiqueta 🔖 (1)

Na maior parte do tempo, usuários do R utilizam apenas o operador <- para atribuições, enquanto o símbolo de igualdade (=) é reservado para indicar os argumentos dentro de uma função.

# Ruim :( 
valor = 10
media = mean(x = 1:10)

# Bom :) 
valor <- 10
media <- mean(x = 1:10)

Portanto, para atribuições

Atribuições

Os objetos criados são armazenados na memória e atualizados a cada nova atribuição:

# Massa em kg
massa_kg <- 80
# Altura em m
altura <- 1.83
# Calcular IMC
imc <- massa_kg/(altura^2)
imc
## [1] 23.88844

🚀 Quizz #1

  • Crie a variável renda_dom para armazenar o valor da renda total aproximada do seu domicílio.
  • Agora, atribua à variável n_pessoas o número de pessoas que moram no seu domicílio.
  • Calcule a renda domiciliar per capita e atribua à variável renda_pc.
03:00

Gerenciando objetos

Para listar todos os objetos armazenados na memória, basta utilizar a função ls()

# Criar objetos
p <- pi
e <- exp(1)
r <- sqrt(2)

# Listar objetos
ls()
## [1] "e" "p" "r"

Para excluir ou remover um objeto, utilizamos a função rm()

rm(e)
ls()
## [1] "p" "r"

Pacotes 📦

Pacotes no R

Um pacote é um conjunto de funções que servem para uma dada finalidade. Cada pacote possui uma documentação própria explicando sua funcionalidade e exemplos de uso.

Pacotes no R

Para instalar um pacote específico no R, fazemos:

# Pacotes do repositorio oficial (CRAN)
install.packages("dplyr")
install.packages("remotes")

# Pacotes externos
remotes::install_github("https://github.com/ccolonescu/PoEdata")

Uma vez instalado, não é necessário reinstalar a cada uso. No entanto, para utilizar as funcionalidades de um pacote é necessário carregá-lo sempre que a sessão for iniciada:

library(PoEdata)
library(dplyr)

Mesma função, diferentes pacotes…

Em algumas situações, uma função com o mesmo nome pode estar vinculada a diferentes pacotes. Neste caso, utilizamos o símbolo ::, como em pacote::funcao().

# A função filter() em dois pacotes distintos
dplyr::filter()
stats::filter()

Dessa forma, evitamos confusão quanto ao uso de funções homônimas.

Removendo variáveis e pacotes

A função rm(list = ls()) remove todos os objetos em uso na memória, mas mantém os pacotes carregados. Para limpar todo o ambiente, devemos reiniciar a seção:

  • Seção > Reiniciar Seção
  • Ou através das teclas de atalho Crtl + Shift + F10

Estruturas de dados

Veremos as principais estruturas de dados do R:

  • Vetores
  • Matrizes
  • Data frames
  • Listas

Vetores

Criando vetores

A construção de vetores (conjunto de valores) é feito através do operador c():

# Características dos participantes
idade <- c(19, 21, 23, 24, 25, 31, 33)
idade
## [1] 19 21 23 24 25 31 33

sexo <- c("M", "M", "F", "F", "M", "F", "M")
sexo
## [1] "M" "M" "F" "F" "M" "F" "M"

aluno_econ <- c(TRUE, FALSE, FALSE, TRUE, TRUE, T, F)
aluno_econ
## [1]  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE

cra <- c(8.26, 7.18, 8.02, 7.33, 6.79, 9.45, 7.65)
cra
## [1] 8.26 7.18 8.02 7.33 6.79 9.45 7.65

Classes

Para determinar a classe de um vetor, utilizamos a função class()

class(idade)
## [1] "numeric"
class(sexo)
## [1] "character"
class(aluno_econ)
## [1] "logical"
class(cra)
## [1] "numeric"

As classes definem a forma de armazenamento na memória. Por exemplo, um vetor de números inteiros requer menos espaço de armazenamento do que os vetores numéricos.

Classes

Para converter manualmente (quando possível) a classe de um vetor, utilizamos as funções as.character(), as.numeric(), as.integer() e as.logical():

# Modificando classes de vetores
as.integer(idade)
## [1] 19 21 23 24 25 31 33

as.numeric(aluno_econ)
## [1] 1 0 0 1 1 1 0

as.character(cra)
## [1] "8.26" "7.18" "8.02" "7.33" "6.79" "9.45" "7.65"

Combinando vetores

Ao combinar dois vetores de classes distintas, o R converte os elementos para torná-los comparáveis:

# Combinando vetores
v1 <- c(1, 2, 3)
v2 <- c("a", "b", "c")
v3 <- c(v1, v2)
v3
## [1] "1" "2" "3" "a" "b" "c"
class(v3)
## [1] "character"

O novo vetor é formado unicamente por caracteres. Portanto, vetores no R são formado com elementos de uma única classe.

Operação com vetores

Considere o vetor cra. Podemos fazer algumas operações básicas, tais como:

# Vetor 
cra <- c(8.26, 7.18, 8.02, 7.33, 6.79, 9.45, 7.65)

# Média de cra
mean(cra)
## [1] 7.811429

# Variância 
var(cra)
## [1] 0.771581

Operação com vetores

A função summary() apresenta um conjunto de estatísticas básicas sobre um vetor:

summary(cra)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   6.790   7.255   7.650   7.811   8.140   9.450

Para obter o tamanho de um vetor, utilizamos a função length():

length(cra)
## [1] 7

Outras operações com vetores

# Valor mínimo  
min(cra) 
## [1] 6.79

# Valor máximo
max(cra)
## [1] 9.45

# Soma dos elementos 
sum(cra)
## [1] 54.68

# Soma acumulada dos elementos 
cumsum(cra)
## [1]  8.26 15.44 23.46 30.79 37.58 47.03 54.68

# Multiplicação por um escalar
2 * cra
## [1] 16.52 14.36 16.04 14.66 13.58 18.90 15.30

Operação com vetores

Outras operações básicas com vetores:

# Operações entre vetores 
a <- c(1, 2, 3, 4)
b <- c(4, 3, 2, 1)

a + b
## [1] 5 5 5 5

a - b
## [1] -3 -1  1  3

a * b
## [1] 4 6 6 4

Operação com vetores

Algumas destas operações não funcionam quando existem elementos faltantes (representados por NA)

valores_na <- c(21, 34, NA, 17, 25)
mean(valores_na)
## [1] NA
sd(valores_na)
## [1] NA

Neste caso, devemos remover os dados faltantes da seguinte forma:

mean(valores_na, na.rm = TRUE)
## [1] 24.25
sd(valores_na, na.rm = T)
## [1] 7.274384

Reciclagem dos elementos dos vetores

Podemos fazer operações com vetores de diferentes tamanhos. No entanto, o R utiliza um regra de reciclagem dos seus elementos:

# Criando vetores
j <- c(1, 2, 3)
k <- c(2, 4, 6, 8, 10)
# Somar vetores de tamanhos distintos
soma <- j + k
soma
## [1]  3  6  9  9 12

Note

Equivale a soma de c(1, 2, 3, 1, 2) + c(2, 4, 6, 8, 10)

Regras de Etiqueta 🔖 (2)

Nome de objetos:

  • Nome de objetos em minúsculo
  • Utilize _ para separar palavras no nome dos objetos
  • Evite separar por . ou utilizar o formato CamelCase
  • Use nomes informativos para os objeto
  • Não faça reuso do nome dos objetos em uma mesma análise
# Bom :)
empregados_admitidos_2022

# Ruim :(
num.emp.adm.2022
NumeroEmpregadosAdmitidos2022
EMP_2_2022

Sequências

O R possui algumas funcionalidades para gerar sequências numéricas:

# Sequencias
1:7
## [1] 1 2 3 4 5 6 7

seq(from = 1, to = 10, by = 2)
## [1] 1 3 5 7 9

letters[1:8] 
## [1] "a" "b" "c" "d" "e" "f" "g" "h"

rep(2, times = 5)
## [1] 2 2 2 2 2

rep(c(6, 7), each = 3)
## [1] 6 6 6 7 7 7

Operações lógicas

O R possui dois valores lógicos, TRUE e FALSE. Os operadores de comparação entre dois objetos são:

  • ==   igual
  • !=   diferente
  • <   menor que
  • >   maior que
  • <=   menor ou igual que
  • >=   maior ou igual que

Operações lógicas

Seguem alguns exemplos de como são feitas as comparações entre dois valores:

# Operacoes logicas
4 >= 3
## [1] TRUE

"a" == "A"
## [1] FALSE

c(12, 4) != c(12, 5)
## [1] FALSE  TRUE

4 < pi
## [1] FALSE

Selecionando elementos em um vetor

Para selecionar um ou mais elementos de um vetor, utilizamos o operador [ ]

# Vetor com informacoes de receita (em mil reais)
receita <- c(43.9, 45.4, 48.2, 51.8, 56.5)

# Selecionar o primeiro elemento
receita[1]
## [1] 43.9

# Selecionar uma sequência de elementos
receita[3:5]
## [1] 48.2 51.8 56.5

Selecionando elementos em um vetor

Para exluir elementos do vetor, utilizamos o sinal - antes do indexador da posição

# Excluir o primeiro elemento
receita[-1]
## [1] 45.4 48.2 51.8 56.5

# Excluir uma sequência de elementos
receita[-c(3:5)]
## [1] 43.9 45.4

# Excluir o último elemento
receita[-c(length(receita))] 
## [1] 43.9 45.4 48.2 51.8

Selecionando elementos em um vetor

Podemos utilizar operações lógicas para selecionar elementos em um vetor

valores <- c(13, 18, 25, 7, NA, 36)

# Selecao de elementos
valores[valores > 15]
## [1] 18 25 NA 36

valores[!is.na(valores)]
## [1] 13 18 25  7 36

# Interseção (E)
valores[!is.na(valores) & valores > 15]
## [1] 18 25 36

# União (OU)
x <- 1:10
x[x < 5 | x > 8]
## [1]  1  2  3  4  9 10

Selecionando elementos em um vetor

É possível selecionar elementos por nome, através da função names()

# Dados de receita
receita <- c(4.392, 4.540, 4.827, 5.187, 5.652)
names(receita) <- 2014:2018
receita
##  2014  2015  2016  2017  2018 
## 4.392 4.540 4.827 5.187 5.652
receita["2017"]
##  2017 
## 5.187
receita[as.numeric(names(receita)) >= 2016]
##  2016  2017  2018 
## 4.827 5.187 5.652

Regras de Etiqueta 🔖 (3)

Espaçamento

  • É uma boa prática colocar um espaço antes e depois de cada operador fixo (=, +, -, <-, etc)
  • Sempre coloque um espaço após a vírgula e nunca antes (como no português escrito).
# Bom :)
idade <- c(19, 21, 23, 24, 25, 31, 33)
media_idade <- mean(idade, na.rm = TRUE)

# Ruim :(
idade<-c(19 ,21,23 ,24,25 ,31 ,33)
media_idade<-mean(idade,na.rm=TRUE)

🚀 Quizz #2

Considere o vetor lista_vegana <- c("maca", "banana", "laranja", "kiwi", "batata", "brocolis")

  • Quantos elementos o vetor lista_vegana possui?
  • Qual a classe do vetor?
  • Selecione o elemento laranja
  • Selecione apenas os vegetais utilizando a condição |
  • Exclua o elemento kiwi baseado na sua posição no vetor
  • Adicione tomate ao vetor.
05:00

Matrizes

Matrizes

Uma matriz é simplesmente um vetor com dimensões. Para entender o conceito de matrizes, considere um vetor único com receita e despesa de três municípios:

# Contas dos municipios (receitas e despesas)
contas_munic <- c(23.7, 19.5, 13.8, 13.4, 22.1, 21.9)
dim(contas_munic) # dim() mostra o atributo dimensao 
## NULL

Para melhor visualizar as informações, podemos atribuir ao vetor a dimensão 2x3

dim(contas_munic) <- c(2, 3)  
contas_munic
##      [,1] [,2] [,3]
## [1,] 23.7 13.8 22.1
## [2,] 19.5 13.4 21.9

Portanto, o resultado é uma matriz com duas linhas e três colunas.

Matrizes

Podemos criar uma matriz através da função matrix().

# Matriz de contas dos municipios
contas_matriz <- matrix(data = contas_munic, nrow = 2, ncol = 3, 
                        byrow = F)
contas_matriz
##      [,1] [,2] [,3]
## [1,] 23.7 13.8 22.1
## [2,] 19.5 13.4 21.9
dim(contas_matriz)
## [1] 2 3

Matrizes

Para selecionar um elemento de uma matriz, devemos informar os índices relativos à linha i e à coluna j através do operador [i,j]. Por exemplo:

# Selecionar elementos da matriz
contas_matriz[1,2]
## [1] 13.8
contas_matriz[2,3]
## [1] 21.9
contas_matriz[1, ]
## [1] 23.7 13.8 22.1
contas_matriz[ ,1]
## [1] 23.7 19.5

Matrizes

Além disso, podemos atribuir nomes para as linhas e colunas de uma matriz:

# Atribuir nomes as dimensões
colnames(contas_matriz) <- c("Patos", "Conde", "Areia")
rownames(contas_matriz) <- c("Receita", "Despesa")
contas_matriz 
##         Patos Conde Areia
## Receita  23.7  13.8  22.1
## Despesa  19.5  13.4  21.9

E selecionar através do seu nome:

# Selecionar elementos
contas_matriz["Receita", "Patos"] 
## [1] 23.7
contas_matriz["Despesa", "Areia"]
## [1] 21.9
contas_matriz[ , "Conde"] 
## Receita Despesa 
##    13.8    13.4

Matrizes

É possível criar matrizes através da junção de colunas (cbind) ou linhas (rbind):

# Considere dois vetores
a <- c(1, 2, 3) 
b <- c(5, 6, 7)

# Junção por linhas
m <- rbind(a, b)
m
##   [,1] [,2] [,3]
## a    1    2    3
## b    5    6    7

Matrizes

É possível criar matrizes através da junção de colunas cbind() ou linhas rbind():

# Considere dois vetores
c <- c(1, 3, 5) 
d <- c(2, 4, 6)

# Junção por colunas
j <- cbind(c, d)
j
##      c d
## [1,] 1 2
## [2,] 3 4
## [3,] 5 6

Operações com matrizes

Algumas operações usuais com matrizes são as seguintes:

# Transpor uma matriz
t(contas_matriz)
##       Receita Despesa
## Patos    23.7    19.5
## Conde    13.8    13.4
## Areia    22.1    21.9

# Multiplicar por um escalar
1000000 * contas_matriz
##            Patos    Conde    Areia
## Receita 23700000 13800000 22100000
## Despesa 19500000 13400000 21900000

🚀 Quizz #3

  • Crie três vetores x, y e z com inteiros, cada um com 3 elementos. Combine os três vetores para formar uma matriz A (3 × 3), onde cada coluna representa um vetor. Altere os nomes das linhas para a, b e c.
  • Crie um vetor com 12 elementos do tipo numeric. Converta o vetor em uma matriz B (4 x 3) usando matrix(). Preencha os elementos por linha ajustando o argumento byrow = TRUE.
  • Obtenha a transposta da matriz B e multipique pela matriz original B. Qual a dimensão da matriz obtida?
10:00