Análise de Dados e Documentos Dinâmicos

Tópico I - Comandos Básicos

Antonio Vinícius Barbosa

2024-04-03

Utilizando o R

Por que utilizar o R?

  • Gratuito
  • CRAN com mais de 20.000
  • Comunidade ativa e colaborativa
  • Versatilidade: manipulação de dados, modelagem estatística, gráficos
  • Integrabilidade

R no Windows

Ambientes de desenvolvimento integrado (IDE)

  • A forma mais conveniente de utilizar o R é através de uma interface gráfica através de janelas.
  • É possível interagir com o sistema através do shell prompt, embora requeira maior conhecimento do usuário.
  • O desenvolvimento de Ambientes de Desenvolvimento Integrado (IDE) tem como objetivo facilitar a interação entre o usuário e o sistema.

RStudio

RStudio é um conjunto eficiente de ferramentas integradas https://posit.co/

RStudio

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 🔖

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)

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)

Estruturas de dados

Veremos as principais estruturas de dados do R:

  • Vetores
  • Matrizes
  • Data frames

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 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

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

Data Frames

Data frames

Um data frame é uma das estruturas mais importantes para armazanamento de dados. Equivale, de certa forma, às planilhas eletrônicas com linhas e colunas.

  • Um data frame é um conjunto de vetores de mesmo tamanho;
  • Cada linha representa informações para uma única unidade de observação
  • Cada coluna representa uma característica observada das unidades;
  • Elementos da mesma coluna devem ser do mesma classe.

Data frames

É possível criar, carregar (dados dos pacotes) ou ler arquivos diretamente no R. Para criar um data frame, fazemos:

alunos_ufpb <- data.frame(
  aluno = c("José", "Maria", "Pedro", "Carla", "Isabel"),
  economia = c(1, 0, 0, 1, 1),
  periodo = c(3, 4, 7, 2, 3),
  cra = c(7.34, 8.45, 8.05, 7.98, 9.03)
  )

alunos_ufpb
##    aluno economia periodo  cra
## 1   José        1       3 7.34
## 2  Maria        0       4 8.45
## 3  Pedro        0       7 8.05
## 4  Carla        1       2 7.98
## 5 Isabel        1       3 9.03

Data frames

Para carregar dados dos pacotes, fazemos:

#install.packages("dados")
head(dados::dados_gapminder)
## # A tibble: 6 × 6
##   pais        continente   ano expectativa_de_vida populacao pib_per_capita
##   <fct>       <fct>      <int>               <dbl>     <int>          <dbl>
## 1 Afeganistão Ásia        1952                28.8   8425333           779.
## 2 Afeganistão Ásia        1957                30.3   9240934           821.
## 3 Afeganistão Ásia        1962                32.0  10267083           853.
## 4 Afeganistão Ásia        1967                34.0  11537966           836.
## 5 Afeganistão Ásia        1972                36.1  13079460           740.
## 6 Afeganistão Ásia        1977                38.4  14880372           786.

Data frames

Algumas características dos dados:

# Estrutura dos dados
str(dados::dados_gapminder)
## tibble [1,704 × 6] (S3: tbl_df/tbl/data.frame)
##  $ pais               : Factor w/ 142 levels "Afeganistão",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ continente         : Factor w/ 5 levels "África","Américas",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ ano                : int [1:1704] 1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 ...
##  $ expectativa_de_vida: num [1:1704] 28.8 30.3 32 34 36.1 ...
##  $ populacao          : int [1:1704] 8425333 9240934 10267083 11537966 13079460 14880372 12881816 13867957 16317921 22227415 ...
##  $ pib_per_capita     : num [1:1704] 779 821 853 836 740 ...

# Listar variaveis
names(dados::dados_gapminder)
## [1] "pais"                "continente"          "ano"                
## [4] "expectativa_de_vida" "populacao"           "pib_per_capita"