Relatório da Atividade

Manipulação de Dados

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.

Carregando e Inspecionando os Dados

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

Manipulação e Limpeza dos Dados

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:

  1. filter(): Manter apenas species == "Human".
  2. mutate(): Criar a coluna bmi (IMC) com a fórmula \(massa / (altura / 100)^2\) e arredondar para 2 casas.
  3. arrange(): Ordenar o resultado pelo bmi em ordem decrescente.
  4. 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.

Tabela Interativa

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:

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

  2. Busca: Há uma barra de busca global no canto superior direito para pesquisar em toda a tabela.

  3. Ordenação: Você pode clicar no cabeçalho de qualquer coluna (ex: height ou mass) para reordenar os dados.

  4. Filtragem: por causa do argumento filter = ‘top’, é possível filtrar dados específicos em cada coluna.

Equações LaTeX

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

Figuras

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.


Gráficos Gerados via R

Aqui, criamos visualizações de dados diretamente do nosso dataset starwars.

Figura 1: Gráfico de Dispersão (Altura vs. Massa)

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

Imagens Externas via URL

Agora, para incluir duas imagens externas usando o método básico de Markdown

A sintaxe é: ![Legenda](URL_da_imagem)

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:

Figura 3: Millenium Falcon.
Figura 3: Millenium Falcon.
Figura 4: Darth Vader.
Figura 4: Darth Vader.

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.

Referências Bibliográficas

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:

Allentoft, Morten E, Matthew Collins, David Harker, James Haile, Charlotte L Oskam, Marie L Hale, Paula F Campos, Josefin A Samhold, Eske Willerslev, and M Thomas P Gilbert. 2012. “The Half-Life of DNA in Bone: Measuring Decay Kinetics in 158 Dated Fossils.” Proceedings of the Royal Society B: Biological Sciences 279 (1748): 4724–33.
Archer, Michael. 2017. “De-Extinction: Jurassic Park and the Prospect of Bringing Extinct Animals Back to Life.” The Conversation.
Bailleul, Alida M, Wenxia Zheng, John R Horner, Brian K Hall, Casey M Holliday, and Mary H Schweitzer. 2020. “Evidence of Proteins, Chromosomes and Chemical Markers of DNA in Exceptionally Preserved Dinosaur Cartilage.” National Science Review 7 (4): 815–22.
Crichton, Michael. 1990. Jurassic Park. Alfred A. Knopf.
Doyle, Laurance R, Joshua A Carter, Daniel C Fabrycky, Robert W Slawson, Steve B Howell, Joshua N Winn, Jerome A Orosz, Andrej Prša, William F Welsh, and Samuel N Quinn. 2011. “Kepler-16 (AB) b: A Transiting Circumbinary Planet.” Science 333 (6049): 1602–6.
Lucas, George. 1977. Star Wars: Episode IV – a New Hope. 20th Century Fox.
Spielberg, Steven. 1993. Jurassic Park. Universal Pictures.
Wickham, Hadley, and Garrett Grolemund. 2017. R for Data Science: Import, Tidy, Transform, Visualize, and Model Data. O’Reilly Media.
Xie, Yihui, J. J. Allaire, and Garrett Grolemund. 2018. R Markdown: The Definitive Guide. Chapman; Hall/CRC. https://bookdown.org/yihui/rmarkdown/.
Zecca, Giuseppina. 2018. “May the Force Be with You: The Psychoanalysis of Star Wars.” International Journal of Psychoanalysis 99 (3): 719–28.