Nesta seção, o objetivo é carregar um conjunto de dados e realizar manipulações básicas, explicando cada etapa do processo. Escolhi o dataset starwars, que já vem incluso no pacote dplyr.
O primeiro passo em qualquer análise é carregar e inspecionar nossos dados. Vamos carregar o dataset starwars e usar a função head() para visualizar as primeiras 6 linhas do dataframe, entender sua estrutura, os nomes das colunas e os tipos de dados que elas contêm, sem precisar imprimir o dataset inteiro.
# O dataset já está disponível ao carregar o dplyr
data(starwars)
# Exibir as primeiras linhas
head(starwars)
## # A tibble: 6 × 14
##   name      height  mass hair_color skin_color eye_color birth_year sex   gender
##   <chr>      <int> <dbl> <chr>      <chr>      <chr>          <dbl> <chr> <chr> 
## 1 Luke Sky…    172    77 blond      fair       blue            19   male  mascu…
## 2 C-3PO        167    75 <NA>       gold       yellow         112   none  mascu…
## 3 R2-D2         96    32 <NA>       white, bl… red             33   none  mascu…
## 4 Darth Va…    202   136 none       white      yellow          41.9 male  mascu…
## 5 Leia Org…    150    49 brown      light      brown           19   fema… femin…
## 6 Owen Lars    178   120 brown, gr… light      blue            52   male  mascu…
## # ℹ 5 more variables: homeworld <chr>, species <chr>, films <list>,
## #   vehicles <list>, starships <list>
Temos colunas como name (personagem), height (altura em cm), mass (massa em kg), species (espécie) e homeworld (planeta). Há dados numéricos, dados de texto e “listas” (como films).
Ao manipular os dados inicialmente o objetivo é criar uma tabela que mostre o Índice de Massa Corporal (IMC) apenas dos personagens humanos, no seguinte pipe:
filter(): Manter apenas
species == "Human".mutate(): Criar a coluna
bmi (IMC) com a fórmula \(massa /
(altura / 100)^2\) e arredondar para 2 casas.arrange(): Ordenar o resultado pelo
bmi em ordem decrescente.select(): Selecionar apenas as colunas
que nos interessam.# Aplicar a sequência de manipulações
dados_manipulados_sw <- starwars %>%
  filter(species == "Human") %>%
  # Etapa de limpeza: remover NAs antes do cálculo
  filter(!is.na(mass) & !is.na(height)) %>%
  mutate(bmi = round(mass / (height / 100)^2, 2)) %>%
  arrange(desc(bmi)) %>%
  select(name, homeworld, height, mass, bmi)
