Introdução ao Pipeline de Ciência de Dados

O pipeline de Ciência de Dados é o processo estruturado que transforma dados brutos em inteligência e tomada de decisão.

As 5 etapas do Pipeline:

  1. Coleta
  2. Limpeza (Data Cleaning)
  3. Exploração (EDA)
  4. Modelagem
  5. Comunicação

Demonstração Prática do Pipeline

# Pacote tidyverse
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.1     ✔ readr     2.2.0
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.3     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# ETAPA 1: COLETA (Importando a base nativa 'Iris')
dados <- iris

# Head mostrando 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

Etapa 2: Limpeza e Tratamento de Dados

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. Remoção de linhas duplicadas
  drop_na() |> # 2. Remoção de valores nulos (NA)
  mutate(Species = as.factor(Species)) # 3. Conversão da coluna "Species" em uma variável categórica de fato (fator)

# 'Raio-x' dos dados após o tratamento
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 ...

ETAPA 3: Análise Exploratória de Dados (EDA)

Nesta etapa, exploramos o comportamento das variáveis por espécie através de resumos estatísticos e visualizações com o ggplot2.

3.1 Resumo Estatístico por espécie

# Cálculo da média e do 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)
    )

# Exibição da 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

3.2 Visualização Gráfica

# 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ção 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()

Etapa 4: Modelagem de Dados

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
# Criação do modelo de regressão linear (Pental.Length em função de Sepal.Length)
modelo <- lm(Petal.Length ~ Sepal.Length, data = dados_limpos)

# Exibição do 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

4.1 Visualização do Modelo Ajustado

# 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'

Etapa 5: Comunicação dos Resultados e Conclusão

Com base no pipeline de ciência de dados executado sobre a base iris, foi possível extrair os seguintes insights:

  1. Qualidade dos Dados: A limpeza eliminou 1 registro duplicado da espécie virginica, garantindo a integridade da análise com 149 amostras válidas.
  2. Padrão por Espécie: A espécie setosa apresenta características morfológicas claramente distintas (pétalas significativamente menores), enquanto versicolor e virginica possuem uma progressão linear mais próxima.
  3. Poder Preditivo: O modelo de regressão linear apresentou um \(R²\) de \(0,763\), demonstrando que \(76,3\%\) do comprimento da pétala pode ser previsto unicamente a partir do comprimento da sépala.