Relatório

1. Manipulação de Dados

1.1 Conjunto de dados escolhido

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.2 Carregamento e inspeção inicial

dados <- mtcars
dim(dados)        # número de linhas e colunas
## [1] 32 11
head(dados, 6)    # primeiras observações
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.

1.3 Criação de novas variáveis (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).
table(carros$categoria_consumo)
## 
## 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.

1.4 Ordenação (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.

1.5 Filtragem (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).

1.6 Agrupamento e resumo (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:

  • Carros de 4 cilindros fazem em média 11.33 km/L;
  • carros de 8 cilindros fazem apenas 6.42 km/L, ou seja, cerca de 43% a menos;
  • ao mesmo tempo, a potência média sobe de 83 cv para 209 cv e o peso médio aumenta em 777 kg.
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
cor_peso_consumo <- cor(carros$peso_kg, carros$km_por_litro)

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.

1.7 Conclusão da análise (estrutura em 3 atos)

  • Ato 1 – Contexto: queremos entender o que determina a eficiência de combustível de 32 modelos de carros.
  • Ato 2 – Conflito/insight: economia e potência raramente andam juntas; mais cilindros e mais peso reduzem fortemente os km/L.
  • Ato 3 – Resolução: para quem prioriza economia, a recomendação é escolher carros leves e de 4 cilindros; o peso é o fator mais associado ao consumo.

2. Tabela Interativa (DT)

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")

3. Equações em LaTeX

Equação 1 – Função densidade da distribuição Normal

\[ 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.

Equação 2 – Estimador de Mínimos Quadrados Ordinários (MQO)

\[ \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.

Equação 3 – Coeficiente de correlação de Pearson

\[ 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.

Equação 4 – Teorema de Bayes

\[ 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.

Equação 5 – Função de custo da Regressão Logística (entropia cruzada)

\[ 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.

4. Figuras

Figura 1 – Relação entre peso e consumo

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).

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.

Figura 2 – Ciclo de um projeto de Ciência de Dados

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.

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.

5. Referências

  1. KNAFLIC, Cole Nussbaumer. Storytelling com dados: um guia sobre visualização de dados para profissionais de negócios. Rio de Janeiro: Alta Books, 2018.

  2. 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/.

  3. 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/.

  4. 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/.

  5. 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.