# Exibir o resultado da manipulação
print(dados_manipulados_sw, n = 15)
## # A tibble: 20 × 5
##    name               homeworld    height  mass   bmi
##    <chr>              <chr>         <int> <dbl> <dbl>
##  1 Owen Lars          Tatooine        178 120    37.9
##  2 Darth Vader        Tatooine        202 136    33.3
##  3 Beru Whitesun Lars Tatooine        165  75    27.6
##  4 Wedge Antilles     Corellia        170  77    26.6
##  5 Luke Skywalker     Tatooine        172  77    26.0
##  6 Palpatine          Naboo           170  75    26.0
##  7 Lobot              Bespin          175  79    25.8
##  8 Lando Calrissian   Socorro         177  79    25.2
##  9 Biggs Darklighter  Tatooine        183  84    25.1
## 10 Han Solo           Corellia        180  80    24.7
## 11 Qui-Gon Jinn       <NA>            193  89    23.9
## 12 Anakin Skywalker   Tatooine        188  84    23.8
## 13 Mace Windu         Haruun Kal      188  84    23.8
## 14 Jango Fett         Concord Dawn    183  79    23.6
## 15 Boba Fett          Kamino          183  78.2  23.4
## # ℹ 5 more rows
A tabela acima mostra o resultado final da nossa manipulaçãoe
filtragem: a coluna bmi foi criada com os daados de massa e altura
válidos (sem NAs), a tabela está ordenada por IMC, só as
colunas selecionadas são exibidas.
Uma tabela interativa foi criada usando o pacote DT e
permite exibir dataframes como tabelas HTML interativas.
Para esta demonstração e manter a consistência do relatório, uso o
mesmo dataset: o starwars.
No código abaixo, usamos a função DT::datatable() e
passamos algumas opções: * filter = 'top': Adiciona campos
de filtro no topo de cada coluna. *
options = list(pageLength = 5): Define que a tabela deve
mostrar 5 linhas por página (paginação). * caption = '...':
Adiciona um título à tabela.
DT::datatable(
  starwars,
  filter = 'top',
  options = list(pageLength = 5, autoWidth = TRUE),
  caption = 'Tabela Interativa do Dataset Starwars'
)
O resultado acima é uma tabela HTML interativa do dataset starwars. Com as seguintes funcionalidades:
Paginação: A tabela exibe por padrão 5 linhas por vez, com os botões “Previous” e “Next” para navegar. Mas pode ser modificado
Busca: Há uma barra de busca global no canto superior direito para pesquisar em toda a tabela.
Ordenação: Você pode clicar no cabeçalho de qualquer coluna (ex: height ou mass) para reordenar os dados.
Filtragem: por causa do argumento filter = ‘top’, é possível filtrar dados específicos em cada coluna.
O R Markdown permite escrever LaTeX diretamente no documento. Usamos
$$...$$ para criar uma equação em bloco (centralizada em
sua própria linha).
Abaixo estão cinco equações fundamentais em Ciência de Dados e Estatística:
1. Teorema de Bayes \[P(A|B) = \frac{P(B|A) P(A)}{P(B)}\] Significado: Descreve a probabilidade de um evento (\(A\)), baseado no conhecimento prévio de condições que podem estar relacionadas a esse evento (\(B\)). É a base de muitos algoritmos de classificação, como o Naive Bayes.
2. Fórmula da Entropia (Teoria da Informação) \[H(X) = -\sum_{i=1}^{n} P(x_i) \log_b P(x_i)\] Significado: Mede a “impureza” ou “incerteza” de um conjunto de dados. Em machine learning, é usada em Árvores de Decisão para calcular o “ganho de informação” e decidir qual variável usar para dividir os dados.
3. Fator de Lorentz (Relatividade Especial) \[\gamma = \frac{1}{\sqrt{1 - \frac{v^2}{c^2}}}\] Significado: O Fator Gamma (\(\gamma\)) é o coração da relatividade especial. Ele descreve como a percepção do tempo e do espaço muda para um objeto viajando a uma velocidade muito alta (\(v\)) próxima à velocidade da luz (\(c\)). É a física que explica a “dilatação do tempo” em viagens no hiperespaço.
4. Equação de Drake \[N = R_* \cdot f_p \cdot n_e \cdot f_l \cdot f_i
\cdot f_c \cdot L\] Significado: Embora seja uma
estimativa probabilística e não uma lei da física, esta equação tenta
estimar o número (\(N\)) de
civilizações tecnologicamente ativas em nossa galáxia. É uma equação
fundamental para pensar sobre a diversidade de espécies
(species) que vemos no universo
starwars.
5. Distância Euclidiana \[d(\mathbf{p}, \mathbf{q}) = \sqrt{\sum_{i=1}^{n} (q_i - p_i)^2}\] Significado: Calcula a distância em linha reta entre dois pontos (\(\mathbf{p}\) e \(\mathbf{q}\)) em um espaço de \(n\) dimensões. É fundamental para algoritmos baseados em distância, como o K-Nearest Neighbors (KNN).
Para demonstrar a flexibilidade do R Markdown, incluí um total de
quatro figuras: duas geradas por código R (ggplot2) e duas
imagens externas carregadas de URLs.
Aqui, criamos visualizações de dados diretamente do nosso dataset
starwars.
Para a primeira figura, criaremos um gráfico de dispersão
(geom_point) para explorar a relação entre a altura
(height) e a massa (mass) dos personagens.
Também vamos colorir os pontos pela coluna gender
(gênero).
# Usar o ggplot2 para criar um gráfico de dispersão
ggplot(
  data = starwars %>% filter(!is.na(mass) & !is.na(height)), 
  aes(x = height, y = mass, color = gender)
) +
  geom_point(alpha = 0.7, size = 3) +
  labs(
    title = "Figura 1: Relação entre Altura e Massa dos Personagens",
    x = "Altura (em cm)",
    y = "Massa (em kg)",
    color = "Gênero"
  ) +
  theme_minimal()
O gráfico acima permite identificar visualmente tendências (personagens mais altos tendem a ser mais pesados) e outliers.
Para a segunda figura e para saber quais planetas são mais frequentes no dataset será utilizado um gráfico de barras (geom_col) para contar a ocorrência de cada planeta. Para manter o gráfico legível e limpo, vamos filtrar para manter apenas aqueles com 5 ou mais personagens originados de lá.
# 1. Preparar os dados: contar planetas com mais de 5 personagens
planetas_comuns <- starwars %>%
  filter(!is.na(homeworld)) %>%
  count(homeworld, sort = TRUE) %>%
  filter(n >= 5)
# 2. Criar o gráfico de barras
ggplot(
  data = planetas_comuns, 
  aes(x = reorder(homeworld, -n), y = n, fill = homeworld)
) +
  geom_col() +
  labs(
    title = "Figura 2: Contagem de Personagens por Planeta Natal",
    subtitle = "Mostrando apenas planetas com 5 ou mais personagens",
    x = "Planeta Natal",
    y = "Número de Personagens"
  ) +
  theme_light() +
  theme(legend.position = "none")
Agora, para incluir duas imagens externas usando o método básico de Markdown
A sintaxe é: 
OBS: é necessário a permissão de Self contained: false para carregar as imagens dos links e no rpub não funciona corretamente, por motivos de limitação, mas localmente elas são carregadas corretamente:
As duas imagens acima foram baixadas das URLs e renderizadas no relatório. Este método básico de Markdown é a forma mais rápida e simples de incluir imagens externas.
Utilizando um arquivo BibTeX (.bib) para gerenciar as
referências e um arquivo YAML foi atualizado para incluí-lo.
O R Markdown agora irá formatar e listar automaticamente qualquer
referência que for citada no texto. Para citar uma referência,
usamos sua chave como @crichton1990jurassic.
Seguem as referências: