4 Dados

4.1 Processos de obtenção, importação, organização e transformação

  • Obtenção: experimentos controlados, estudos observacionais, etc.
  • Importação: armazenar (ou importar) os dados em um formato compatível com software utilizado, aqui utilizaremos o R.
  • Organização: colocar os dados em uma estrutura consistente. Normalmente, cada linha é a uma observação e cada coluna é uma variável.
  • Transformação: criar novas variáveis como função das variáveis existentes, restringir observações de interesse, calcular medidas resumo, etc.
Ordem Lançamento Filme Data Duração Bilheteria (Milhões) Gênero
1 Toy Story 1995-11-22 81 373 Aventura
2 Vida de inseto 1998-11-25 95 363 Comédia
3 Toy Story 2 1999-11-24 92 497 Aventura
4 Monstros S. A. 2001-11-02 92 632 Aventura
5 Procurando Nemo 2003-05-30 100 871 Comédia
6 Os Incríveis 2004-11-05 115 631 Ação
7 Carros 2006-06-09 117 461 Esporte
8 Ratatouille 2007-06-29 111 623 Aventura
9 WALL-E 2008-06-27 98 521 Ficção Científica
10 Up Altas Aventuras 2009-05-29 96 735 Drama

A tabela acima é uma versão reduzida do banco de dados “filmes_pixar”, disponível para download aqui. Este banco de dados foi elaborado para servir de base na construção de tabelas e gráficos nesse e nos próximos capítulos. Já a versão reduzida será usada para facilitar os cálculos e a resolução de exemplos na lousa, durante a aula.


4.2 Tipos de Variáveis

  1. Qualitativas: atributos não numéricos
    • Nominal
      • Nomes ou rótulos, sem uma relação de ordem
      • Exemplos: Sexo, Religião, Cor dos Olhos, Time de Futebol
    • Ordinal
      • As diferentes categorias podem ser colocados em ordem
      • Exemplos: Faixa Etária, Escolaridade, Classe Social
  2. Quantitativas: atributos numéricos
    • Discretas
      • Assume uma quantidade enumerável de valores
      • Exemplos: Número de Filhos, Quantidade de Erros na Prova, Número de Livros Lidos em 2023
    • Contínuas
      • Assume uma quantidade não enumerável de valores
      • Exemplos: Altura, Pressão, Tempo

4.3 Tabelas de Frequências

  • Tabela contendo frequências absolutas e/ou relativas de cada categoria de uma variável qualitativa.
Gênero Freq FreqRel
Aventura 8 0.348
Ação 2 0.087
Comédia 4 0.174
Drama 3 0.130
Esporte 3 0.130
Ficção Científica 1 0.043
Musical 2 0.087

Pode-se afirmar que nesta amostra, o gênero predominante é aventura (34,7% dos filmes).

  • Para variáveis qualitativas ordinais, pode-se também considerar as frequências relativas acumuladas.

  • Também é possível fazer tabela de frequências para variáveis quantitativas discretas. Para algumas variáveis, como a duração do filme, poucos valores se repetem. Nesses casos, é comum agrupar os valores dessas variáveis em classes e calcular a frequência de cada classe.

Faixas_duração Freq FreqRel
80 |– 90 1 0.043
90 |– 100 12 0.522
101 |– 110 6 0.261
111 |– 120 4 0.174
  • Por fim, para variáveis quantitativas contínuas, também podemos usar
Bilheteria_Mundial Freq FreqRel FreqAcum
1.1 bilhão |– 1.3 bilhão 1 0.043 0.043
300 milhões |– 500 milhões 8 0.348 0.391
500 milhões |– 700 milhões 6 0.261 0.652
700 milhões |– 900 milhões 5 0.217 0.869
900 milhões |– 1.1 bilhão 3 0.130 1.000
  • A quantidade e o tamanho das faixas é arbitrário. Contudo, um número muito pequeno de classes pode ocasionar perda de informação, enquanto um número muito grande de classes pode prejudicar o objetivo de resumir os dados.

  • Por fim, as faixas podem ter tamanhos diferentes. No entanto, a análise dessas classes deve ser feito com cuidado. A escolha de classes com tamanhos diferentes normalmente só é feita quando há poucas observações em algum intervalo.


