This repository was archived by the owner on Feb 4, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbackup.txt
More file actions
137 lines (100 loc) · 4.91 KB
/
Copy pathbackup.txt
File metadata and controls
137 lines (100 loc) · 4.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
---
title: "Trabalho de Grupo Nº2 — Técnicas de Classificação e Análise de Dados 2025"
author: "Diogo Silva pg61444 & Tomás Pereira pg59810 (Grupo 4)"
date: "Dezembro de 2025"
output:
rmdformats::readthedown:
toc_depth: 3
code_folding: hide
pdf_document:
latex_engine: xelatex
keep_tex: true
html_document:
toc_depth: '3'
df_print: paged
lang: pt
header-includes:
- \usepackage{amsmath}
- \usepackage{polyglossia}
- \setmainlanguage{portuguese}
- \setotherlanguages{english}
- \usepackage{booktabs}
- \usepackage{fontspec}
---
## {width="153"}
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
# Análise de Clustering no Dataset Glass para Identificação de Tipos de Vidro
# 1. Introdução
## 1.1 Motivação e Contexto
O objetivo deste trabalho é aplicar técnicas de clustering a um conjunto de dados sobre vidros, de modo a identificar padrões e semelhanças entre diferentes tipos de vidro, através das suas propriedades químicas.
O trabalho foi realizado no âmbito da unidade curricular **Técnicas de Classificação e Análise de Dados (TCAD)** do **Mestrado em Computação Avançada** na **Universidade do Minho**.
## 1.2 Objetivos do Trabalho
Consideramos os seguintes objetivos principais:
- Identificar agrupamentos naturais a partir das variáveis de composição química (RI, Na, Mg, Al, Si, K, Ca, Ba, Fe).
- Construir o perfil químico médio de cada cluster.
- Validar a separação comparando os clusters com o rótulo original (`Type_Glass`, usado apenas na validação/interpretação).
# 2. Descrição do Dataset
O conjunto de dados utilizado foi o Glass Identification, e encontra-se disponível no [UCI Machine Learning Repository](https://archive.ics.uci.edu/dataset/42/glass+identification). Originalmente o conjunto de dados foi criado como apoio a investigações criminais, nomeadamente para identificar o tipo de vidro encontrado em cenas de crime.
O conjunto de dados contém **11 variáveis**. A variável `ID` que serve como identificador da observação não será utilizada, logo apenas existem **10 variáveis efetivas.** Destas dez variáveis existem nove que são variáveis preditoras e correspondem a propriedades químicas do vidro. A variável `Type of Glass` é a variável resposta e corresponde ao grupo a que cada vidro pertence.
**Descrição das variáveis preditoras:**
- `RI` - Índice de refração do vidro.
- `Na`, `Mg`, `Al`, `Si`, `K`, `Ca`, `Ba`, `Fe` - Diferentes elementos químicos encontrados no vidro.
# 3. Preparação e Limpeza dos Dados
### 3.1 Importar o Dataset
Inicialmente, importamos o conjunto de dados e eliminamos a variável `ID`, pois ela não contribui para a análise de agrupamentos que será realizada.
```{r}
# Trazer bibliotecas necessárias
packages <- c(
"tidyverse", "readxl", "janitor", "GGally",
"factoextra", "cluster", "scales", "knitr", "gridExtra"
)
to_install <- setdiff(packages, rownames(installed.packages()))
if (length(to_install) > 0) install.packages(to_install)
invisible(lapply(packages, library, character.only = TRUE))
theme_set(theme_minimal())
set.seed(123)
# Importar o dataset
glass_df <- read_excel("data/glass.xlsx")
# Mudar o nome da coluna 'Type of Glass' para 'tipo_vidro'
colnames(glass_df)[11] <- "tipo_vidro"
# Remoção da variável ID
glass_df$ID <- NULL
```
### 3.2 Limpeza dos dados
Decidimos verificar se existem valores omissos (NA) no conjunto de dados.
```{r}
# Verificação de valores omissos no dataset completo
omissos <- glass_df %>%
summarise(across(everything(), ~ sum(is.na(.)))) %>%
pivot_longer(everything(), names_to = "variavel", values_to = "true")
if (any(omissos$true > 0)) {
warning("Existem valores em falta; considere imputação antes do clustering.")
} else {
message("Sem valores em falta; prosseguir para escala e clustering.")
}
```
Após a verificação confirma-se que **não existem** valores omissos.
# 4. Análise exploratória dos dados
Antes de passar ao agrupamento dos dados decidimos verificar e analisar as propriedades do conjunto de dados original.
Primeiramente decidimos verificar os histogramas de todas as variáveis preditoras, de forma a perceber a distribuição que representam e perceber incongruências nos dados.
```{r}
# Distribuição das variáveis preditoras
glass_long <- glass_pred %>%
pivot_longer(cols = everything(), names_to = "variavel", values_to = "valor")
ggplot(glass_long, aes(x = valor)) +
geom_histogram(bins = 20) +
facet_wrap(~ variavel, scales = "free") +
theme_minimal()
# Distribuição das variáveis preditoras por tipo de vidro
glass_df %>%
pivot_longer(-tipo_vidro, names_to = "variavel", values_to = "valor") %>%
ggplot(aes(x = valor, fill = tipo_vidro)) +
geom_density(alpha = 0.35) +
facet_wrap(~ variavel, scales = "free") +
labs(
title = "Distribuições das variáveis químicas",
x = NULL, y = "Densidade", fill = "Tipo de vidro"
)
```