O pipeline de Ciência de Dados é o processo estruturado que transforma dados brutos em inteligência e tomada de decisão.
# Carregando o pacote tidyverse
library(tidyverse)
# ETAPA 1: COLETA (Importando a base nativa 'Iris')
dados <- iris
# Olhando as 6 primeiras linhas dos dados
head(dados)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
Nesta etapa, aplicamos o operador pipe (’|>’) para remover registros duplicados e tratar os tipos de variáveis.
# ETAPA 2: LIMPEZA E TRATAMENTO
dados_limpos <- dados |>
distinct() |> # 1. Remove linhas 100% duplicadas
drop_na() |> # 2. Remove linhas com valores nulos (NA)
mutate(Species = as.factor(Species)) # 3. Converte a coluna "Species" em fator (variável categórica)
# Verificando a estrutura interna dos dados limpos
str(dados_limpos)
## 'data.frame': 149 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 ...
Nesta etapa, exploramos o comportamento das variáveis por espécie através de resumos estatísticos e visualizações com o ggplot2.
# Calculando a média e o desvio padrão do comprimento da pétala p/ cada espécie
resumo_especies <- dados_limpos |>
group_by(Species) |>
summarise(
quantidade = n(),
media_petala = mean(Petal.Length),
sd_petala = sd(Petal.Length),
media_sepala = mean(Sepal.Length)
)
# Exibindo a tabela formatada no R markdown
knitr::kable(resumo_especies, col.names= c("Espécie", "Qtd", "Média Pétala", "Desvio Padrão Pétala", "Média Sépala"))
| Espécie | Qtd | Média Pétala | Desvio Padrão Pétala | Média Sépala |
|---|---|---|---|---|
| setosa | 50 | 1.462000 | 0.1736640 | 5.006000 |
| versicolor | 50 | 4.260000 | 0.4699110 | 5.936000 |
| virginica | 49 | 5.561224 | 0.5537058 | 6.604082 |
# Gráfico de Dispersão: Relação entre Sépala e Pétala por Espécie
ggplot(dados_limpos, aes(x = Sepal.Length, y = Petal.Length, color = Species)) +
geom_point(size = 3, alpha = 0.8) +
labs(
title = "Relaçao entre comprimento de Sépala e Pétala",
subtitle = "Diferenciação clara entre as espécies da base Iris",
x = "Comprimento da Sépala (cm)",
y = "Comprimento da Pétala (cm)",
color = "Espécie"
) +
theme_minimal()
Nesta etapa, construímos um modelo preditivo de Regressão Linear para analisar a relação entre o comprimento da sépala (variável explicativa) e o comprimento da pétala (variável resposta).
# ETAPA 4: MODELAGEM DE DADOS
# Criando o modelo de regressão linear: Pental.Length em função de Sepal.Length
modelo <- lm(Petal.Length ~ Sepal.Length, data = dados_limpos)
# Exibindo o resumo estatístico do modelo
summary(modelo)
##
## Call:
## lm(formula = Petal.Length ~ Sepal.Length, data = dados_limpos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.46789 -0.58066 -0.01284 0.60391 2.50524
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -7.11454 0.50378 -14.12 <2e-16 ***
## Sepal.Length 1.85904 0.08536 21.78 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.8628 on 147 degrees of freedom
## Multiple R-squared: 0.7634, Adjusted R-squared: 0.7618
## F-statistic: 474.3 on 1 and 147 DF, p-value: < 2.2e-16
# Guardando o modelo na variável 'resumo'
resumo <- summary(modelo)
# Extraindo o R² e o p-valor diretamente dos resultados do modelo
r2_valor <- round(resumo$r.squared, 3)
p_valor <- format.pval(resumo$coefficients[2,4], digits = 2, eps = 0.001)
# Texto dinâmico
texto_metrica <- paste0("R² = ", r2_valor, "\np-value ", p_valor)
# Gráfico com a linha de tendência (reta de regressão)
ggplot(dados_limpos, aes(x = Sepal.Length, y = Petal.Length))+
geom_point(aes(color = Species), size = 3, alpha = 0.8)+
geom_smooth(method = "lm", color = "black", se = TRUE)+
annotate("text", x = 4.5, y = 6.5,
label = texto_metrica,
color = "black", fontface = "bold", size = 4.5, hjust = 0)+
labs(
title = "Modelo de Regressão Linear: Pétala vs Sépala",
subtitle = "Linha de tendência mostrando a correlação positiva",
x = "Comprimento da Sépala (cm)",
y = "Comprimento da Pétala (cm)",
color = "Espécie"
)+
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Com base no pipeline de ciência de dados executado sobre a base iris, foi possível extrair os seguintes insights:
O pipeline demonstrou com sucesso todas as fases de um ciclo de ciência de dados (Coleta, Limpeza, Análise Exploratória e Modelagem) de forma reprodutível através do R Markdown