Manipulação de Dados

Conjunto de dados utilizado

Utilizo o dataset clássico mtcars, que contém características de 32 modelos de automóveis extraídas da revista Motor Trend US de 1974. O dataset possui 32 linhas e 11 variáveis numéricas.

# Carrega o dataset
dados <- mtcars

# Exibe as primeiras linhas
head(dados, 5)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
# Dimensões do dataset
cat("Dimensões:", nrow(dados), "linhas e", ncol(dados), "colunas\n")
## Dimensões: 32 linhas e 11 colunas

O dataframe contém variáveis como mpg (milhas por galão), cyl (cilindros), hp (potência), wt (peso) e am (transmissão), entre outras.


Passo 1: Criação de novas variáveis

dados <- dados %>%
  mutate(
    # Conversão de milhas/galão para km/litro
    kml = round(mpg * 0.4251, 2),
    
    # Classificação do motor por cilindros
    classe_motor = case_when(
      cyl == 4 ~ "Econômico",
      cyl == 6 ~ "Intermediário",
      cyl == 8 ~ "Potente"
    ),
    
    # Tipo de transmissão legível
    transmissao = ifelse(am == 1, "Manual", "Automático")
  )

# Exibe amostra dos dados com novas variáveis
head(dados[, c("cyl", "mpg", "kml", "classe_motor", "transmissao")], 5)
##                   cyl  mpg  kml  classe_motor transmissao
## Mazda RX4           6 21.0 8.93 Intermediário      Manual
## Mazda RX4 Wag       6 21.0 8.93 Intermediário      Manual
## Datsun 710          4 22.8 9.69     Econômico      Manual
## Hornet 4 Drive      6 21.4 9.10 Intermediário  Automático
## Hornet Sportabout   8 18.7 7.95       Potente  Automático

Foram criadas três variáveis derivadas: - kml: conversão do consumo para unidade métrica (km/litro) - classe_motor: categorização qualitativa (Econômico, Intermediário, Potente) - transmissao: transformação do código binário em rótulo legível


Passo 2: Filtragem

# Calcula a mediana de consumo
mediana_kml <- median(dados$kml)

# Filtra apenas veículos acima da mediana
dados_filtrados <- dados %>%
  filter(kml > mediana_kml)

cat("Mediana de consumo (km/l):", mediana_kml, "\n")
## Mediana de consumo (km/l): 8.16
cat("Veículos acima da mediana:", nrow(dados_filtrados), "de", nrow(dados), "\n")
## Veículos acima da mediana: 15 de 32

A filtragem mantém apenas os veículos mais eficientes em combustível, eliminando os que ficam abaixo da mediana.


Passo 3: Ordenação e seleção

# Seleciona e ordena as colunas de interesse
dados_final <- dados %>%
  filter(kml > mediana_kml) %>%
  transmute(
    Modelo = rownames(.),
    Cilindros = cyl,
    Consumo_kml = kml,
    Potencia_HP = hp,
    Peso_ton = wt,
    Classe = classe_motor,
    Transmissao = transmissao
  ) %>%
  arrange(desc(Consumo_kml))

# Exibe os 6 primeiros registros
kable(head(dados_final, 6),
      caption = "Veículos mais eficientes (acima da mediana)",
      align = "lcccccl")
Veículos mais eficientes (acima da mediana)
Modelo Cilindros Consumo_kml Potencia_HP Peso_ton Classe Transmissao
Toyota Corolla Toyota Corolla 4 14.41 65 1.835 Econômico Manual
Fiat 128 Fiat 128 4 13.77 66 2.200 Econômico Manual
Honda Civic Honda Civic 4 12.92 52 1.615 Econômico Manual
Lotus Europa Lotus Europa 4 12.92 113 1.513 Econômico Manual
Fiat X1-9 Fiat X1-9 4 11.61 66 1.935 Econômico Manual
Porsche 914-2 Porsche 914-2 4 11.05 91 2.140 Econômico Manual

A tabela apresenta os 6 modelos mais eficientes após as transformações, ordenados do maior para o menor consumo em km/litro.


Resumo estatístico por classe

dados %>%
  group_by(classe_motor) %>%
  summarise(
    N = n(),
    Consumo_medio_kml = round(mean(kml), 2),
    Potencia_media_HP = round(mean(hp), 1),
    Peso_medio_ton = round(mean(wt), 2),
    .groups = "drop"
  ) %>%
  kable(
    col.names = c("Classe", "N", "Consumo médio (km/l)", 
                  "Potência média (HP)", "Peso médio (ton)"),
    caption = "Estatísticas por classe de motor"
  )
Estatísticas por classe de motor
Classe N Consumo médio (km/l) Potência média (HP) Peso médio (ton)
Econômico 11 11.33 82.6 2.29
Intermediário 7 8.39 122.3 3.12
Potente 14 6.42 209.2 4.00

O agrupamento revela que motores Econômicos (4 cilindros) consomem menos combustível, enquanto os Potentes (8 cilindros) são mais pesados e gastadores.


Tabela Interativa

A tabela abaixo utiliza o pacote DT, oferecendo funcionalidades de busca, ordenação e paginação em tempo real.