4.4 Manipulação de Dados usando o tidyverse

A manipulação de dados no R tem como objetivo organizar, filtrar e transformar um banco de dados. O tidyverse é um conjunto de pacotes que compartilham uma filosofia de design e uma gramática comum, tornando a manipulação de dados mais intuitiva e fluida. Os pacotes principais são:

Tibble

O tibble é uma estrutura de dados do R, sendo uma versão atualizada do data.frame. Ele é mais completo, mais legível e menos propenso a erros do que o data.frame, uma vez que não converte automaticamente strings em fatores e permite colunas com tipos de dados mais complexos (como listas e funções). Além disso, o tibble se encaixa devidamente com outros pacotes do tidyverse.

Para transformar um data.frame já existente em tibble:

library(tibble)
exemplo_tibble <- as_tibble(meu_dataframe)

Ou então, basta criá-lo diretamente

meu_tibble <- tibble(
  x = 1:4,
  y = c("a", "b", "c", "d"),
  z = x^2
)

O operador pipe

O pipe (%>%) é um operador do pacote magrittr que encadeia funções, ou seja, ele pega o resultado de uma expressão e passa como argumento para a próxima função. A ideia é que ao invés de escrever o código de dentro pra fora, escrevemos passo a passo, numa sequência lógica. Por exemplo

# As duas linhas representam a mesma coisa
f(x, y)
x %>% f(y)
# Raiz quadrada sem o pipe
x <- c(5, 3, 1, 0, 4, 2, 1)
sqrt(sum(x))
## [1] 4
# Raiz quadrada com o pipe
library(magrittr)
x <- c(5, 3, 1, 0, 4, 2, 1)
x %>% sum() %>% sqrt()
## [1] 4

O pacote dplyr

O dplyr é o pacote mais comum para manipulação de dados no R. Suas principais funções são:

  • select() - seleciona colunas
  • arrange() - ordena a base
  • filter() - filtra linhas
  • mutate() - cria/modifica colunas
  • group_by() - agrupa a base
  • summarise() - sumariza a base

Todas essas funçõees tem como entrada e como saída uma tibble. Além disso, o dplyr facilida o uso do operador pipe.

Exemplo:

library(dbplyr)
dados %>% 
  filter(idade > 18) %>% 
  group_by(genero) %>% 
  summarise(media_salario = mean(salario))

O exemplo acima resulta em uma tabela mostrando, para cada gênero, a média de salário das pessoas maiores de 18 anos. Ou seja, primeiro filtramos (filter) apenas as pessoas com idade acima de 18, agrupamos (group_by) os dados por gênero e resume (summarise) calculando a média dos salários de cada grupo.

Outra coisa que o pacote dplyr permite fazer é combinar duas tabelas com base em uma ou mais colunas em comum, o nome disso é join. Os principais tipos de join são:

  • inner_join() - mantém apenas as linhas que aparecem nas duas tabelas.
  • left_join() → mantém todas as linhas da tabela da esquerda, preenchendo com NA o que não casar na direita.
  • right_join - mantém todas as linhas da tabela da direita.
  • full_join - mantém todas as linhas das duas tabelas.

Um exemplo:

library(dplyr)

clientes <- tibble(cliente_id = c(1, 2, 3),
                   nome = c("Victor", "Letícia", "Mariana"))

compras <- tibble(cliente_id = c(1, 2, 4),
                  valor = c(10, 20, 30))

# Juntar apenas quem aparece nos dois
inner_join(clientes, compras, by = "cliente_id")
## # A tibble: 2 × 3
##   cliente_id nome    valor
##        <dbl> <chr>   <dbl>
## 1          1 Victor     10
## 2          2 Letícia    20

