Contexto
Estos datos son el resultado de un análisis químico de vinos
cultivados en la misma región de Italia pero derivados de tres
cultivares diferentes.
El análisis determinó las cantidades de 13 componenetes que se
encuentran en cada uno de los tres cultivares.
Instalar paquetes y llamar librerías
library(cluster) #Agrupamiento
library(ggplot2) #Graficar
library(factoextra) #Visualizar Clusters
library(data.table) #Manejo de conjunto de datos grandes
library(readr)
library(tidyverse)
Importar la base de Datos
#library(readr)
wine_dataset <- read_csv("wine_dataset.csv")
## Rows: 178 Columns: 14
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (14): alcohol, malic_acid, ash, alcalinity_of_ash, magnesium, total_phen...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Entender la base de datos
## alcohol malic_acid ash alcalinity_of_ash
## Min. :11.03 Min. :0.740 Min. :1.360 Min. :10.60
## 1st Qu.:12.36 1st Qu.:1.603 1st Qu.:2.210 1st Qu.:17.20
## Median :13.05 Median :1.865 Median :2.360 Median :19.50
## Mean :13.00 Mean :2.336 Mean :2.367 Mean :19.49
## 3rd Qu.:13.68 3rd Qu.:3.083 3rd Qu.:2.558 3rd Qu.:21.50
## Max. :14.83 Max. :5.800 Max. :3.230 Max. :30.00
## magnesium total_phenols flavanoids nonflavanoid_phenols
## Min. : 70.00 Min. :0.980 Min. :0.340 Min. :0.1300
## 1st Qu.: 88.00 1st Qu.:1.742 1st Qu.:1.205 1st Qu.:0.2700
## Median : 98.00 Median :2.355 Median :2.135 Median :0.3400
## Mean : 99.74 Mean :2.295 Mean :2.029 Mean :0.3619
## 3rd Qu.:107.00 3rd Qu.:2.800 3rd Qu.:2.875 3rd Qu.:0.4375
## Max. :162.00 Max. :3.880 Max. :5.080 Max. :0.6600
## proanthocyanins color_intensity hue od280/od315_of_diluted_wines
## Min. :0.410 Min. : 1.280 Min. :0.4800 Min. :1.270
## 1st Qu.:1.250 1st Qu.: 3.220 1st Qu.:0.7825 1st Qu.:1.938
## Median :1.555 Median : 4.690 Median :0.9650 Median :2.780
## Mean :1.591 Mean : 5.058 Mean :0.9574 Mean :2.612
## 3rd Qu.:1.950 3rd Qu.: 6.200 3rd Qu.:1.1200 3rd Qu.:3.170
## Max. :3.580 Max. :13.000 Max. :1.7100 Max. :4.000
## proline target
## Min. : 278.0 Min. :0.0000
## 1st Qu.: 500.5 1st Qu.:0.0000
## Median : 673.5 Median :1.0000
## Mean : 746.9 Mean :0.9382
## 3rd Qu.: 985.0 3rd Qu.:2.0000
## Max. :1680.0 Max. :2.0000
Escalar la base de datos
datos_esc1 <- datos
datos_esc1 <- subset(datos_esc1, select = -target)
datos_esc1 <- scale(datos_esc1)
Generar los segmentos
grupos <- 3 #Se buscar el número óptimo de grupos o clusters
segmentos <- kmeans(datos_esc1,grupos)
Asignar grupos a los datos
asignacion <- cbind(datos,cluster= segmentos$cluster)
Graficar el cluster
fviz_cluster(segmentos, data = datos)

