
Contexto
La base de datos USArrests contiene estadĂsticas en
arrestos por cada 100,000 residentes por agresiĂ³n, asesinato y violaciĂ³n
en cada uno de los 50 estados de EE.UU. en 1973
Instalar paquetes y librerĂas
#install.packages("cluster") # Para agrupamientos
library(cluster)
#install.packages("ggplot2") # Para graficar
library(ggplot2)
#install.packages("factoextra") # Visualizar clusters
library(factoextra)
#install.packages("data.table") # Conjunto de datos grandes
library(data.table)
#install.packages("tidyverse")
library(tidyverse)
#install.packages("sf") # AnĂ¡lisis de datos espaciales
library(sf)
#install.packages("rnaturalearth") #Proporciona lĂmites grogrĂ¡ficos
library(rnaturalearth)
#install.packages("rnaturalearthdata") #Datos de geografĂa
library(rnaturalearthdata)
#install.packages("devtools")
library(devtools) #Instalar paquetes de fuentes externas
devtools::install_github("ropensci/rnaturalearthhires") #Mapa de Mexico particular
library(rnaturalearthhires)
#install.packages("caret") #Algoritmos de aprendizaje automĂ¡tico
library(caret)
#install.packages("datasets") # Para usar la base de datos "Iris"
library(datasets)
#install.packages("ggplot2") #GrĂ¡ficas con mejor diseño
library(ggplot2)
#install.packages("lattice") #Crear grĂ¡ficos
library(lattice)
#install.packages("DataExplorer") #AnĂ¡lisis descriptivo
library(DataExplorer)
#install.pachages(kernlab) #MĂ©todos de aprendizaje automĂ¡tico
library(kernlab)
Importar bases de datos
df <- USArrests
Obtener mapa de Estados
unidos
usa <- ne_states(country = "United States of America", returnclass = "sf")
Entender base de datos
summary(df)
## Murder Assault UrbanPop Rape
## Min. : 0.800 Min. : 45.0 Min. :32.00 Min. : 7.30
## 1st Qu.: 4.075 1st Qu.:109.0 1st Qu.:54.50 1st Qu.:15.07
## Median : 7.250 Median :159.0 Median :66.00 Median :20.10
## Mean : 7.788 Mean :170.8 Mean :65.54 Mean :21.23
## 3rd Qu.:11.250 3rd Qu.:249.0 3rd Qu.:77.75 3rd Qu.:26.18
## Max. :17.400 Max. :337.0 Max. :91.00 Max. :46.00
Datos Escalados
df_scaled <- scale(df) # Normalizamos las variables
Metodo de codo
fviz_nbclust(df_scaled, kmeans, method = "wss") +
ggtitle("MĂ©todo del codo para elegir el nĂºmero de clusters")

Asignacion del cluster
set.seed(123) # Fijar semilla para reproducibilidad
kmeans_result <- kmeans(df_scaled, centers = 3, nstart = 25)
df$Cluster <- as.factor(kmeans_result$cluster) # Agregar la asignaciĂ³n de cluster al dataframe
fviz_cluster(kmeans_result, data = df_scaled)

aggregate(df[, 1:4], by = list(df$Cluster), mean)
## Group.1 Murder Assault UrbanPop Rape
## 1 1 12.165000 255.25000 68.40000 29.16500
## 2 2 3.600000 78.53846 52.07692 12.17692
## 3 3 5.841176 141.88235 72.47059 18.82353
Poner Nombres
df$Seguridad <- factor(df$Cluster,
levels = c(1, 2, 3),
labels = c("Muy Seguro", "Medio Seguro", "No Seguro"))
Asignar Dataset
# Unir el dataset con el mapa
usa$state_name <- tolower(usa$name) # Convertir nombres de estados a minĂºsculas
df$state_name <- tolower(rownames(df)) # Lo mismo para la base de datos
usa_map <- left_join(usa, df, by = "state_name")
# Graficar el mapa con los clusters
ggplot(data = usa_map) +
geom_sf(aes(fill = Seguridad)) +
scale_fill_manual(values = c("Muy Seguro" = "green",
"Medio Seguro" = "yellow",
"No Seguro" = "red")) +
ggtitle("Clusters de seguridad en EE.UU. (USArrests)") +
theme_minimal()

