Este relatório apresenta uma análise exploratória reprodutível: carregamento e manipulação de dados, tabela interativa, fundamentos matemáticos, visualizações e referências. Cada requisito da atividade possui uma aba própria.
Objetivo: observar como as medidas das flores variam entre espécies e demonstrar operações simples de preparação de dados. Não serão ajustados modelos preditivos; as equações da terceira aba são apresentadas como fundamentos teóricos.
Utiliza-se iris, disponível no pacote
datasets, que acompanha a instalação do R. Segundo a documentação
oficial [1], o conjunto contém 150 flores, distribuídas igualmente
entre três espécies, e quatro medidas em centímetros. Não é necessário
baixar uma base externa.
# Carrega a base e cria uma cópia para preservar o conjunto original.
data("iris", package = "datasets")
dados <- iris
# Identificador que mantém a ligação com a linha original após a ordenação.
dados$id_flor <- seq_len(nrow(dados))
# Dimensões, tipos de variáveis e primeiras observações.
dim(iris)## [1] 150 5
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species id_flor
## 1 5.1 3.5 1.4 0.2 setosa 1
## 2 4.9 3.0 1.4 0.2 setosa 2
## 3 4.7 3.2 1.3 0.2 setosa 3
## 4 4.6 3.1 1.5 0.2 setosa 4
## 5 5.0 3.6 1.4 0.2 setosa 5
## 6 5.4 3.9 1.7 0.4 setosa 6
A base original possui 150 observações e 5
variáveis. As quatro medidas são numéricas;
Species é um fator com três categorias. O identificador
acrescentado não representa uma medida biológica.
| Variável original | Significado | Unidade/tipo |
|---|---|---|
Sepal.Length |
Comprimento da sépala | cm |
Sepal.Width |
Largura da sépala | cm |
Petal.Length |
Comprimento da pétala | cm |
Petal.Width |
Largura da pétala | cm |
Species |
Espécie da flor | setosa, versicolor ou virginica |
Antes das transformações, verificam-se valores ausentes, frequência das espécies e estatísticas descritivas. Valores ausentes poderiam afetar filtros e médias.
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species id_flor
## 0 0 0 0 0 0
##
## setosa versicolor virginica
## 50 50 50
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50
## Median :5.800 Median :3.000 Median :4.350 Median :1.300 virginica :50
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Foram encontrados 0 valores ausentes. Cada espécie possui 50 observações. O comprimento da pétala varia de 1,0 a 6,9 cm. As verificações permitem seguir com a transformação sem imputação nesta base.
Criam-se um indicador de tamanho da pétala e uma razão entre medidas da sépala. As operações são vetorizadas: o R calcula o resultado para todas as linhas.
# Produto comprimento x largura da pétala: indicador em cm².
dados$area_proxy_petala <- dados$Petal.Length * dados$Petal.Width
# Razão sem unidade; valores maiores indicam sépalas mais alongadas.
stopifnot(all(dados$Sepal.Width > 0))
dados$razao_sepala <- dados$Sepal.Length / dados$Sepal.Width
head(dados[, c("id_flor", "Species", "area_proxy_petala", "razao_sepala")])## id_flor Species area_proxy_petala razao_sepala
## 1 1 setosa 0.28 1.457143
## 2 2 setosa 0.28 1.633333
## 3 3 setosa 0.26 1.468750
## 4 4 setosa 0.30 1.483871
## 5 5 setosa 0.28 1.388889
## 6 6 setosa 0.68 1.384615
Interpretação: area_proxy_petala é o
produto das duas medidas, e não uma medição da área real da
pétala, que não possui necessariamente forma retangular. Para a
primeira flor, o produto é 1,4 × 0,2 = 0,28 cm². Sua
razão da sépala é 1,46, indicando comprimento maior que
largura. A base passa a ter 8 colunas.
Selecionam-se flores com comprimento de pétala maior ou igual a 5 cm. O limite é uma escolha didática para explorar pétalas compridas, sem pretensão de representar uma regra de classificação validada.
# Mantém somente as linhas que satisfazem a condição.
filtrados <- dados[dados$Petal.Length >= 5, ]
# Compara o tamanho da base antes e depois do filtro.
data.frame(
etapa = c("Base completa", "Pétala >= 5 cm"),
observacoes = c(nrow(dados), nrow(filtrados))
)## etapa observacoes
## 1 Base completa 150
## 2 Pétala >= 5 cm 46
##
## setosa versicolor virginica
## 0 2 44
O filtro mantém 46 de 150 flores (30,7%). Permanecem
2 flores versicolor e 44 virginica; nenhuma setosa satisfaz o critério.
O fator ainda mantém os três níveis, por isso table() exibe
setosa com frequência zero. Os resultados seguintes do subconjunto
descrevem apenas as flores selecionadas, e não toda a base.
Organizam-se as flores selecionadas do maior para o menor indicador de tamanho da pétala. O identificador original resolve eventuais empates de maneira estável.
# O sinal negativo produz ordem decrescente para o indicador de tamanho.
ordenados <- filtrados[
order(-filtrados$area_proxy_petala, filtrados$id_flor),
]
rownames(ordenados) <- NULL
head(ordenados[, c(
"id_flor", "Species", "Petal.Length", "Petal.Width", "area_proxy_petala"
)], 10)## id_flor Species Petal.Length Petal.Width area_proxy_petala
## 1 119 virginica 6.9 2.3 15.87
## 2 110 virginica 6.1 2.5 15.25
## 3 101 virginica 6.0 2.5 15.00
## 4 118 virginica 6.7 2.2 14.74
## 5 145 virginica 5.7 2.5 14.25
## 6 136 virginica 6.1 2.3 14.03
## 7 106 virginica 6.6 2.1 13.86
## 8 144 virginica 5.9 2.3 13.57
## 9 137 virginica 5.6 2.4 13.44
## 10 141 virginica 5.6 2.4 13.44
A primeira linha corresponde à flor de identificador 119, da espécie virginica, com indicador de tamanho 15,87 cm². A ordenação muda a posição das linhas, mas não altera os valores nem o número de flores. A aba 2 permite investigar todo esse subconjunto.
Calculam-se médias na base completa, para comparar as três espécies sem o efeito da seleção por comprimento de pétala.
# Médias das medidas e do indicador de tamanho, agrupadas por espécie.
resumo <- aggregate(
cbind(Petal.Length, Petal.Width, area_proxy_petala) ~ Species,
data = dados,
FUN = mean
)
# Contagem de observações em cada grupo.
resumo$n <- as.integer(table(dados$Species)[as.character(resumo$Species)])
knitr::kable(
resumo[, c("Species", "n", "Petal.Length", "Petal.Width", "area_proxy_petala")],
digits = 3,
col.names = c("Espécie", "n", "Compr. pétala (cm)", "Larg. pétala (cm)",
"Indicador de tamanho (cm²)"),
caption = "Tabela 1 — Médias por espécie na base completa."
)| Espécie | n | Compr. pétala (cm) | Larg. pétala (cm) | Indicador de tamanho (cm²) |
|---|---|---|---|---|
| setosa | 50 | 1.462 | 0.246 | 0.366 |
| versicolor | 50 | 4.260 | 1.326 | 5.720 |
| virginica | 50 | 5.552 | 2.026 | 11.296 |
O comprimento médio das pétalas é 1,462 cm em setosa, 4,260 cm em versicolor e 5,552 cm em virginica. Assim, virginica apresenta a maior média dessa medida na amostra. Essas diferenças são descritivas; não demonstram causalidade nem a qualidade de um modelo de previsão. As figuras da aba 4 ajudam a observar a dispersão e a sobreposição entre grupos [4, 5].
A tabela abaixo usa o pacote DT, uma interface do R para a biblioteca DataTables [2]. Mostra as 46 flores filtradas e as variáveis criadas na aba anterior. A ordenação inicial segue o indicador de tamanho da pétala, em ordem decrescente.
Como explorar: clique no título de uma coluna para
ordenar; digite virginica no campo Buscar;
use os filtros abaixo dos títulos para restringir uma coluna; escolha 5,
10 ou 20 linhas por página; avance pelas páginas no rodapé. Os filtros
da interface alteram a visualização da tabela, sem recalcular as
análises das outras abas.
DT::datatable(
ordenados,
rownames = FALSE,
filter = "top",
class = "stripe hover compact",
colnames = c(
"Compr. sépala (cm)", "Larg. sépala (cm)",
"Compr. pétala (cm)", "Larg. pétala (cm)", "Espécie",
"ID da flor", "Indicador pétala (cm²)", "Razão sépala"
),
caption = "Tabela 2 — Flores com comprimento de pétala >= 5 cm.",
options = list(
pageLength = 10,
lengthMenu = c(5, 10, 20),
searching = TRUE,
ordering = TRUE,
paging = TRUE,
scrollX = TRUE,
# DataTables usa índices a partir de zero: colunas 7 e 6 do R.
order = list(list(6, "desc"), list(5, "asc")),
language = list(
search = "Buscar:",
lengthMenu = "Mostrar _MENU_ linhas por página",
info = "Exibindo _START_ a _END_ de _TOTAL_ flores",
infoEmpty = "Nenhuma flor disponível",
infoFiltered = "(filtrado de _MAX_ flores)",
zeroRecords = "Nenhuma flor corresponde à busca",
emptyTable = "Tabela sem dados",
paginate = list(first = "Primeira", previous = "Anterior",
"next" = "Próxima", last = "Última")
)
)
) |>
DT::formatRound(c("area_proxy_petala", "razao_sepala"), digits = 2)As cinco equações a seguir representam métodos importantes da ciência
de dados [4, 5]. Foram escritas entre delimitadores $$ com
sintaxe LaTeX. No HTML, MathJax apresenta a notação matemática. Elas são
fundamentos teóricos e não resultados de modelos ajustados neste
relatório.
\[ (\widehat{\beta}_0,\widehat{\boldsymbol{\beta}}) =\underset{\beta_0,\boldsymbol{\beta}}{\operatorname{arg\,min}} \left\{\frac{1}{n}\sum_{i=1}^{n} \left(y_i-\beta_0-\sum_{j=1}^{p}x_{ij}\beta_j\right)^2 +\lambda\sum_{j=1}^{p}\beta_j^2\right\}. \]
Significado: encontra coeficientes que equilibram
erro de previsão e penalização de sua magnitude. \(n\) é o número de observações, \(p\) o número de preditores, \(y_i\) a resposta e \(x_{ij}\) o preditor \(j\) da observação \(i\). \(\beta_0\) é o intercepto, \(\beta_j\) são os coeficientes e \(\lambda\geq0\) controla a regularização. O
intercepto não é penalizado. É usual padronizar os preditores antes
desse ajuste. No contexto de iris, poderia prever
comprimento de pétala a partir de outras medidas [4, 5].
\[ P(Y_i=k\mid\mathbf{x}_i) =\frac{\exp\left(\beta_{k0}+\mathbf{x}_i^{\mathsf T}\boldsymbol{\beta}_k\right)} {\displaystyle\sum_{\ell=1}^{K} \exp\left(\beta_{\ell0}+\mathbf{x}_i^{\mathsf T}\boldsymbol{\beta}_\ell\right)}, \qquad k=1,\ldots,K. \]
Significado: transforma escores lineares em
probabilidades de classes, que somam 1. \(\mathbf{x}_i\) é o vetor de medidas, \(K\) o número de classes e \(\beta_{k0},\boldsymbol{\beta}_k\) os
parâmetros da classe \(k\). Para
identificar os parâmetros, uma classe pode ser adotada como referência,
com seus coeficientes iguais a zero. Em iris, \(K=3\) e as classes seriam as três espécies.
A classe com maior probabilidade pode ser escolhida como previsão [4,
5].
\[ p(\boldsymbol{\theta}\mid\mathcal{D}) =\frac{p(\mathcal{D}\mid\boldsymbol{\theta})\,p(\boldsymbol{\theta})} {\displaystyle\int_{\Theta} p(\mathcal{D}\mid\mathbf{u})\,p(\mathbf{u})\,d\mathbf{u}}. \]
Significado: atualiza a distribuição de um parâmetro após observar dados. \(\mathcal{D}\) representa os dados; \(\boldsymbol{\theta}\) os parâmetros; \(p(\boldsymbol{\theta})\) a distribuição a priori; \(p(\mathcal{D}\mid\boldsymbol{\theta})\) a verossimilhança; e \(p(\boldsymbol{\theta}\mid\mathcal{D})\) a distribuição a posteriori. O denominador integra sobre o espaço de parâmetros \(\Theta\) e normaliza a distribuição, supondo que essa integral seja finita e positiva. Essa formulação permite expressar incerteza sobre parâmetros de um modelo para as flores [5].
\[ \underset{C_1,\ldots,C_K,\boldsymbol{\mu}_1,\ldots,\boldsymbol{\mu}_K} {\operatorname{min}} \sum_{k=1}^{K}\sum_{i\in C_k} \left\|\mathbf{x}_i-\boldsymbol{\mu}_k\right\|_2^2, \qquad \boldsymbol{\mu}_k=\frac{1}{|C_k|}\sum_{i\in C_k}\mathbf{x}_i. \]
Significado: procura grupos compactos ao minimizar a
soma das distâncias quadráticas de cada observação ao centro do seu
grupo. \(C_k\) são grupos não vazios
que particionam as observações; \(|C_k|\) é a quantidade de elementos; \(\boldsymbol{\mu}_k\) é o centroide; e \(\|\cdot\|_2\) é a norma euclidiana. O
algoritmo usual alterna atribuições e centroides, podendo chegar a um
mínimo local. As medidas de iris poderiam ser agrupadas sem
usar Species, mas os grupos não necessariamente
coincidiriam com as espécies. A escala das variáveis afeta as distâncias
[4, 5].
\[ \mathbf{S}=\frac{1}{n-1}\mathbf{X}_c^{\mathsf T}\mathbf{X}_c, \qquad \mathbf{S}\mathbf{v}_j=\lambda_j\mathbf{v}_j, \qquad \mathbf{z}_j=\mathbf{X}_c\mathbf{v}_j, \qquad \operatorname{PVE}_j=\frac{\lambda_j}{\sum_{\ell=1}^{p}\lambda_\ell}. \]
Significado: constrói combinações lineares das
variáveis que resumem sua variabilidade. \(\mathbf{X}_c\) é a matriz \(n\times p\) com colunas centradas e \(\mathbf{S}\) sua matriz de covariância.
\(\mathbf{v}_j\) é um autovetor
unitário, \(\lambda_j\) seu autovalor e
\(\mathbf{z}_j\) o vetor de escores do
componente \(j\). Os autovalores são
ordenados do maior para o menor. \(\operatorname{PVE}_j\) é a proporção de
variância explicada, supondo variância total positiva. Caso as colunas
também sejam padronizadas, a análise usa a matriz de correlação. PCA
poderia reduzir as quatro medidas de iris a duas dimensões
para exploração visual [4, 5].
As duas figuras são produzidas diretamente em R a partir da
base completa. São visualizações de análise
exploratória, com autoria do aluno a partir dos dados do pacote
datasets [1]. Não dependem de imagens externas.
cores <- c(setosa = "#0072B2", versicolor = "#D55E00", virginica = "#009E73")
simbolos <- c(setosa = 16, versicolor = 17, virginica = 15)
especies <- as.character(dados$Species)
par(mar = c(4.5, 4.5, 2, 1))
plot(
dados$Petal.Length, dados$Petal.Width,
col = cores[especies], pch = simbolos[especies], cex = 1.15,
xlab = "Comprimento da pétala (cm)",
ylab = "Largura da pétala (cm)",
main = "As medidas das pétalas distinguem grupos de flores",
bty = "l"
)
grid(col = "#e5e7eb")
points(dados$Petal.Length, dados$Petal.Width,
col = cores[especies], pch = simbolos[especies], cex = 1.15)
legend("topleft", legend = names(cores), col = cores,
pch = simbolos, bty = "n", title = "Espécie")Figura 1 — Comprimento e largura da pétala por espécie (n = 150). Fonte: elaboração em R com datasets::iris.
Leitura: cada ponto representa uma flor. Comprimento e largura de pétala apresentam associação positiva no conjunto. Setosa concentra medidas menores; versicolor e virginica apresentam alguma sobreposição. Cores e símbolos diferentes ajudam a identificar as espécies. A associação visual não implica causalidade nem substitui a avaliação de um classificador em dados de teste.
par(mar = c(4.5, 4.5, 2, 1))
boxplot(
Petal.Length ~ Species, data = dados,
col = unname(cores[levels(dados$Species)]),
border = "#263747",
xlab = "Espécie", ylab = "Comprimento da pétala (cm)",
main = "Diferenças de posição e dispersão entre espécies",
bty = "l", outline = TRUE
)
abline(h = 5, lty = 2, col = "#6b7280", lwd = 1.5)
legend("topleft", legend = "Limiar do filtro: 5 cm",
lty = 2, col = "#6b7280", bty = "n")Figura 2 — Distribuição do comprimento da pétala por espécie, com 50 flores em cada grupo. Fonte: elaboração em R com datasets::iris.
Leitura: a linha dentro de cada caixa indica a mediana; a caixa vai do primeiro ao terceiro quartil. Os bigodes alcançam as observações mais extremas dentro de 1,5 vezes a amplitude interquartil, e pontos além deles aparecem separadamente. Virginica tem mediana maior que as outras espécies. A linha tracejada mostra o limite usado no filtro da aba 1: todas as setosa ficam abaixo dele, enquanto parte das demais espécies pode ser selecionada. Os gráficos apoiam a comparação descritiva dos grupos [4, 5].
Foram consultadas cinco fontes, com links para a documentação oficial, o livro de seus autores ou a página da editora. As referências [1–3] apoiam o uso dos dados e das ferramentas; [4–5] fundamentam os métodos matemáticos e a análise exploratória. Data de acesso: 10 out. 2026.
R CORE TEAM. Edgar Anderson’s Iris Data. Documentação do pacote datasets, s.d. Disponível em: documentação de iris.
POSIT / RSTUDIO. DT: An R interface to the DataTables library. Documentação do pacote, s.d. Disponível em: documentação do DT.
XIE, Yihui; ALLAIRE, J. J.; GROLEMUND, Garrett. R Markdown: The Definitive Guide. Boca Raton: Chapman & Hall/CRC, 2018. Versão online atualizada disponível em: livro dos autores.
JAMES, Gareth; WITTEN, Daniela; HASTIE, Trevor; TIBSHIRANI, Robert. An Introduction to Statistical Learning: with Applications in R.
HASTIE, Trevor; TIBSHIRANI, Robert; FRIEDMAN, Jerome. The Elements of Statistical Learning: Data Mining, Inference, and Prediction.
O documento foi organizado conforme os recursos de R Markdown descritos em [3]. Para gerar o HTML, abra este arquivo no RStudio e selecione Knit → Knit to HTML. Instale previamente os pacotes, caso necessário:
install.packages(c("rmarkdown", "knitr", "DT"))
rmarkdown::render("relatorio_ciencia_de_dados.Rmd", encoding = "UTF-8")O formato HTML mantém as abas, a busca, a paginação e a ordenação da tabela. É necessário permitir JavaScript no navegador; as equações utilizam MathJax e podem precisar de conexão à internet na abertura do HTML.
## R version 4.6.1 (2026-06-24 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26300)
##
## Matrix products: default
## LAPACK version 3.12.1
##
## locale:
## [1] LC_COLLATE=Portuguese_Brazil.utf8 LC_CTYPE=Portuguese_Brazil.utf8
## [3] LC_MONETARY=Portuguese_Brazil.utf8 LC_NUMERIC=C
## [5] LC_TIME=Portuguese_Brazil.utf8
##
## time zone: America/Fortaleza
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] DT_0.34.0
##
## loaded via a namespace (and not attached):
## [1] digest_0.6.39 R6_2.6.1 fastmap_1.2.0 xfun_0.61
## [5] magrittr_2.0.5 cachem_1.1.0 knitr_1.52 htmltools_0.5.9
## [9] rmarkdown_2.32 lifecycle_1.0.5 cli_3.6.6 sass_0.4.10
## [13] jquerylib_0.1.4 compiler_4.6.1 tools_4.6.1 evaluate_1.0.5
## [17] bslib_0.12.0 yaml_2.3.12 otel_0.2.0 htmlwidgets_1.6.4
## [21] rlang_1.3.0 jsonlite_2.0.0 crosstalk_1.2.2