Resumo: Este documento traz alguns exemplos de manipulação de dados, utilização de relatórios, citação de referências bibliográficas e imagens.
Exemplo: dataset mtcars, nativo do R, o qual contém
dados sobre 32 modelos de automóveis (diferentes observações) coletados
pela revista Motor Trend em 1974. Cada linha representa um
carro e cada coluna uma característica técnica.
# Carregar o dataset mtcars
data(mtcars)
# Verificar a estrutura dos dados
str(mtcars)
## 'data.frame': 32 obs. of 11 variables:
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
A função str() mostra que que mtcars possui
32 observações e 11 variáveis
numéricas. As principais variáveis são:
| Variável | Descrição |
|---|---|
mpg |
Consumo (milhas por galão) |
cyl |
Número de cilindros |
disp |
Cilindrada (pol³) |
hp |
Potência (cavalos de força) |
wt |
Peso (1000 lbs) |
gear |
Número de marchas |
am |
Transmissão (0 = automático, 1 = manual) |
# Estatísticas das variáveis selecionadas
summary(mtcars[, c("mpg", "hp", "wt", "cyl")])
## mpg hp wt cyl
## Min. :10.40 Min. : 52.0 Min. :1.513 Min. :4.000
## 1st Qu.:15.43 1st Qu.: 96.5 1st Qu.:2.581 1st Qu.:4.000
## Median :19.20 Median :123.0 Median :3.325 Median :6.000
## Mean :20.09 Mean :146.7 Mean :3.217 Mean :6.188
## 3rd Qu.:22.80 3rd Qu.:180.0 3rd Qu.:3.610 3rd Qu.:8.000
## Max. :33.90 Max. :335.0 Max. :5.424 Max. :8.000
A função summary oferece, por fim, as estatísticas
básicas das variáveis que selecionamos acima.
# Carros com potência > 150 hp E transmissão manual (am == 1)
carros_manual <- mtcars %>%
filter(hp > 150, am == 1)
cat("Número de carros filtrados:", nrow(carros_manual), "\n")
## Número de carros filtrados: 3
print(carros_manual[, c("mpg", "cyl", "hp", "wt", "am")])
## mpg cyl hp wt am
## Ford Pantera L 15.8 8 264 3.17 1
## Ferrari Dino 19.7 6 175 2.77 1
## Maserati Bora 15.0 8 335 3.57 1
Após aplicar filter(), restaram 3
carros com mais de 150 cv e câmbio manual. Esses
veículos representam o segmento de alto desempenho do dataset.
# Ordenação: do maior para o menor consumo (mpg)
mtcars_ordenado <- mtcars %>%
arrange(desc(mpg)) %>%
select(mpg, cyl, hp, wt)
head(mtcars_ordenado, 10)
## mpg cyl hp wt
## Toyota Corolla 33.9 4 65 1.835
## Fiat 128 32.4 4 66 2.200
## Honda Civic 30.4 4 52 1.615
## Lotus Europa 30.4 4 113 1.513
## Fiat X1-9 27.3 4 66 1.935
## Porsche 914-2 26.0 4 91 2.140
## Merc 240D 24.4 4 62 3.190
## Datsun 710 22.8 4 93 2.320
## Merc 230 22.8 4 95 3.150
## Toyota Corona 21.5 4 97 2.465
Ao ordenar de forma decrescente por mpg, os 10 carros
mais econômicos ficam no topo. No total (ou seja, além do head), pode-se
apontar que os carros mais eficientes em, em média, 6.1875
cilindros e menor peso.
# Agrupamento por tipo de transmissão
mtcars_ajustado <- mtcars %>%
mutate(
# Tipo de transmissão
transmissao = ifelse(am == 1, "Manual", "Automático")
)
resumo_grupo <- mtcars_ajustado %>%
group_by(transmissao) %>%
summarise(
n_carros = n(),
media_mpg = round(mean(mpg), 2),
media_hp = round(mean(hp), 2),
media_peso_lbs = round(mean(wt) * 1000, 0),
.groups = "drop"
)
resumo_grupo
## # A tibble: 2 × 5
## transmissao n_carros media_mpg media_hp media_peso_lbs
## <chr> <int> <dbl> <dbl> <dbl>
## 1 Automático 19 17.2 160. 3769
## 2 Manual 13 24.4 127. 2411
A tabela abaixo utiliza o pacote DT para exibir o
dataset mtcars de forma interativa.
# Preparando o data frame para exibição
tabela_exibir <- mtcars_ajustado %>%
select(
Transmissão = transmissao,
Cilindros = cyl,
`Consumo (mpg)` = mpg,
`Potência (hp)` = hp,
`Peso (×1000 lbs)` = wt,
Marchas = gear
)
# Criando a tabela
datatable(
tabela_exibir,
rownames = TRUE,
filter = "top", # Filtros por coluna no topo
extensions = c("Buttons", "ColReorder"),
options = list(
pageLength = 10,
lengthMenu = list(c(5, 10, 15, 32), c("5", "10", "15", "Todos")),
dom = "Blfrtip", # Botões + comprimento + filtro + tabela + info + paginação
buttons = list("csv", "excel", "pdf", "print"),
colReorder = TRUE, # Permite reordenar colunas arrastando
scrollX = TRUE,
autoWidth = TRUE,
language = list(
url = "//cdn.datatables.net/plug-ins/1.13.6/i18n/pt-BR.json"
)
),
caption = htmltools::tags$caption(
style = "caption-side: top; text-align: left; font-size: 14px; font-weight: bold;",
"Tabela 1 — Dataset mtcars"
)
) %>%
# Formatação condicional: barras de dados para colunas numéricas
formatStyle(
"Consumo (mpg)",
background = styleColorBar(tabela_exibir$`Consumo (mpg)`, "#27ae60"),
backgroundSize = "100% 88%",
backgroundRepeat = "no-repeat",
backgroundPosition = "center"
) %>%
formatStyle(
"Potência (hp)",
background = styleColorBar(tabela_exibir$`Potência (hp)`, "#e74c3c"),
backgroundSize = "100% 88%",
backgroundRepeat = "no-repeat",
backgroundPosition = "center"
)
Experimente clicar nos cabeçalhos das colunas para ordenar. Use os campos de busca no topo de cada coluna para filtrar, podendo exportar os dados com os botões CSV, Excel ou PDF.
Apresento, abaixo, algumas equações complexas recuperadas do estudo da ciência de dados e do Machine Learning.
\[ \ell(\boldsymbol{\theta} \mid \mathbf{x}) = \sum_{i=1}^{n} \log f(x_i \mid \boldsymbol{\theta}) \]
A equação de verossimilhança logarítmica \(\ell(\boldsymbol{\theta} \mid \mathbf{x})\) mede o quanto um conjunto de parâmetros \(\boldsymbol{\theta}\) é plausível dado os dados observados \(\mathbf{x} = (x_1, \ldots, x_n)\). A transformação logarítmica converte o produto de probabilidades em uma soma, tornando a otimização numericamente mais estável. Ela é utilizada para estimar parâmetros em distribuições.
Vide: Datacamp Fisher (1922)
\[ \boldsymbol{\theta} = \boldsymbol{\theta} - \eta \nabla_{\boldsymbol{\theta}} \mathcal{J}\!\left(\boldsymbol{\theta};\, x_{(i)}, y_{(i)}\right) \]
Esta é a regra de atualização do Stochastic Gradient Descent (SGD). A cada iteração, os parâmetros \(\boldsymbol{\theta}\) são ajustados na direção oposta ao gradiente. O escalar \(\eta\) (eta) é a taxa de aprendizado, que controla o tamanho do passo. Este algoritmo é muito utilizado na otimização em aprendizado de máquina.
Vide: Geeks4Geeks Bottou (2010)
\[ H(X) = -\sum_{k=1}^{K} p(x_k)\, \log_b p(x_k) \]
A Entropia de Shannon \(H(X)\) quantifica a incerteza ou informação média associada à variável aleatória discreta \(X\), que assume \(K\) valores possíveis com probabilidades \(p(x_k)\). Quando todas as classes são equiprováveis, a entropia é máxima; quando uma classe é certa (\(p=1\)), a entropia é zero. Na Ciência de Dados, é usada em algoritmos de árvore de decisão para selecionar o atributo que maximiza o ganho de informação a cada divisão.
Vide: Nebius Shannon (1948)
\[ K(\mathbf{x}_i, \mathbf{x}_j) = \exp\!\left(-\frac{\|\mathbf{x}_i - \mathbf{x}_j\|^2}{2\sigma^2}\right) \]
O kernel de Base Radial Gaussiana (RBF) calcula a similaridade entre dois vetores \(\mathbf{x}_i\) e \(\mathbf{x}_j\) no espaço de entrada. É usado em Support Vector Machines (SVM).
Vide: arXiv Boser, Guyon, and Vapnik (1992)
\[ \text{AIC} = 2k - 2\ln\!\left(\hat{L}\right) \]
O Critério de Informação de Akaike (AIC) é uma medida de qualidade relativa de modelos estatísticos. \(k\) é o número de parâmetros estimados e \(\hat{L}\) é o valor máximo da função de verossimilhança do modelo. É um método matemático para avaliar o quão bem um modelo se encaixa nos dados a partir dos quais foi gerado.
Vide: Scribbr Akaike (1974)
A figura mostra a distribuição empírica do consumo dos carros.
ggplot(mtcars, aes(x = mpg)) +
geom_histogram(aes(y = after_stat(density)),
bins = 10, fill = "#2980b9", color = "white", alpha = 0.8) +
geom_density(color = "#e74c3c", linewidth = 1.2) +
labs(title = "Distribuição do Consumo (mpg)",
x = "Milhas por Galão", y = "Densidade") +
theme_minimal()
Figura 1
Exibe a força e a correlação entre as variáveis de mtcars. As células azuis indicam correlação positiva, as vermelhas indicam correlação negativa, e as próximas do branco indicam ausência de relação linear.
# Calcula a matriz de correlação
cor_matrix <- cor(mtcars)
# Converte para formato longo
cor_df <- as.data.frame(as.table(cor_matrix))
names(cor_df) <- c("Var1", "Var2", "Correlacao")
ggplot(cor_df, aes(x = Var1, y = Var2, fill = Correlacao)) +
geom_tile(color = "white") +
geom_text(aes(label = round(Correlacao, 2)), size = 3) +
scale_fill_gradient2(low = "#e74c3c", mid = "white", high = "#2980b9",
midpoint = 0, limits = c(-1, 1)) +
labs(title = "Matriz de Correlação: Mtcars",
x = NULL, y = NULL, fill = "Correlação") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Figura 2
Trago algumas referências que dizem respeito ao estudo da ciência de dados e Machine Learning (outras foram citadas no decorrer do texto da aba de equações).
[1] JAMES, Gareth. An introduction to statistical learning with applications in R. 2013.
James (2013)
[2] WICKHAM, Hadley et al. R for data science. Sebastopol: O’Reilly, 2017.
Wickham, Grolemund, et al. (2017)
[3] GOODFELLOW, Ian; BENGIO, Yoshua; COURVILLE, Aaron. Deep feedforward networks. Deep learning, v. 1, p. 161-217, 2016.
Goodfellow, Bengio, and Courville (2016)
[4] HASTIE, Trevor. The elements of statistical learning: data mining, inference, and prediction. 2009.
Hastie (2009)
[5] ROKACH, Lior; MAIMON, Oded; SHMUELI, Erez. Machine learning for data science handbook. Springer. https://doi. org/10, v. 1007, p. 978-3, 2023.
(rokach2023machine?)