Optimizar la cantidad de grupos
#La cantidad óptima de grupos corresponde al punto más alto de la gráfica
set.seed(123)
optimizacion <- clusGap(datos_esc1, FUN=kmeans, nstart=1, K.max=10)
plot(optimizacion, xlab= "Número de clusters k")
## Comparar segmentos
promedio <- aggregate(asignacion, by=list(asignacion$cluster),FUN=mean)
promedio
## Group.1 alcohol malic_acid ash alcalinity_of_ash magnesium
## 1 1 13.13412 3.307255 2.417647 21.24118 98.66667
## 2 2 12.25092 1.897385 2.231231 20.06308 92.73846
## 3 3 13.67677 1.997903 2.466290 17.46290 107.96774
## total_phenols flavanoids nonflavanoid_phenols proanthocyanins color_intensity
## 1 1.683922 0.8188235 0.4519608 1.145882 7.234706
## 2 2.247692 2.0500000 0.3576923 1.624154 2.973077
## 3 2.847581 3.0032258 0.2920968 1.922097 5.453548
## hue od280/od315_of_diluted_wines proline target cluster
## 1 0.6919608 1.696667 619.0588 1.9411765 1
## 2 1.0627077 2.803385 510.1692 1.0000000 2
## 3 1.0654839 3.163387 1100.2258 0.0483871 3
table(asignacion$cluster)
##
## 1 2 3
## 51 65 62
Ejercicio México 2024
Instalar y llamar librerías
#install.packages("sf") #análisis de datos espaciales
library(sf)
## Linking to GEOS 3.13.0, GDAL 3.10.1, PROJ 9.5.1; sf_use_s2() is TRUE
#install.packages("rnaturalearth") #proporciona límites geográficos
library(rnaturalearth)
#install.packages("rnaturalearthdata") #datos de geografía
library(rnaturalearthdata)
##
## Adjuntando el paquete: 'rnaturalearthdata'
## The following object is masked from 'package:rnaturalearth':
##
## countries110
#install.packages("devtools") # Instalar paquetes de fuentes externas
library(devtools)
## Cargando paquete requerido: usethis
devtools::install_github("ropensci/rnaturalearthhires") #mapa de México particular
## Skipping install of 'rnaturalearthhires' from a github remote, the SHA1 (153b0ea5) has not changed since last install.
## Use `force = TRUE` to force installation
Obtener Mapa de México
mexico <- ne_states(country= "Mexico", returnclass = "sf")
#view(mexico)
Importar la base de Datos
datosmex <- read_csv("mexico2024.csv")
## Rows: 32 Columns: 6
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Estado
## dbl (5): Población, PIB per cápita, Esperanza de vida, Tasa de pobreza, Tasa...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Entender la base de datos
## Estado Población PIB per cápita Esperanza de vida
## Length:32 Min. : 0.700 Min. : 44387 Min. :73.50
## Class :character 1st Qu.: 1.875 1st Qu.: 84672 1st Qu.:74.50
## Mode :character Median : 3.050 Median :118147 Median :75.00
## Mean : 3.947 Mean :133393 Mean :75.00
## 3rd Qu.: 4.975 3rd Qu.:151772 3rd Qu.:75.53
## Max. :17.400 Max. :481697 Max. :76.50
## Tasa de pobreza Tasa de alfabetización
## Min. :13.30 Min. :86.50
## 1st Qu.:28.20 1st Qu.:94.42
## Median :35.25 Median :96.50
## Mean :37.54 Mean :95.61
## 3rd Qu.:46.20 3rd Qu.:97.85
## Max. :67.40 Max. :99.00
Escalar la base de datos
datos_pobmex <- datosmex
datos_pobmex1 <- subset(datos_pobmex, select= c(Estado, Población))
#datos_esc1 <- datos
#datos_esc1 <- subset(datos_esc1, select = -target)
#datos_esc1 <- scale(datos_esc1)
Generar los segmentos
#grupos <- 3 #Se buscar el número óptimo de grupos o clusters
#segmentos2 <- kmeans(datos_pobmex1,grupos)
Asignar grupos a los datos
#asignacion2 <- cbind(datos_pobmex,cluster= segmentos2$mexico_clusters)
Graficar el cluster
#fviz_cluster(segmentos2, data = datos_pobmex)
Unir Mapa con Datos
#mexico_clusters <- left_join(mexico, datosmex, by= c("name" = "Estado"))
#ggplot(mexico_clusters)+
# geom_sf(aes(fill = mexico_clusters),color = "black") +
# scale_fill_manual(values = c("green", "yellow", "red")) +
# labs(title = "clusters de Población por Estado en México") +
# theme_minimal()
LS0tDQp0aXRsZTogIkNsdXN0ZXJzIg0KYXV0aG9yOiAiU2FtYW50aGEgLSBBMDE0MjI3NDkiDQpkYXRlOiAiMjAyNS0wMi0xOSINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRoZW1lOiAic3BhY2VsYWIiDQogICAgaGlnaGxpZ2h0OiAia2F0ZSINCi0tLQ0KDQohW10oQzovVXNlcnMvYWxlamEvUGljdHVyZXMvSW1hZ2VuZXNfdHJhYmFqb3MvVmlub3MuZ2lmKQ0KDQojIDxzcGFuIHN0eWxlPSAiY29sb3I6IG1hZ2VudGE7Ij5Db250ZXh0byA8L3NwYW4+DQpFc3RvcyBkYXRvcyBzb24gZWwgcmVzdWx0YWRvIGRlIHVuIGFuw6FsaXNpcyBxdcOtbWljbyBkZSB2aW5vcyBjdWx0aXZhZG9zIGVuIGxhIG1pc21hIHJlZ2nDs24gZGUgSXRhbGlhIHBlcm8gZGVyaXZhZG9zIGRlIHRyZXMgY3VsdGl2YXJlcyBkaWZlcmVudGVzLg0KDQpFbCBhbsOhbGlzaXMgZGV0ZXJtaW7DsyBsYXMgY2FudGlkYWRlcyBkZSAxMyBjb21wb25lbmV0ZXMgcXVlIHNlIGVuY3VlbnRyYW4gZW4gY2FkYSB1bm8gZGUgbG9zIHRyZXMgY3VsdGl2YXJlcy4NCg0KDQoNCiMjIDxzcGFuIHN0eWxlPSAiY29sb3I6IGJsdWU7Ij5JbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzIDwvc3Bhbj4NCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGNsdXN0ZXIpICNBZ3J1cGFtaWVudG8NCmxpYnJhcnkoZ2dwbG90MikgI0dyYWZpY2FyDQpsaWJyYXJ5KGZhY3RvZXh0cmEpICNWaXN1YWxpemFyIENsdXN0ZXJzDQpsaWJyYXJ5KGRhdGEudGFibGUpICNNYW5lam8gZGUgY29uanVudG8gZGUgZGF0b3MgZ3JhbmRlcw0KbGlicmFyeShyZWFkcikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSAiY29sb3I6IG1hZ2VudGE7Ij5JbXBvcnRhciBsYSBiYXNlIGRlIERhdG9zIDwvc3Bhbj4NCmBgYHtyfQ0KI2xpYnJhcnkocmVhZHIpDQp3aW5lX2RhdGFzZXQgPC0gcmVhZF9jc3YoIndpbmVfZGF0YXNldC5jc3YiKQ0KI1ZpZXcod2luZV9kYXRhc2V0KQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSAiY29sb3I6IG1hZ2VudGE7Ij5FbnRlbmRlciBsYSBiYXNlIGRlIGRhdG9zIDwvc3Bhbj4NCmBgYHtyfQ0Kc3VtbWFyeSh3aW5lX2RhdGFzZXQpDQpkYXRvcyA8LSB3aW5lX2RhdGFzZXQNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBtYWdlbnRhOyI+RXNjYWxhciBsYSBiYXNlIGRlIGRhdG9zIDwvc3Bhbj4NCmBgYHtyfQ0KZGF0b3NfZXNjMSA8LSBkYXRvcw0KZGF0b3NfZXNjMSA8LSBzdWJzZXQoZGF0b3NfZXNjMSwgc2VsZWN0ID0gLXRhcmdldCkNCmRhdG9zX2VzYzEgPC0gc2NhbGUoZGF0b3NfZXNjMSkNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBtYWdlbnRhOyI+R2VuZXJhciBsb3Mgc2VnbWVudG9zIDwvc3Bhbj4NCmBgYHtyfQ0KZ3J1cG9zIDwtIDMgI1NlIGJ1c2NhciBlbCBuw7ptZXJvIMOzcHRpbW8gZGUgZ3J1cG9zIG8gY2x1c3RlcnMNCnNlZ21lbnRvcyA8LSBrbWVhbnMoZGF0b3NfZXNjMSxncnVwb3MpDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogbWFnZW50YTsiPkFzaWduYXIgZ3J1cG9zIGEgbG9zIGRhdG9zIDwvc3Bhbj4NCmBgYHtyfQ0KYXNpZ25hY2lvbiA8LSBjYmluZChkYXRvcyxjbHVzdGVyPSBzZWdtZW50b3MkY2x1c3RlcikNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBtYWdlbnRhOyI+R3JhZmljYXIgZWwgY2x1c3RlciA8L3NwYW4+DQpgYGB7cn0NCmZ2aXpfY2x1c3RlcihzZWdtZW50b3MsIGRhdGEgPSBkYXRvcykNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBtYWdlbnRhOyI+T3B0aW1pemFyIGxhIGNhbnRpZGFkIGRlIGdydXBvcyA8L3NwYW4+DQoNCmBgYHtyfQ0KI0xhIGNhbnRpZGFkIMOzcHRpbWEgZGUgZ3J1cG9zIGNvcnJlc3BvbmRlIGFsIHB1bnRvIG3DoXMgYWx0byBkZSBsYSBncsOhZmljYSANCnNldC5zZWVkKDEyMykNCm9wdGltaXphY2lvbiA8LSBjbHVzR2FwKGRhdG9zX2VzYzEsIEZVTj1rbWVhbnMsIG5zdGFydD0xLCBLLm1heD0xMCkNCnBsb3Qob3B0aW1pemFjaW9uLCB4bGFiPSAiTsO6bWVybyBkZSBjbHVzdGVycyBrIikNCmBgYA0KIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogbWFnZW50YTsiPkNvbXBhcmFyIHNlZ21lbnRvcyA8L3NwYW4+DQpgYGB7cn0NCnByb21lZGlvIDwtIGFnZ3JlZ2F0ZShhc2lnbmFjaW9uLCBieT1saXN0KGFzaWduYWNpb24kY2x1c3RlciksRlVOPW1lYW4pDQpwcm9tZWRpbyANCnRhYmxlKGFzaWduYWNpb24kY2x1c3RlcikNCg0KYGBgDQoNCg0KIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBncmVlbjsiPkVqZXJjaWNpbyBNw6l4aWNvIDIwMjQgPC9zcGFuPg0KIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogYmx1ZTsiPkluc3RhbGFyIHkgbGxhbWFyIGxpYnJlcsOtYXMgPC9zcGFuPg0KDQpgYGB7cn0NCiNpbnN0YWxsLnBhY2thZ2VzKCJzZiIpICNhbsOhbGlzaXMgZGUgZGF0b3MgZXNwYWNpYWxlcw0KbGlicmFyeShzZikNCiNpbnN0YWxsLnBhY2thZ2VzKCJybmF0dXJhbGVhcnRoIikgI3Byb3BvcmNpb25hIGzDrW1pdGVzIGdlb2dyw6FmaWNvcw0KbGlicmFyeShybmF0dXJhbGVhcnRoKQ0KI2luc3RhbGwucGFja2FnZXMoInJuYXR1cmFsZWFydGhkYXRhIikgI2RhdG9zIGRlIGdlb2dyYWbDrWENCmxpYnJhcnkocm5hdHVyYWxlYXJ0aGRhdGEpDQojaW5zdGFsbC5wYWNrYWdlcygiZGV2dG9vbHMiKSAjIEluc3RhbGFyIHBhcXVldGVzIGRlIGZ1ZW50ZXMgZXh0ZXJuYXMNCmxpYnJhcnkoZGV2dG9vbHMpDQpkZXZ0b29sczo6aW5zdGFsbF9naXRodWIoInJvcGVuc2NpL3JuYXR1cmFsZWFydGhoaXJlcyIpICNtYXBhIGRlIE3DqXhpY28gcGFydGljdWxhcg0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSAiY29sb3I6IGdyZWVuOyI+T2J0ZW5lciBNYXBhIGRlIE3DqXhpY28gPC9zcGFuPg0KYGBge3J9DQptZXhpY28gPC0gbmVfc3RhdGVzKGNvdW50cnk9ICJNZXhpY28iLCByZXR1cm5jbGFzcyA9ICJzZiIpDQojdmlldyhtZXhpY28pDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogZ3JlZW47Ij5JbXBvcnRhciBsYSBiYXNlIGRlIERhdG9zIDwvc3Bhbj4NCmBgYHtyfQ0KZGF0b3NtZXggPC0gcmVhZF9jc3YoIm1leGljbzIwMjQuY3N2IikNCiN2aWV3KG1leGljbzIwMjQpDQpgYGANCiMjIDxzcGFuIHN0eWxlPSAiY29sb3I6IGdyZWVuOyI+RW50ZW5kZXIgbGEgYmFzZSBkZSBkYXRvcyA8L3NwYW4+DQpgYGB7cn0NCnN1bW1hcnkoZGF0b3NtZXgpDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogZ3JlZW47Ij5Fc2NhbGFyIGxhIGJhc2UgZGUgZGF0b3MgPC9zcGFuPg0KYGBge3J9DQpkYXRvc19wb2JtZXggPC0gZGF0b3NtZXgNCmRhdG9zX3BvYm1leDEgPC0gc3Vic2V0KGRhdG9zX3BvYm1leCwgc2VsZWN0PSBjKEVzdGFkbywgUG9ibGFjacOzbikpDQoNCiNkYXRvc19lc2MxIDwtIGRhdG9zDQojZGF0b3NfZXNjMSA8LSBzdWJzZXQoZGF0b3NfZXNjMSwgc2VsZWN0ID0gLXRhcmdldCkNCiNkYXRvc19lc2MxIDwtIHNjYWxlKGRhdG9zX2VzYzEpDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogZ3JlZW47Ij5HZW5lcmFyIGxvcyBzZWdtZW50b3MgPC9zcGFuPg0KYGBge3J9DQojZ3J1cG9zIDwtIDMgI1NlIGJ1c2NhciBlbCBuw7ptZXJvIMOzcHRpbW8gZGUgZ3J1cG9zIG8gY2x1c3RlcnMNCiNzZWdtZW50b3MyIDwtIGttZWFucyhkYXRvc19wb2JtZXgxLGdydXBvcykNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBtYWdlbnRhOyI+QXNpZ25hciBncnVwb3MgYSBsb3MgZGF0b3MgPC9zcGFuPg0KYGBge3J9DQojYXNpZ25hY2lvbjIgPC0gY2JpbmQoZGF0b3NfcG9ibWV4LGNsdXN0ZXI9IHNlZ21lbnRvczIkbWV4aWNvX2NsdXN0ZXJzKQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSAiY29sb3I6IG1hZ2VudGE7Ij5HcmFmaWNhciBlbCBjbHVzdGVyIDwvc3Bhbj4NCmBgYHtyfQ0KI2Z2aXpfY2x1c3RlcihzZWdtZW50b3MyLCBkYXRhID0gZGF0b3NfcG9ibWV4KQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSAiY29sb3I6IGdyZWVuOyI+VW5pciBNYXBhIGNvbiBEYXRvcyA8L3NwYW4+DQpgYGB7cn0NCiNtZXhpY29fY2x1c3RlcnMgPC0gbGVmdF9qb2luKG1leGljbywgZGF0b3NtZXgsIGJ5PSBjKCJuYW1lIiA9ICJFc3RhZG8iKSkNCiNnZ3Bsb3QobWV4aWNvX2NsdXN0ZXJzKSsNCiMgIGdlb21fc2YoYWVzKGZpbGwgPSBtZXhpY29fY2x1c3RlcnMpLGNvbG9yID0gImJsYWNrIikgKw0KIyAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiZ3JlZW4iLCAieWVsbG93IiwgInJlZCIpKSArDQojICBsYWJzKHRpdGxlID0gImNsdXN0ZXJzIGRlIFBvYmxhY2nDs24gcG9yIEVzdGFkbyBlbiBNw6l4aWNvIikgKyANCiMgIHRoZW1lX21pbmltYWwoKQ0KYGBgDQoNCg==