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: