Foi utilizado o conjunto de dados
mtcars, que já vem embutido no R. Ele foi
extraído da revista Motor Trend US (1974) e contém 32
modelos de automóveis descritos por 11
variáveis de desempenho e projeto. As variáveis usadas neste
relatório são:
| Variável | Significado |
|---|---|
mpg |
Consumo em milhas por galão (miles per gallon) |
cyl |
Número de cilindros |
hp |
Potência bruta (cavalos) |
wt |
Peso (em 1.000 libras) |
am |
Tipo de transmissão (0 = automática, 1 = manual) |
qsec |
Tempo para percorrer 1/4 de milha (segundos) |
## [1] 32 11
| 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 |
| Valiant | 18.1 | 6 | 225 | 105 | 2.76 | 3.460 | 20.22 | 1 | 0 | 3 | 1 |
Explicação: a função dim() confirma que
a base tem 32 linhas (carros) e 11 colunas (variáveis). O nome de cada
modelo está guardado nos nomes das linhas, e não em uma coluna;
por isso, o primeiro passo da manipulação será transformá-lo em uma
variável.
mutate)As unidades originais estão no sistema imperial. Para facilitar a leitura no Brasil, foram criadas variáveis no sistema métrico e variáveis categóricas mais legíveis:
carros <- dados %>%
tibble::rownames_to_column(var = "modelo") %>% # nome do carro vira coluna
mutate(
km_por_litro = round(mpg * 0.425144, 2), # 1 mpg = 0,425144 km/L
peso_kg = round(wt * 1000 * 0.453592, 0), # 1.000 lb -> kg
transmissao = ifelse(am == 1, "Manual", "Automática"),
potencia_por_tonelada = round(hp / (peso_kg / 1000), 1),
categoria_consumo = cut(km_por_litro,
breaks = c(-Inf, 7, 10, Inf),
labels = c("Alto consumo", "Moderado", "Econômico"))
) %>%
select(modelo, cyl, hp, peso_kg, transmissao, km_por_litro,
potencia_por_tonelada, categoria_consumo, qsec)
head(carros, 6)| modelo | cyl | hp | peso_kg | transmissao | km_por_litro | potencia_por_tonelada | categoria_consumo | qsec |
|---|---|---|---|---|---|---|---|---|
| Mazda RX4 | 6 | 110 | 1188 | Manual | 8.93 | 92.6 | Moderado | 16.46 |
| Mazda RX4 Wag | 6 | 110 | 1304 | Manual | 8.93 | 84.4 | Moderado | 17.02 |
| Datsun 710 | 4 | 93 | 1052 | Manual | 9.69 | 88.4 | Moderado | 18.61 |
| Hornet 4 Drive | 6 | 110 | 1458 | Automática | 9.10 | 75.4 | Moderado | 19.44 |
| Hornet Sportabout | 8 | 175 | 1560 | Automática | 7.95 | 112.2 | Moderado | 17.02 |
| Valiant | 6 | 105 | 1569 | Automática | 7.70 | 66.9 | Moderado | 20.22 |
Explicação:
rownames_to_column() transforma o nome dos modelos em
uma coluna chamada modelo.km_por_litro converte o consumo para
km/L, unidade usada no Brasil.peso_kg converte o peso de milhares de libras para
quilogramas.transmissao substitui o código 0/1 por rótulos
compreensíveis.potencia_por_tonelada é um indicador de desempenho:
quanto maior, mais “esportivo” o carro tende a ser.categoria_consumo agrupa os carros em três faixas de
eficiência (até 7 km/L, de 7 a 10 km/L e acima de 10 km/L).##
## Alto consumo Moderado Econômico
## 11 14 7
Pela contagem, 11 carros estão na faixa de alto consumo, 14 são moderados e 7 são econômicos.
arrange)top_economicos <- carros %>%
arrange(desc(km_por_litro)) %>%
select(modelo, km_por_litro, peso_kg, transmissao) %>%
head(5)
top_economicos| modelo | km_por_litro | peso_kg | transmissao |
|---|---|---|---|
| Toyota Corolla | 14.41 | 832 | Manual |
| Fiat 128 | 13.77 | 998 | Manual |
| Honda Civic | 12.92 | 733 | Manual |
| Lotus Europa | 12.92 | 686 | Manual |
| Fiat X1-9 | 11.61 | 878 | Manual |
Explicação: ordenando os carros pelo consumo em ordem decrescente, o mais econômico é o Toyota Corolla, com 14.41 km/L. Observe que os cinco mais econômicos têm em comum o baixo peso (todos abaixo de 998 kg) e, em sua maioria, transmissão Manual.
filter)Pergunta: quais carros combinam boa economia (mais de 9 km/L) com potência acima de 100 cv?
equilibrados <- carros %>%
filter(km_por_litro > 9, hp > 100) %>%
arrange(desc(potencia_por_tonelada)) %>%
select(modelo, km_por_litro, hp, potencia_por_tonelada)
equilibrados| modelo | km_por_litro | hp | potencia_por_tonelada |
|---|---|---|---|
| Lotus Europa | 12.92 | 113 | 164.7 |
| Volvo 142E | 9.10 | 109 | 86.4 |
| Hornet 4 Drive | 9.10 | 110 | 75.4 |
Explicação: apenas 3 dos 32 carros atendem às duas condições ao mesmo tempo, o que mostra que economia e potência costumam caminhar em direções opostas. Entre eles, o Lotus Europa tem a melhor relação potência/peso (164.7 cv por tonelada).
group_by +
summarise)resumo_cilindros <- carros %>%
group_by(cyl) %>%
summarise(
n_carros = n(),
consumo_medio = round(mean(km_por_litro), 2),
potencia_media = round(mean(hp), 0),
peso_medio_kg = round(mean(peso_kg), 0)
) %>%
arrange(cyl)
resumo_cilindros| cyl | n_carros | consumo_medio | potencia_media | peso_medio_kg |
|---|---|---|---|---|
| 4 | 11 | 11.33 | 83 | 1037 |
| 6 | 7 | 8.40 | 122 | 1414 |
| 8 | 14 | 6.42 | 209 | 1814 |
Explicação: o resumo por número de cilindros revela um padrão claro:
resumo_transmissao <- carros %>%
group_by(transmissao) %>%
summarise(n_carros = n(),
consumo_medio = round(mean(km_por_litro), 2),
peso_medio_kg = round(mean(peso_kg), 0))
resumo_transmissao| transmissao | n_carros | consumo_medio | peso_medio_kg |
|---|---|---|---|
| Automática | 19 | 7.29 | 1709 |
| Manual | 13 | 10.37 | 1094 |
Explicação: os carros manuais são, em média, mais econômicos. Porém, eles também são mais leves — e a correlação entre peso e consumo é de r = -0.87, uma relação negativa forte. Isso sugere que boa parte da vantagem dos manuais vem do peso, e não apenas do tipo de câmbio.
A tabela abaixo apresenta a base carros (já manipulada
na aba 1) com o pacote DT. É possível
ordenar clicando no cabeçalho das colunas,
buscar pelo campo de pesquisa geral ou pelos filtros de
cada coluna, e navegar entre páginas. As cores destacam
a categoria de consumo e a barra indica o km/L.
datatable(
carros,
rownames = FALSE,
filter = "top",
colnames = c("Modelo", "Cilindros", "Potência (cv)", "Peso (kg)",
"Transmissão", "km/L", "cv/tonelada", "Categoria", "1/4 milha (s)"),
caption = htmltools::tags$caption(
style = "caption-side: top; text-align: left; font-weight: bold;",
"Tabela 1 – Carros da base mtcars com variáveis convertidas para o sistema métrico"
),
extensions = "Buttons",
options = list(
pageLength = 8,
lengthMenu = c(5, 8, 16, 32),
dom = "Bfrtip",
buttons = c("copy", "csv", "excel"),
language = list(url = "https://cdn.datatables.net/plug-ins/1.13.6/i18n/pt-BR.json"),
order = list(list(5, "desc"))
)
) %>%
formatStyle("km_por_litro",
background = styleColorBar(range(carros$km_por_litro), "#9ecae1"),
backgroundSize = "95% 70%", backgroundRepeat = "no-repeat",
backgroundPosition = "center") %>%
formatStyle("categoria_consumo",
color = styleEqual(c("Alto consumo", "Moderado", "Econômico"),
c("#c0392b", "#d68910", "#1e8449")),
fontWeight = "bold")\[ f(x \mid \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\!\left( -\frac{(x-\mu)^2}{2\sigma^2} \right), \qquad x \in \mathbb{R} \]
Significado: descreve a probabilidade relativa de uma variável contínua assumir o valor \(x\) quando ela segue uma distribuição Normal com média \(\mu\) e variância \(\sigma^2\). É a famosa “curva em forma de sino”, base de testes de hipóteses, intervalos de confiança e do Teorema Central do Limite.
\[ \hat{\boldsymbol{\beta}} = \arg\min_{\boldsymbol{\beta}} \sum_{i=1}^{n} \left( y_i - \mathbf{x}_i^{\top}\boldsymbol{\beta} \right)^2 = \left( \mathbf{X}^{\top}\mathbf{X} \right)^{-1} \mathbf{X}^{\top}\mathbf{y} \]
Significado: fornece os coeficientes da regressão linear múltipla que minimizam a soma dos quadrados dos resíduos. \(\mathbf{X}\) é a matriz de variáveis explicativas e \(\mathbf{y}\) o vetor da variável resposta. Por exemplo, permitiria estimar quanto o consumo (km/L) cai para cada quilo a mais de peso do carro.
\[ r_{xy} = \frac{\displaystyle\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})} {\sqrt{\displaystyle\sum_{i=1}^{n} (x_i - \bar{x})^2}\; \sqrt{\displaystyle\sum_{i=1}^{n} (y_i - \bar{y})^2}} \]
Significado: mede a força e a direção da relação linear entre duas variáveis, variando de \(-1\) (relação negativa perfeita) a \(+1\) (relação positiva perfeita). Foi a medida usada na aba 1 para mostrar que peso e consumo têm correlação de -0.87.
\[ P(\theta \mid D) = \frac{P(D \mid \theta)\, P(\theta)} {\displaystyle\int P(D \mid \theta')\, P(\theta')\, d\theta'} \]
Significado: mostra como atualizar a crença sobre um parâmetro \(\theta\) depois de observar os dados \(D\). A posteriori \(P(\theta \mid D)\) combina a verossimilhança \(P(D \mid \theta)\) com a priori \(P(\theta)\), sendo o denominador uma constante de normalização. É a base da estatística bayesiana e de classificadores como o Naive Bayes.
\[ J(\boldsymbol{\theta}) = -\frac{1}{m} \sum_{i=1}^{m} \Big[ y^{(i)} \log h_{\boldsymbol{\theta}}\big(\mathbf{x}^{(i)}\big) + \big(1 - y^{(i)}\big) \log\Big(1 - h_{\boldsymbol{\theta}}\big(\mathbf{x}^{(i)}\big)\Big) \Big], \quad h_{\boldsymbol{\theta}}(\mathbf{x}) = \frac{1}{1 + e^{-\boldsymbol{\theta}^{\top}\mathbf{x}}} \]
Significado: é a função que o algoritmo de regressão logística minimiza durante o treinamento para problemas de classificação binária (\(y \in \{0,1\}\)). A função sigmoide \(h_{\boldsymbol{\theta}}(\mathbf{x})\) transforma uma combinação linear em uma probabilidade entre 0 e 1, e o custo penaliza fortemente previsões confiantes que estão erradas.
ggplot(carros, aes(x = peso_kg, y = km_por_litro)) +
geom_smooth(method = "lm", se = TRUE, color = "grey40", fill = "grey85") +
geom_point(aes(color = factor(cyl)), size = 3.5, alpha = 0.85) +
scale_color_manual(values = c("4" = "#1e8449", "6" = "#d68910", "8" = "#c0392b"),
name = "Cilindros") +
annotate("text", x = max(carros$peso_kg) - 300, y = max(carros$km_por_litro) - 0.5,
label = paste0("r = ", round(cor_peso_consumo, 2)),
size = 5, fontface = "bold") +
labs(title = "Quanto mais pesado o carro, maior o consumo de combustível",
x = "Peso (kg)", y = "Consumo (km/L)",
caption = "Fonte: base mtcars (Motor Trend, 1974)") +
theme_minimal(base_size = 13) +
theme(plot.title = element_text(face = "bold"), legend.position = "top")Figura 1 – Carros mais pesados percorrem menos quilômetros por litro. A reta mostra a tendência estimada por regressão linear (MQO).
A Figura 1 aplica os princípios de storytelling: título que conta a conclusão, cores com significado (verde = econômico, vermelho = alto consumo) e uma única mensagem clara.
etapas <- data.frame(
etapa = c("Importar", "Organizar", "Transformar", "Visualizar",
"Modelar", "Comunicar"),
x = (1:6) * 1.4,
y = 1,
grupo = c("Preparação", "Preparação", "Exploração", "Exploração",
"Exploração", "Storytelling")
)
ggplot(etapas, aes(x = x, y = y)) +
geom_segment(data = etapas[-6, ],
aes(x = x + 0.55, xend = x + 0.85, y = y, yend = y),
arrow = arrow(length = unit(0.25, "cm"), type = "closed"),
linewidth = 0.8, color = "grey35") +
geom_curve(aes(x = 7.0, y = 0.85, xend = 4.2, yend = 0.85),
curvature = -0.35, linetype = "dashed", color = "grey50",
arrow = arrow(length = unit(0.2, "cm"))) +
annotate("text", x = 5.6, y = 0.68, label = "ciclo iterativo de exploração",
color = "grey40", size = 3.8, fontface = "italic") +
geom_label(aes(label = etapa, fill = grupo), color = "white",
fontface = "bold", size = 4.3, label.padding = unit(0.5, "lines")) +
scale_fill_manual(values = c("Preparação" = "#2e86c1",
"Exploração" = "#7d3c98",
"Storytelling" = "#cb4335"),
breaks = c("Preparação", "Exploração", "Storytelling"),
name = NULL) +
scale_x_continuous(limits = c(0.8, 9.0)) +
scale_y_continuous(limits = c(0.6, 1.1)) +
labs(title = "Fluxo de trabalho em Ciência de Dados") +
theme_void(base_size = 13) +
theme(plot.title = element_text(face = "bold", hjust = 0.5),
legend.position = "bottom")Figura 2 – Etapas de um projeto de Ciência de Dados, adaptado de Wickham, Çetinkaya-Rundel e Grolemund (2023). O storytelling está na etapa final de comunicação.
A Figura 2 mostra que o storytelling com dados é a etapa que transforma o trabalho técnico (importar, organizar, transformar, visualizar e modelar) em decisões: sem uma comunicação clara, os insights não geram ação.
KNAFLIC, Cole Nussbaumer. Storytelling com dados: um guia sobre visualização de dados para profissionais de negócios. Rio de Janeiro: Alta Books, 2018.
WICKHAM, Hadley; ÇETINKAYA-RUNDEL, Mine; GROLEMUND, Garrett. R for Data Science: import, tidy, transform, visualize, and model data. 2. ed. Sebastopol: O’Reilly Media, 2023. Disponível em: https://r4ds.hadley.nz/.
XIE, Yihui; ALLAIRE, J. J.; GROLEMUND, Garrett. R Markdown: the definitive guide. Boca Raton: Chapman and Hall/CRC, 2018. Disponível em: https://bookdown.org/yihui/rmarkdown/.
JAMES, Gareth; WITTEN, Daniela; HASTIE, Trevor; TIBSHIRANI, Robert. An Introduction to Statistical Learning: with applications in R. 2. ed. New York: Springer, 2021. Disponível em: https://www.statlearning.com/.
HENDERSON, Harold V.; VELLEMAN, Paul F. Building multiple
regression models interactively. Biometrics, v. 37,
n. 2, p. 391–411, 1981. (Artigo de origem do conjunto de dados
mtcars.)
Pacotes R utilizados: dplyr,
ggplot2, DT, rmarkdown e
knitr. Para citá-los, use
citation("nome_do_pacote") no console do R.