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
- 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
- Nomes ou rótulos, sem uma relação de ordem
- Ordinal
- As diferentes categorias podem ser colocados em ordem
- Exemplos: Faixa Etária, Escolaridade, Classe Social
- As diferentes categorias podem ser colocados em ordem
- Nominal
- 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
- Assume uma quantidade enumerável de valores
- Contínuas
- Assume uma quantidade não enumerável de valores
- Exemplos: Altura, Pressão, Tempo
- Assume uma quantidade não enumerável de valores
- Discretas
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:
Ou então, basta criá-lo diretamente
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
## [1] 4
## [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.
## [1] "2025-05-07"
## [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
- Usando o conjunto de pacotes tidyverse e o banco de dados do R mtcars, faça seguinte:
- Filtre apenas os carros que têm 6 cilindros.
- Selecione apenas as colunas: mpg, hp e wt.
- Ordene o resultado do maior para o menor consumo de combustível (mpg).
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.
Crie o fator:
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”.