LS0tDQp0aXRsZTogIlVTQWFycmVzdCINCmF1dGhvcjogIk1heGltaWxpYW5vIEd1ZXZhcmEgR2FyY2lhIg0KZGF0ZTogIjIwMjUtMDItMjEiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgICAgdG9jOiBUUlVFDQogICAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUNCiAgICAgIHRoZW1lOiBqb3VybmFsDQotLS0NCg0KDQohW10oaHR0cHM6Ly9tZWRpYS5nZXR0eWltYWdlcy5jb20vaWQvMTQyMTY0NDA1NS92aWRlby90d28tcG9saWNlLW9mZmljZXJzLWFycmVzdGluZy1hLXN1c3BlY3QtYXQtbmlnaHQuanBnP3M9NjQweDY0MCZrPTIwJmM9Q3VmbGlUWlJVT0phRS05eVE0OGc4czQyMkItdUNsTnJPUkVjU0JrcTY0bz0pDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij5Db250ZXh0bzwvc3Bhbj4NCg0KTGEgYmFzZSBkZSBkYXRvcyAqKlVTQXJyZXN0cyoqIGNvbnRpZW5lIGVzdGFkw61zdGljYXMgZW4gYXJyZXN0b3MgcG9yIGNhZGEgMTAwLDAwMCByZXNpZGVudGVzIHBvciBhZ3Jlc2nDs24sIGFzZXNpbmF0byB5IHZpb2xhY2nDs24gZW4gY2FkYSB1bm8gZGUgbG9zIDUwIGVzdGFkb3MgZGUgRUUuVVUuIGVuIDE5NzMNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPkluc3RhbGFyIHBhcXVldGVzIHkgbGlicmVyw61hczwvc3Bhbj4NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiNpbnN0YWxsLnBhY2thZ2VzKCJjbHVzdGVyIikgIyBQYXJhIGFncnVwYW1pZW50b3MgDQpsaWJyYXJ5KGNsdXN0ZXIpDQojaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpICMgUGFyYSBncmFmaWNhcg0KbGlicmFyeShnZ3Bsb3QyKQ0KI2luc3RhbGwucGFja2FnZXMoImZhY3RvZXh0cmEiKSAjIFZpc3VhbGl6YXIgY2x1c3RlcnMNCmxpYnJhcnkoZmFjdG9leHRyYSkNCiNpbnN0YWxsLnBhY2thZ2VzKCJkYXRhLnRhYmxlIikgIyBDb25qdW50byBkZSBkYXRvcyBncmFuZGVzDQpsaWJyYXJ5KGRhdGEudGFibGUpDQojaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KI2luc3RhbGwucGFja2FnZXMoInNmIikgIyBBbsOhbGlzaXMgZGUgZGF0b3MgZXNwYWNpYWxlcw0KbGlicmFyeShzZikNCiNpbnN0YWxsLnBhY2thZ2VzKCJybmF0dXJhbGVhcnRoIikgI1Byb3BvcmNpb25hIGzDrW1pdGVzIGdyb2dyw6FmaWNvcw0KbGlicmFyeShybmF0dXJhbGVhcnRoKQ0KI2luc3RhbGwucGFja2FnZXMoInJuYXR1cmFsZWFydGhkYXRhIikgI0RhdG9zIGRlIGdlb2dyYWbDrWENCmxpYnJhcnkocm5hdHVyYWxlYXJ0aGRhdGEpDQojaW5zdGFsbC5wYWNrYWdlcygiZGV2dG9vbHMiKQ0KbGlicmFyeShkZXZ0b29scykgI0luc3RhbGFyIHBhcXVldGVzIGRlIGZ1ZW50ZXMgZXh0ZXJuYXMNCmRldnRvb2xzOjppbnN0YWxsX2dpdGh1Yigicm9wZW5zY2kvcm5hdHVyYWxlYXJ0aGhpcmVzIikgI01hcGEgZGUgTWV4aWNvIHBhcnRpY3VsYXINCmxpYnJhcnkocm5hdHVyYWxlYXJ0aGhpcmVzKQ0KI2luc3RhbGwucGFja2FnZXMoImNhcmV0IikgI0FsZ29yaXRtb3MgZGUgYXByZW5kaXphamUgYXV0b23DoXRpY28NCmxpYnJhcnkoY2FyZXQpDQojaW5zdGFsbC5wYWNrYWdlcygiZGF0YXNldHMiKSAjIFBhcmEgdXNhciBsYSBiYXNlIGRlIGRhdG9zICJJcmlzIg0KbGlicmFyeShkYXRhc2V0cykNCiNpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikgI0dyw6FmaWNhcyBjb24gbWVqb3IgZGlzZcOxbw0KbGlicmFyeShnZ3Bsb3QyKQ0KI2luc3RhbGwucGFja2FnZXMoImxhdHRpY2UiKSAjQ3JlYXIgZ3LDoWZpY29zDQpsaWJyYXJ5KGxhdHRpY2UpDQojaW5zdGFsbC5wYWNrYWdlcygiRGF0YUV4cGxvcmVyIikgI0Fuw6FsaXNpcyBkZXNjcmlwdGl2bw0KbGlicmFyeShEYXRhRXhwbG9yZXIpDQojaW5zdGFsbC5wYWNoYWdlcyhrZXJubGFiKSAjTcOpdG9kb3MgZGUgYXByZW5kaXphamUgYXV0b23DoXRpY28NCmxpYnJhcnkoa2VybmxhYikNCmBgYA0KDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkIDsiPkltcG9ydGFyIGJhc2VzIGRlIGRhdG9zPC9zcGFuPg0KYGBge3J9DQpkZiA8LSBVU0FycmVzdHMNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCA7Ij5PYnRlbmVyIG1hcGEgZGUgRXN0YWRvcyB1bmlkb3M8L3NwYW4+DQpgYGB7cn0NCnVzYSA8LSBuZV9zdGF0ZXMoY291bnRyeSA9ICJVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EiLCByZXR1cm5jbGFzcyA9ICJzZiIpDQoNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCA7Ij5FbnRlbmRlciBiYXNlIGRlIGRhdG9zPC9zcGFuPg0KYGBge3J9DQpzdW1tYXJ5KGRmKQ0KYGBgDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCA7Ij5EYXRvcyBFc2NhbGFkb3M8L3NwYW4+DQpgYGB7cn0NCmRmX3NjYWxlZCA8LSBzY2FsZShkZikgICMgTm9ybWFsaXphbW9zIGxhcyB2YXJpYWJsZXMNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCA7Ij5NZXRvZG8gZGUgY29kbzwvc3Bhbj4NCmBgYHtyfQ0KZnZpel9uYmNsdXN0KGRmX3NjYWxlZCwga21lYW5zLCBtZXRob2QgPSAid3NzIikgKyANCiAgZ2d0aXRsZSgiTcOpdG9kbyBkZWwgY29kbyBwYXJhIGVsZWdpciBlbCBuw7ptZXJvIGRlIGNsdXN0ZXJzIikNCg0KDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQgOyI+QXNpZ25hY2lvbiBkZWwgY2x1c3Rlcjwvc3Bhbj4NCmBgYHtyfQ0Kc2V0LnNlZWQoMTIzKSAgIyBGaWphciBzZW1pbGxhIHBhcmEgcmVwcm9kdWNpYmlsaWRhZA0Ka21lYW5zX3Jlc3VsdCA8LSBrbWVhbnMoZGZfc2NhbGVkLCBjZW50ZXJzID0gMywgbnN0YXJ0ID0gMjUpDQoNCmRmJENsdXN0ZXIgPC0gYXMuZmFjdG9yKGttZWFuc19yZXN1bHQkY2x1c3RlcikgICMgQWdyZWdhciBsYSBhc2lnbmFjacOzbiBkZSBjbHVzdGVyIGFsIGRhdGFmcmFtZQ0KDQpmdml6X2NsdXN0ZXIoa21lYW5zX3Jlc3VsdCwgZGF0YSA9IGRmX3NjYWxlZCkNCg0KYGBgDQoNCmBgYHtyfQ0KYWdncmVnYXRlKGRmWywgMTo0XSwgYnkgPSBsaXN0KGRmJENsdXN0ZXIpLCBtZWFuKQ0KYGBgDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCA7Ij5Qb25lciBOb21icmVzPC9zcGFuPg0KYGBge3J9DQpkZiRTZWd1cmlkYWQgPC0gZmFjdG9yKGRmJENsdXN0ZXIsIA0KICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKDEsIDIsIDMpLCANCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiTXV5IFNlZ3VybyIsICJNZWRpbyBTZWd1cm8iLCAiTm8gU2VndXJvIikpDQpgYGANCg0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCA7Ij5Bc2lnbmFyIERhdGFzZXQ8L3NwYW4+DQpgYGB7cn0NCiMgVW5pciBlbCBkYXRhc2V0IGNvbiBlbCBtYXBhDQp1c2Ekc3RhdGVfbmFtZSA8LSB0b2xvd2VyKHVzYSRuYW1lKSAgIyBDb252ZXJ0aXIgbm9tYnJlcyBkZSBlc3RhZG9zIGEgbWluw7pzY3VsYXMNCmRmJHN0YXRlX25hbWUgPC0gdG9sb3dlcihyb3duYW1lcyhkZikpICAjIExvIG1pc21vIHBhcmEgbGEgYmFzZSBkZSBkYXRvcw0KDQp1c2FfbWFwIDwtIGxlZnRfam9pbih1c2EsIGRmLCBieSA9ICJzdGF0ZV9uYW1lIikNCg0KDQojIEdyYWZpY2FyIGVsIG1hcGEgY29uIGxvcyBjbHVzdGVycw0KZ2dwbG90KGRhdGEgPSB1c2FfbWFwKSArDQogIGdlb21fc2YoYWVzKGZpbGwgPSBTZWd1cmlkYWQpKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIk11eSBTZWd1cm8iID0gImdyZWVuIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1lZGlvIFNlZ3VybyIgPSAieWVsbG93IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIFNlZ3VybyIgPSAicmVkIikpICsNCiAgZ2d0aXRsZSgiQ2x1c3RlcnMgZGUgc2VndXJpZGFkIGVuIEVFLlVVLiAoVVNBcnJlc3RzKSIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCmBgYA0KDQoNCg==