DT::datatable(
  dados_final,
  rownames = FALSE,
  caption = "Dataset mtcars — Veículos acima da mediana de consumo",
  filter = "top",
  extensions = c("Buttons"),
  options = list(
    pageLength = 6,
    dom = "Bfrtip",
    buttons = c("csv", "excel", "print"),
    language = list(
      url = "//cdn.datatables.net/plug-ins/1.10.11/i18n/Portuguese-Brasil.json"
    )
  )
) %>%
  DT::formatStyle(
    "Consumo_kml",
    background = DT::styleColorBar(dados_final$Consumo_kml, "#5bc0de"),
    backgroundSize = "100% 80%",
    backgroundRepeat = "no-repeat",
    backgroundPosition = "center"
  )

Recursos: A coluna Consumo_kml exibe barras de progresso visuais. Os botões permitem exportar para CSV, Excel ou imprimir.


Equações e Conceitos

1. Teorema de Bayes

\[P(H \mid E) = \frac{P(E \mid H) \cdot P(H)}{P(E)}\]

Descreve como atualizar a probabilidade de uma hipótese H à luz de nova evidência E. É o fundamento de classificadores Naive Bayes e da inferência bayesiana em ciência de dados.


2. Entropia de Shannon

\[H(X) = -\sum_{i=1}^{n} p(x_i) \log_2 p(x_i)\]

Mede o grau de incerteza de uma variável aleatória. Em aprendizado de máquina, é usada em árvores de decisão como critério de divisão. Máxima quando todas as classes são equiprováveis; mínima quando há certeza.


3. Função de Custo Cross-Entropy

\[\mathcal{L} = -\frac{1}{N} \sum_{i=1}^{N} y_i \log(\hat{p}_i)\]

Quantifica a discrepância entre a distribuição verdadeira (yi) e a prevista (p̂i) em problemas de classificação. É a função de custo padrão em redes neurais; minimizá-la equivale a maximizar a verossimilhança.


4. Equação Normal (Regressão Linear)

\[\hat{\boldsymbol{\beta}} = \left(\mathbf{X}^\top \mathbf{X}\right)^{-1} \mathbf{X}^\top \mathbf{y}\]

Fornece a solução de forma fechada para os coeficientes que minimizam a soma dos quadrados dos resíduos. Elegante matematicamente, mas computacionalmente custosa para muitas variáveis; nesses casos, prefere-se gradiente descendente.


5. Coeficiente de Determinação (R²)

\[R^2 = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2}\]

Mede a proporção de variância em y explicada pelo modelo de regressão. Varia de 0 a 1: quanto mais próximo de 1, melhor o ajuste; R² = 0 indica que o modelo não explica a variância.


Figuras

Figura 1: Consumo de Combustível por Classe de Motor

ggplot(dados, aes(x = classe_motor, y = kml, fill = classe_motor)) +
  geom_boxplot(alpha = 0.7, outlier.colour = "red") +
  geom_jitter(width = 0.2, alpha = 0.4, size = 2) +
  scale_fill_manual(values = c("Econômico" = "#2ecc71", 
                               "Intermediário" = "#f39c12", 
                               "Potente" = "#e74c3c")) +
  labs(
    title = "Consumo de Combustível por Classe de Motor",
    x = "Classe do Motor",
    y = "Consumo (km/l)",
    fill = "Classe"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    legend.position = "bottom",
    plot.title = element_text(face = "bold", size = 13)
  )
Figura 1: Distribuição do consumo de combustível (km/l) por classe de motor. Veículos Econômicos consomem significativamente menos que os Potentes.

Figura 1: Distribuição do consumo de combustível (km/l) por classe de motor. Veículos Econômicos consomem significativamente menos que os Potentes.


Figura 2: Relação entre Potência e Peso

ggplot(dados, aes(x = wt, y = hp, color = classe_motor, size = kml)) +
  geom_point(alpha = 0.6) +
  geom_smooth(method = "lm", se = FALSE, color = "gray50", linetype = "dashed") +
  scale_color_manual(values = c("Econômico" = "#2ecc71", 
                                "Intermediário" = "#f39c12", 
                                "Potente" = "#e74c3c")) +
  scale_size(range = c(2, 6), name = "Consumo (km/l)") +
  labs(
    title = "Potência vs. Peso do Veículo",
    x = "Peso (toneladas)",
    y = "Potência (HP)",
    color = "Classe do Motor"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    legend.position = "bottom",
    plot.title = element_text(face = "bold", size = 13)
  )
Figura 2: Correlação entre potência (HP) e peso do veículo (toneladas). A cor representa a classe do motor. Observe a relação linear positiva: motores mais potentes tendem a ser mais pesados.

Figura 2: Correlação entre potência (HP) e peso do veículo (toneladas). A cor representa a classe do motor. Observe a relação linear positiva: motores mais potentes tendem a ser mais pesados.


Referências

JAMES, G.; WITTEN, D.; HASTIE, T.; TIBSHIRANI, R. An Introduction to Statistical Learning with Applications in R. 2. ed. Springer, 2021.

HASTIE, T.; TIBSHIRANI, R.; FRIEDMAN, J. The Elements of Statistical Learning: Data Mining, Inference, and Prediction. 2. ed. Springer, 2009.

WICKHAM, H.; GROLEMUND, G. R for Data Science. 2. ed. O’Reilly Media, 2023.

GOODFELLOW, I.; BENGIO, Y.; COURVILLE, A. Deep Learning. MIT Press, 2016.

WILKE, C. O. Fundamentals of Data Visualization: A Primer on Making Informative and Compelling Figures. O’Reilly Media, 2019.