O pacote Stringr

O pacote stringr é um dos pacotes do tidyverse especializado em manipulação de strings (textos). Seu objetivo é tornar o trabalho com strings mais simples, eficiente e legível. Suas principais funções são:

  • str_detect() - Verifica se um padrão existe em uma string (retorna TRUE/FALSE).
  • str_subset() - Filtra strings que contêm determinado padrão.
  • str_split() - Divide strings com base em um delimitador.
  • str_length() - Retorna o número de caracteres da string.
  • str_trim() Remove espaços em branco no início e no fim.
  • str_to_lower() / str_to_upper() Converte texto para minúsculas / maiúsculas.

Exemplo:

library(tidyverse)
dados <- tibble(nome = c("Letícia", "Mariana", "Mateus", "Guilherme"))
dados %>%
  mutate(comeca_com_B = str_detect(nome, "^G"))
## # A tibble: 4 × 2
##   nome      comeca_com_B
##   <chr>     <lgl>       
## 1 Letícia   FALSE       
## 2 Mariana   FALSE       
## 3 Mateus    FALSE       
## 4 Guilherme TRUE

O exemplo abaxio cria uma coluna que retorna TRUE se o nome começa com B e FALSE caso contrário.

O pacote lubridate

Trabalhar com datas e horários na base do R pode ser complicado, uma vez que, pode ser cheio de erros e formatos diferentes, então o pacote lubridade, do tidyverse foi criado para deixar tudo isso mais fácil. Suas principais funções são:

  • second() - extrai os segundos.
  • minute() - extrai os minutos.
  • hour() - extrai a hora.
  • wday() - extrai o dia da semana.
  • mday() - extrai o dia do mês.
  • month() - extrai o mês.
  • year() - extrai o ano.
# Data e hora (editados pela última vez)
library(lubridate)
today()
## [1] "2025-05-07"
hour(now())
## [1] 21

O pacote Forcats

Embora o R base já tenha suporte a fatores, manipular níveis, ordenar ou recodificar fatores pode ser meio confuso e gerar muito error. O pacote forcats (FOR Categorial VariableS) é um pacote do tidyverse foi criado para facilitar esse trabalhar e tornar a manipulação de fatores mais simples.

O forcats criar fatores de forma controlada, renomeia e recodifica níveis, reordena níveis com base em frêquencia ou valores, lida com fatores não utilizados. Algumas de suas funções são:

  • fct_relevel() - reordena níveis manualmente, movendo um ou mais para frente.
  • fct_reorder() - reordena níveis de um fator com base em outra variável .
  • fct_infreq() - ordena os níveis do fator pela frequência (do mais comum ao menos comum).
  • fct_recode() - renomeia os níveis.
  • fct_count() - conta as observações por nível.
  • fct_lump() - Junta os níveis menos frequentes em “Outro”.

Exemplo:

library(forcats)
nivel <- factor(c("alto", "baixo", "médio", "baixo", "alto", "baixo"))
fct_infreq(nivel)
## [1] alto  baixo médio baixo alto  baixo
## Levels: baixo alto médio

O código acima reordena os fatores por frequência.


4.5 Exercícios

  1. Usando o conjunto de pacotes tidyverse e o banco de dados do R mtcars, faça seguinte:
  1. Filtre apenas os carros que têm 6 cilindros.
  2. Selecione apenas as colunas: mpg, hp e wt.
  3. Ordene o resultado do maior para o menor consumo de combustível (mpg).
  1. Primeiro, crie um vetor com o nome e sobrenome de 5 pessoas, depois, usando o pacote stringr separe o nome e o sobrenome de cada pessoa.

  2. Crie o fator:

cores <- factor(c("rosa", "vermelho", "azul", "amarelo", "rosa", "verde", "azul", "rosa"))

A partir disso: (a) Reordene os níveis para que a cor mais frequente venha primeiro. (b) Agrupe todas as cores menos frequentes que “azul” em um novo nível chamado “Outro”.