Agrupamiento o clustering es una tecnica de aprendizaje automatico no supervisado que agrupa datos en funcion de su similitud.

Algunos usos típicos de esta técnica son:

Instalar paquetes y llamar librerías

library(data.table)
library(dplyr)
library(ggplot2)
library(tidyr)
library(purrr)
library(scales)
library(ggrepel)

Cargar datos (CSV)

ruta_csv <- "IDEFF_jul25.csv"

if (!file.exists(ruta_csv)) {
  message("No encontré el archivo en 'ruta_csv'. Abre el diálogo y selecciona el CSV…")
  ruta_csv <- file.choose()
}

df <- fread(ruta_csv, encoding = "UTF-8") 

cat("Dimensiones:", nrow(df), "filas x", ncol(df), "columnas\n")
## Dimensiones: 13398 filas x 18 columnas

Configuración y limpieza

meses <- c("ENERO","FEBRERO","MARZO","ABRIL","MAYO","JUNIO",
           "JULIO","AGOSTO","SEPTIEMBRE","OCTUBRE","NOVIEMBRE","DICIEMBRE")

for (m in meses) {
  if (m %in% names(df)) df[[m]] <- suppressWarnings(as.numeric(df[[m]]))
}

cols_req <- c("YEAR", "ENTIDAD", "TIPO", "CONCEPTO", meses)
faltan <- setdiff(cols_req, names(df))
if (length(faltan) > 0) {
  message("⚠️ Faltan columnas: ", paste(faltan, collapse = ", "))
} else {
  message("✅ Columnas esperadas presentes.")
}

Cluster: incidencia por entidad (Baja/Media/Alta)

df_total <- df %>%
  group_by(ENTIDAD) %>%
  summarise(total = sum(across(all_of(meses), ~ .x), na.rm = TRUE), .groups = "drop")

set.seed(42)
km_inc <- kmeans(scale(df_total$total), centers = 3, nstart = 50)

tmp <- df_total %>%
  mutate(cluster = km_inc$cluster) %>%
  group_by(cluster) %>%
  summarise(media = mean(total), .groups="drop") %>%
  arrange(media) %>%
  mutate(label = c("Baja","Media","Alta"))

map_labels <- setNames(tmp$label, tmp$cluster)

df_clusters_inc <- df_total %>%
  mutate(nivel = factor(map_labels[as.character(km_inc$cluster)],
                        levels = c("Baja","Media","Alta"))) %>%
  arrange(desc(total)) %>%
  select(ENTIDAD, total, nivel)

print(df_clusters_inc)
## # A tibble: 33 × 3
##    ENTIDAD           total nivel
##    <chr>             <dbl> <fct>
##  1 CIUDAD DE MEXICO 196446 Alta 
##  2 MEXICO            86285 Media
##  3 JALISCO           79893 Media
##  4 GUANAJUATO        72313 Media
##  5 BAJA CALIFORNIA   70965 Media
##  6 VERACRUZ          65096 Media
##  7 TAMAULIPAS        54131 Media
##  8 SONORA            51801 Media
##  9 PUEBLA            47702 Media
## 10 MICHOACAN         45245 Media
## # ℹ 23 more rows