Neste item será utilizado (seguindo as práticas de (Wickham and Grolemund
2017)) o conjunto de dados mtcars, que já vem
instalado com o R. Ele contém informações de 32 modelos de automóveis
(extraídas da revista Motor Trend US, 1974), como consumo de
combustível, potência e peso.
data(mtcars)
dados <- mtcars
dados <- tibble::rownames_to_column(dados, var = "modelo")
head(dados)
str(dados)
## 'data.frame': 32 obs. of 12 variables:
## $ modelo: chr "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
## $ 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 ...
Explicação: a função data(mtcars)
carrega o conjunto de dados. Como os nomes dos carros estavam
armazenados como nomes de linha (e não como uma coluna), usei
rownames_to_column() para criar a coluna
modelo, facilitando a manipulação.
Principais variáveis utilizadas:
mpg: consumo (milhas por galão);cyl: número de cilindros;hp: potência (cavalos);wt: peso (em 1000 libras).summary(dados[, c("mpg", "hp", "wt")])
## mpg hp wt
## Min. :10.40 Min. : 52.0 Min. :1.513
## 1st Qu.:15.43 1st Qu.: 96.5 1st Qu.:2.581
## Median :19.20 Median :123.0 Median :3.325
## Mean :20.09 Mean :146.7 Mean :3.217
## 3rd Qu.:22.80 3rd Qu.:180.0 3rd Qu.:3.610
## Max. :33.90 Max. :335.0 Max. :5.424
Explicação: o summary() apresenta
mínimo, quartis, mediana, média e máximo. Observa-se que o consumo médio
é de aproximadamente 20.1 mpg, a potência média é de
146.7 hp e o peso médio é de 3.22 (mil
libras).
mutate)dados <- dados %>%
mutate(
kpl = round(mpg * 0.425144, 2),
peso_kg = round(wt * 453.592, 0),
potencia = ifelse(hp >= 150, "Alta", "Baixa")
)
dados %>% select(modelo, mpg, kpl, wt, peso_kg, hp, potencia) %>% head()
Explicação: foram criadas três variáveis novas:
kpl: converte o consumo de milhas por galão para
quilômetros por litro (multiplicando por 0,425144), unidade mais
familiar no Brasil;peso_kg: converte o peso de milhares de libras
paraquilogramas (1 libra ≈ 0,4536 kg);potencia: variável categórica que classifica o carro
como “Alta” (150 hp ou mais) ou “Baixa” potência.filter)economicos <- dados %>%
filter(cyl == 4, mpg > 25) %>%
select(modelo, cyl, mpg, kpl, hp)
economicos
Explicação: filtrei apenas os carros de 4 cilindros com consumo acima de 25 mpg. O resultado foi de 6 carros, que são os mais econômicos do conjunto. Isso mostra que carros menores (menos cilindros) tendem a ter melhor rendimento.
arrange)dados %>%
arrange(desc(hp)) %>%
select(modelo, hp, cyl, mpg) %>%
head(5)
Explicação: ordenei os carros pela potência em ordem
decrescente (desc(hp)) e exibi os cinco mais potentes. O
mais potente é o Maserati Bora, com 335
hp; note também que ele possui consumo baixo, reforçando a
relação entre potência e gasto de combustível.
group_by +
summarise)resumo_cil <- dados %>%
group_by(cyl) %>%
summarise(
n = n(),
consumo_medio_kpl = round(mean(kpl), 2),
potencia_media_hp = round(mean(hp), 1),
peso_medio_kg = round(mean(peso_kg), 0)
)
resumo_cil
Explicação: agrupei os carros pelo número de
cilindros e calculei, para cada grupo, a quantidade de carros
(n) e as médias de consumo, potência e peso. O resultado
mostra um padrão: quanto maior o número de cilindros, maior a potência e
o peso, e menor o consumo (km/L).
A tabela abaixo foi criada com o pacote DT e permite ordenar (clicando no cabeçalho das colunas), buscar (campo “Search”) e paginar (escolhendo quantas linhas exibir por página).
tabela <- dados %>%
select(Modelo = modelo, Cilindros = cyl, `Consumo (km/L)` = kpl,
`Potência (hp)` = hp, `Peso (kg)` = peso_kg, `Categoria de potência` = potencia)
datatable(
tabela,
rownames = FALSE,
filter = "top",
options = list(
pageLength = 8,
lengthMenu = c(5, 8, 16, 32),
order = list(list(3, "desc")),
language = list(url = "//cdn.datatables.net/plug-ins/1.13.6/i18n/pt-BR.json")
),
caption = "Tabela 1 – Características de 32 modelos de automóveis (mtcars)"
)
\[\hat{\boldsymbol{\beta}} = \left(\mathbf{X}^{\top}\mathbf{X}\right)^{-1}\mathbf{X}^{\top}\mathbf{y}\]
Significado: fornece os coeficientes \(\hat{\boldsymbol{\beta}}\) da regressão linear que minimizam a soma dos quadrados dos erros. \(\mathbf{X}\) é a matriz de variáveis explicativas e \(\mathbf{y}\) é o vetor da variável resposta (Hastie et al. 2009).
\[P(\theta \mid D) = \frac{P(D \mid \theta)\,P(\theta)}{\displaystyle\int P(D \mid \theta')\,P(\theta')\,d\theta'}\]
Significado: atualiza a crença sobre um parâmetro \(\theta\) após observar os dados \(D\). \(P(\theta)\) é a distribuição a priori, \(P(D\mid\theta)\) é a verossimilhança e \(P(\theta\mid D)\) é a distribuição a posteriori. O denominador é a constante normalizadora.
\[f(\mathbf{x}) = \frac{1}{(2\pi)^{k/2}\,|\boldsymbol{\Sigma}|^{1/2}} \exp\!\left(-\frac{1}{2}(\mathbf{x}-\boldsymbol{\mu})^{\top}\boldsymbol{\Sigma}^{-1}(\mathbf{x}-\boldsymbol{\mu})\right)\]
Significado: descreve a densidade de probabilidade de um vetor aleatório \(\mathbf{x}\) com \(k\) dimensões, média \(\boldsymbol{\mu}\) e matriz de covariância \(\boldsymbol{\Sigma}\). É a base de diversos métodos estatísticos e de aprendizado de máquina.
\[J(\mathbf{w}) = -\frac{1}{m}\sum_{i=1}^{m}\left[y_i \log\!\big(\sigma(\mathbf{w}^{\top}\mathbf{x}_i)\big) + (1-y_i)\log\!\big(1-\sigma(\mathbf{w}^{\top}\mathbf{x}_i)\big)\right], \quad \sigma(z)=\frac{1}{1+e^{-z}}\]
Significado: mede o erro de um classificador binário. \(\sigma(z)\) é a função sigmoide, que transforma qualquer valor real em probabilidade (entre 0 e 1); \(y_i \in \{0,1\}\) é a classe real. Quanto menor \(J\), melhor o modelo.
\[\mathbf{w}_{t+1} = \mathbf{w}_t - \eta\,\nabla_{\mathbf{w}} J(\mathbf{w}_t), \qquad \nabla_{\mathbf{w}} J = \left[\frac{\partial J}{\partial w_1}, \frac{\partial J}{\partial w_2}, \ldots, \frac{\partial J}{\partial w_n}\right]^{\top}\]
Significado: algoritmo iterativo de otimização usado para treinar modelos. A cada passo \(t\), os parâmetros \(\mathbf{w}\) são atualizados na direção oposta ao gradiente da função de perda \(J\), com tamanho de passo definido pela taxa de aprendizado \(\eta\) (Goodfellow et al. 2016).
ggplot(dados, aes(x = peso_kg, y = kpl, color = factor(cyl))) +
geom_point(size = 3, alpha = 0.85) +
geom_smooth(aes(group = 1), method = "lm", se = TRUE,
color = "black", linetype = "dashed") +
labs(x = "Peso (kg)", y = "Consumo (km/L)", color = "Cilindros",
title = "Peso x consumo dos automóveis") +
theme_minimal(base_size = 13)
Figura 1 – Gráfico de dispersão entre o peso e o consumo dos carros, com reta de regressão linear.
A figura mostra uma relação negativa: carros mais pesados tendem a consumir mais combustível (menos km/L).
etapas <- data.frame(
x = 1:5,
y = 1,
etapa = c("Coleta\ndos dados", "Limpeza e\ntransformação",
"Análise\nexploratória", "Modelagem", "Comunicação\ndos resultados")
)
ggplot(etapas, aes(x, y)) +
geom_segment(data = etapas[1:4, ],
aes(x = x + 0.32, xend = x + 0.68, y = y, yend = y),
arrow = arrow(length = unit(0.25, "cm")), linewidth = 0.8) +
geom_label(aes(label = etapa, fill = etapa), size = 4, show.legend = FALSE,
label.padding = unit(0.5, "lines")) +
xlim(0.5, 5.5) +
theme_void()
Figura 2 – Fluxo de trabalho de um projeto de ciência de dados.
Um projeto de ciência de dados normalmente segue estas etapas: coletar os dados, limpá-los e transformá-los, explorá-los visualmente e estatisticamente, construir modelos e, por fim, comunicar os resultados.
As referências abaixo são geradas automaticamente a partir do arquivo
referencias.bib. Exemplos de citação no texto: regressão
linear (Hastie et al.
2009), introdução prática com R (James et al. 2021), aprendizado
profundo e otimização (Goodfellow et al. 2016),
manipulação de dados com o tidyverse (Wickham and Grolemund 2017) e R
Markdown (Xie et al.
2018).