Nesta seção, vamos carregar o dataset Iris e realizar diversas manipulações de dados.
# Carregando o dataset
iris_data <- read.csv("Iris.csv")
# Visualizando as primeiras linhas
head(iris_data)## Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm Species
## 1 1 5.1 3.5 1.4 0.2 Iris-setosa
## 2 2 4.9 3.0 1.4 0.2 Iris-setosa
## 3 3 4.7 3.2 1.3 0.2 Iris-setosa
## 4 4 4.6 3.1 1.5 0.2 Iris-setosa
## 5 5 5.0 3.6 1.4 0.2 Iris-setosa
## 6 6 5.4 3.9 1.7 0.4 Iris-setosa
## 'data.frame': 150 obs. of 6 variables:
## $ Id : int 1 2 3 4 5 6 7 8 9 10 ...
## $ SepalLengthCm: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ SepalWidthCm : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ PetalLengthCm: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ PetalWidthCm : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : chr "Iris-setosa" "Iris-setosa" "Iris-setosa" "Iris-setosa" ...
## Id SepalLengthCm SepalWidthCm PetalLengthCm
## Min. : 1.00 Min. :4.300 Min. :2.000 Min. :1.000
## 1st Qu.: 38.25 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600
## Median : 75.50 Median :5.800 Median :3.000 Median :4.350
## Mean : 75.50 Mean :5.843 Mean :3.054 Mean :3.759
## 3rd Qu.:112.75 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100
## Max. :150.00 Max. :7.900 Max. :4.400 Max. :6.900
## PetalWidthCm Species
## Min. :0.100 Length:150
## 1st Qu.:0.300 Class :character
## Median :1.300 Mode :character
## Mean :1.199
## 3rd Qu.:1.800
## Max. :2.500
Interpretação: O dataset Iris contém 150 observações e 6 variáveis. As variáveis numéricas representam medidas de sépalas e pétalas em centímetros, enquanto a variável Species indica a espécie da flor.
Vamos filtrar apenas as flores da espécie Setosa com comprimento de sépala maior que 5 cm:
# Filtrando Setosa com SepalLengthCm > 5
iris_filtrado <- iris_data %>%
filter(Species == "Iris-setosa", SepalLengthCm > 5)
cat("Número de registros filtrados:", nrow(iris_filtrado))## Número de registros filtrados: 22
## Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm Species
## 1 1 5.1 3.5 1.4 0.2 Iris-setosa
## 2 6 5.4 3.9 1.7 0.4 Iris-setosa
## 3 11 5.4 3.7 1.5 0.2 Iris-setosa
## 4 15 5.8 4.0 1.2 0.2 Iris-setosa
## 5 16 5.7 4.4 1.5 0.4 Iris-setosa
## 6 17 5.4 3.9 1.3 0.4 Iris-setosa
Resultado: Foram encontrados 22 registros que atendem aos critérios de filtragem.
Ordenando o dataset pelo comprimento da pétala em ordem decrescente:
# Ordenando por PetalLengthCm (decrescente)
iris_ordenado <- iris_data %>%
arrange(desc(PetalLengthCm))
head(iris_ordenado, 10)## Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm Species
## 1 119 7.7 2.6 6.9 2.3 Iris-virginica
## 2 118 7.7 3.8 6.7 2.2 Iris-virginica
## 3 123 7.7 2.8 6.7 2.0 Iris-virginica
## 4 106 7.6 3.0 6.6 2.1 Iris-virginica
## 5 132 7.9 3.8 6.4 2.0 Iris-virginica
## 6 108 7.3 2.9 6.3 1.8 Iris-virginica
## 7 110 7.2 3.6 6.1 2.5 Iris-virginica
## 8 131 7.4 2.8 6.1 1.9 Iris-virginica
## 9 136 7.7 3.0 6.1 2.3 Iris-virginica
## 10 101 6.3 3.3 6.0 2.5 Iris-virginica
Resultado: As 10 flores com maiores comprimentos de pétala foram identificadas, com valores variando de 6.9 a 6 cm.
Vamos criar variáveis derivadas para análise adicional:
# Criando novas variáveis
iris_transformado <- iris_data %>%
mutate(
# Área da sépala (aproximação retangular)
SepalArea = SepalLengthCm * SepalWidthCm,
# Área da pétala (aproximação retangular)
PetalArea = PetalLengthCm * PetalWidthCm,
# Razão entre comprimento e largura da pétala
PetalRatio = PetalLengthCm / PetalWidthCm,
# Classificação do tamanho da flor
TamanhoFlor = case_when(
PetalLengthCm < 2 ~ "Pequena",
PetalLengthCm >= 2 & PetalLengthCm < 5 ~ "Média",
PetalLengthCm >= 5 ~ "Grande"
)
)
head(iris_transformado)## Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm Species
## 1 1 5.1 3.5 1.4 0.2 Iris-setosa
## 2 2 4.9 3.0 1.4 0.2 Iris-setosa
## 3 3 4.7 3.2 1.3 0.2 Iris-setosa
## 4 4 4.6 3.1 1.5 0.2 Iris-setosa
## 5 5 5.0 3.6 1.4 0.2 Iris-setosa
## 6 6 5.4 3.9 1.7 0.4 Iris-setosa
## SepalArea PetalArea PetalRatio TamanhoFlor
## 1 17.85 0.28 7.00 Pequena
## 2 14.70 0.28 7.00 Pequena
## 3 15.04 0.26 6.50 Pequena
## 4 14.26 0.30 7.50 Pequena
## 5 18.00 0.28 7.00 Pequena
## 6 21.06 0.68 4.25 Pequena
Interpretação das novas variáveis:
Calculando estatísticas descritivas por espécie:
# Estatísticas por espécie
stats_especies <- iris_transformado %>%
group_by(Species) %>%
summarise(
N = n(),
Media_SepalLength = round(mean(SepalLengthCm), 2),
Media_PetalLength = round(mean(PetalLengthCm), 2),
Media_PetalArea = round(mean(PetalArea), 2),
Max_PetalRatio = round(max(PetalRatio), 2),
Min_PetalRatio = round(min(PetalRatio), 2)
)
kable(stats_especies,
caption = "Estatísticas Descritivas por Espécie",
col.names = c("Espécie", "N", "Média Sépala (cm)",
"Média Pétala (cm)", "Média Área Pétala (cm²)",
"Razão Máx", "Razão Mín"))| Espécie | N | Média Sépala (cm) | Média Pétala (cm) | Média Área Pétala (cm²) | Razão Máx | Razão Mín |
|---|---|---|---|---|---|---|
| Iris-setosa | 50 | 5.01 | 1.46 | 0.36 | 15.0 | 2.67 |
| Iris-versicolor | 50 | 5.94 | 4.26 | 5.72 | 4.1 | 2.67 |
| Iris-virginica | 50 | 6.59 | 5.55 | 11.30 | 4.0 | 2.12 |
Análise: Observa-se diferenças significativas entre as espécies. A Iris-setosa apresenta pétalas menores, enquanto a Iris-virginica possui as maiores dimensões médias.
# Gráfico de dispersão com as novas variáveis
ggplot(iris_transformado, aes(x = PetalArea, y = SepalArea, color = Species)) +
geom_point(size = 3, alpha = 0.7) +
labs(title = "Relação entre Área da Pétala e Área da Sépala",
x = "Área da Pétala (cm²)",
y = "Área da Sépala (cm²)",
color = "Espécie") +
theme_minimal() +
theme(legend.position = "bottom")Conclusão da Manipulação: As manipulações realizadas permitiram filtrar, ordenar, criar novas variáveis e agregar os dados, facilitando análises mais profundas sobre as características das flores Iris.
Esta tabela interativa permite buscar, ordenar e paginar os dados do dataset Iris transformado. Utilize as funcionalidades de busca e ordenação para explorar os dados.
# Criando tabela interativa com DT
datatable(
iris_transformado,
caption = 'Dataset Iris - Tabela Interativa',
filter = 'top',
options = list(
pageLength = 10,
scrollX = TRUE,
language = list(
search = 'Buscar:',
lengthMenu = 'Mostrar _MENU_ registros',
info = 'Mostrando _START_ a _END_ de _TOTAL_ registros'
)
),
rownames = FALSE
) %>%
formatRound(columns = c('SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm',
'PetalWidthCm', 'SepalArea', 'PetalArea', 'PetalRatio'),
digits = 2)Funcionalidades da Tabela:
Apresentação de cinco equações complexas relevantes para análise de dados e machine learning.
\[ Y = \beta_0 + \beta_1X_1 + \beta_2X_2 + \cdots + \beta_nX_n + \epsilon \]
Significado: Esta equação representa o modelo de regressão linear múltipla, onde \(Y\) é a variável dependente, \(X_1, X_2, \ldots, X_n\) são as variáveis independentes (preditoras), \(\beta_0\) é o intercepto, \(\beta_1, \ldots, \beta_n\) são os coeficientes de regressão, e \(\epsilon\) é o termo de erro. É fundamental para modelagem preditiva em ciência de dados.
\[ \mathcal{L}(\theta | X) = \prod_{i=1}^{n} f(x_i | \theta) = f(x_1 | \theta) \times f(x_2 | \theta) \times \cdots \times f(x_n | \theta) \]
Significado: A função de verossimilhança mede quão provável é observar os dados \(X\) dado um conjunto de parâmetros \(\theta\). É utilizada em estimação de parâmetros e inferência estatística, sendo essencial para métodos como Maximum Likelihood Estimation (MLE).
\[ H(X) = -\sum_{i=1}^{n} p(x_i) \log_2 p(x_i) \]
Significado: A entropia mede a incerteza ou quantidade de informação em uma variável aleatória \(X\). Quanto maior a entropia, maior a incerteza. Esta equação é fundamental em teoria da informação e é utilizada em algoritmos de árvores de decisão para calcular o ganho de informação.
\[ \frac{\partial \mathcal{L}}{\partial w_{ij}} = \frac{\partial \mathcal{L}}{\partial a_j} \cdot \frac{\partial a_j}{\partial z_j} \cdot \frac{\partial z_j}{\partial w_{ij}} = \delta_j \cdot a_i \]
Significado: Esta equação representa o cálculo do gradiente da função de perda \(\mathcal{L}\) em relação aos pesos \(w_{ij}\) em uma rede neural. O algoritmo de backpropagation utiliza a regra da cadeia para propagar o erro da camada de saída para as camadas anteriores, permitindo o treinamento eficiente de redes neurais profundas.
\[ P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)} = \frac{P(B|A) \cdot P(A)}{\sum_{i} P(B|A_i) \cdot P(A_i)} \]
Significado: O Teorema de Bayes descreve a probabilidade de um evento \(A\) ocorrer dado que outro evento \(B\) ocorreu. É fundamental em inferência bayesiana e classificadores probabilísticos como o Naive Bayes. \(P(A|B)\) é a probabilidade posterior, \(P(B|A)\) é a verossimilhança, \(P(A)\) é a probabilidade prior, e \(P(B)\) é a evidência.
Nesta seção apresentamos duas figuras relevantes que ilustram conceitos fundamentais de Machine Learning e Ciência de Dados.
Descrição: O dendrograma é uma representação visual de clustering hierárquico aglomerativo, técnica de aprendizado não-supervisionado que agrupa dados similares de forma hierárquica.
Descrição: Esta figura ilustra os principais paradigmas de aprendizado em Machine Learning: Supervisionado, Não-Supervisionado e por Reforço.
James et al. (2013)
WICKHAM (2023)
Chambers (2020)
Boehmke and Greenwell (2019)
Abedin and Das (2015)