Contexto

Este proyecto utiliza un conjunto de datos detallado sobre el precio de la tortilla en México, una de las bases de la dieta del país. La información proviene del Sistema Nacional de Información e Integración de Mercados, que ha recopilado más de 300,000 registros desde el año 2007. Los datos, originalmente distribuidos en un formato poco amigable, han sido consolidados en un archivo CSV para facilitar su uso y análisis.

El dataset proporciona el precio promedio por kilogramo de tortillas en pesos mexicanos ($MXN), con registros para 53 ciudades, 384 tortillerías de barrio y 120 tiendas minoristas a lo largo de todo el territorio nacional.

Paso 1.Instalar paquetes y llamar librerías

#install.packages("cluster") #Análisis de agrupamiento
library(cluster)
#install.packages("ggplot2") #Graficar
library(ggplot2)
#install.packages("data.table") #Manejo de muchos datos
library(data.table)
#install.packages("factoextra") #Gráfica de optimización de númeor de clústers
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
#install.packages("dplyr")
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:data.table':
## 
##     between, first, last
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
#install.packages("caret")
library(caret)
## Cargando paquete requerido: lattice

Paso 2.Obtener los datos

# 1. Cargar dataset
df <- read.csv("C:\\Users\\atene\\Downloads\\R_Concentracion\\tortilla_prices.csv")

Paso 3.Entender los datos

#Separar por grupos y agregar avg_price y max_price columnas
df_state2 <- df %>%
  group_by(State) %>%
  summarise(avg_price = mean(Price.per.kilogram, na.rm = TRUE),
            max_price = max(Price.per.kilogram, na.rm = TRUE)) %>%
  ungroup()

Paso 4.Escalar datos

#Datos escalados
df_num <- scale(df_state2[, c("avg_price", "max_price")])

Paso 5.Establecer clusters

#Clusterización 4 porque hay una división clara entre los promedios de los precios
clusters1 <- kmeans(df_num, centers = 4)

Paso 6.Visualización de clusteres

#Plot visual de los clusters
fviz_cluster(clusters1, data = df_num,
             geom = "point",
             ellipse.type = "convex",
             show.clust.cent = TRUE,
             palette = "jco",
             ggtheme = theme_minimal())

# Paso 7.Conclusiones y hallazgos del precio de la tortilla en México

El análisis del precio de la tortilla por estado reveló un patrón de comportamiento inesperado. Al aplicar una técnica de clústeres, se identificó que el precio promedio de la tortilla se agrupa en cuatro clústeres distintos. Esta segmentación no solo se debe a diferencias significativas en los precios entre estados, sino también a variaciones de unos pocos centavos que, al agregarse, definen separaciones claras en los rangos de precios.

Esta agrupación en cuatro clústeres demuestra la existencia de mercados de precios bien definidos a nivel estatal, más allá de la simple variación económica.

LS0tDQp0aXRsZTogIk1leGljb18yIg0KYXV0aG9yOiAiQXRlbmVhIExvcGV6IENvcm9uYSINCmRhdGU6ICIyMDI1LTA4LTIwIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogVFJVRSAjVGFibGEgZGUgY29udGVuaWRvcw0KICAgIHRvY19mbG9hdDogVFJVRSAjVGJsYSBkZSBhbGdvDQogICAgY29kZV9kb3dubG9hZDogVFJVRSAjUG9kZXIgZGVzY2FyZ2FyIGPDs2RpZ28NCiAgICB0aGVtZTogeWV0aQ0KLS0tDQoNCiFbXShodHRwczovL21lZGlhLnRlbm9yLmNvbS9UT3pIQkZJSldOSUFBQUFNL3RvcnRpbGxhLmdpZikNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij4gQ29udGV4dG8gPC9zcGFuPiAgDQpFc3RlIHByb3llY3RvIHV0aWxpemEgdW4gY29uanVudG8gZGUgZGF0b3MgZGV0YWxsYWRvIHNvYnJlIGVsIHByZWNpbyBkZSBsYSB0b3J0aWxsYSBlbiBNw6l4aWNvLCB1bmEgZGUgbGFzIGJhc2VzIGRlIGxhIGRpZXRhIGRlbCBwYcOtcy4gTGEgaW5mb3JtYWNpw7NuIHByb3ZpZW5lIGRlbCBTaXN0ZW1hIE5hY2lvbmFsIGRlIEluZm9ybWFjacOzbiBlIEludGVncmFjacOzbiBkZSBNZXJjYWRvcywgcXVlIGhhIHJlY29waWxhZG8gbcOhcyBkZSAzMDAsMDAwIHJlZ2lzdHJvcyBkZXNkZSBlbCBhw7FvIDIwMDcuIExvcyBkYXRvcywgb3JpZ2luYWxtZW50ZSBkaXN0cmlidWlkb3MgZW4gdW4gZm9ybWF0byBwb2NvIGFtaWdhYmxlLCBoYW4gc2lkbyBjb25zb2xpZGFkb3MgZW4gdW4gYXJjaGl2byBDU1YgcGFyYSBmYWNpbGl0YXIgc3UgdXNvIHkgYW7DoWxpc2lzLg0KDQpFbCBkYXRhc2V0IHByb3BvcmNpb25hIGVsIHByZWNpbyBwcm9tZWRpbyBwb3Iga2lsb2dyYW1vIGRlIHRvcnRpbGxhcyBlbiBwZXNvcyBtZXhpY2Fub3MgKCRNWE4pLCBjb24gcmVnaXN0cm9zIHBhcmEgNTMgY2l1ZGFkZXMsIDM4NCB0b3J0aWxsZXLDrWFzIGRlIGJhcnJpbyB5IDEyMCB0aWVuZGFzIG1pbm9yaXN0YXMgYSBsbyBsYXJnbyBkZSB0b2RvIGVsIHRlcnJpdG9yaW8gbmFjaW9uYWwuDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+IFBhc28gMS5JbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzIDwvc3Bhbj4gIA0KYGBge3IgbWVzc2FnZT1UUlVFLCB3YXJuaW5nPVRSVUV9DQojaW5zdGFsbC5wYWNrYWdlcygiY2x1c3RlciIpICNBbsOhbGlzaXMgZGUgYWdydXBhbWllbnRvDQpsaWJyYXJ5KGNsdXN0ZXIpDQojaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpICNHcmFmaWNhcg0KbGlicmFyeShnZ3Bsb3QyKQ0KI2luc3RhbGwucGFja2FnZXMoImRhdGEudGFibGUiKSAjTWFuZWpvIGRlIG11Y2hvcyBkYXRvcw0KbGlicmFyeShkYXRhLnRhYmxlKQ0KI2luc3RhbGwucGFja2FnZXMoImZhY3RvZXh0cmEiKSAjR3LDoWZpY2EgZGUgb3B0aW1pemFjacOzbiBkZSBuw7ptZW9yIGRlIGNsw7pzdGVycw0KbGlicmFyeShmYWN0b2V4dHJhKQ0KI2luc3RhbGwucGFja2FnZXMoImRwbHlyIikNCmxpYnJhcnkoZHBseXIpDQojaW5zdGFsbC5wYWNrYWdlcygiY2FyZXQiKQ0KbGlicmFyeShjYXJldCkNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPiBQYXNvIDIuT2J0ZW5lciBsb3MgZGF0b3MgPC9zcGFuPiAgDQoNCmBgYHtyfQ0KIyAxLiBDYXJnYXIgZGF0YXNldA0KZGYgPC0gcmVhZC5jc3YoIkM6XFxVc2Vyc1xcYXRlbmVcXERvd25sb2Fkc1xcUl9Db25jZW50cmFjaW9uXFx0b3J0aWxsYV9wcmljZXMuY3N2IikNCg0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+IFBhc28gMy5FbnRlbmRlciBsb3MgZGF0b3MgPC9zcGFuPg0KYGBge3J9DQojU2VwYXJhciBwb3IgZ3J1cG9zIHkgYWdyZWdhciBhdmdfcHJpY2UgeSBtYXhfcHJpY2UgY29sdW1uYXMNCmRmX3N0YXRlMiA8LSBkZiAlPiUNCiAgZ3JvdXBfYnkoU3RhdGUpICU+JQ0KICBzdW1tYXJpc2UoYXZnX3ByaWNlID0gbWVhbihQcmljZS5wZXIua2lsb2dyYW0sIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBtYXhfcHJpY2UgPSBtYXgoUHJpY2UucGVyLmtpbG9ncmFtLCBuYS5ybSA9IFRSVUUpKSAlPiUNCiAgdW5ncm91cCgpDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij4gUGFzbyA0LkVzY2FsYXIgZGF0b3MgPC9zcGFuPg0KYGBge3J9DQojRGF0b3MgZXNjYWxhZG9zDQpkZl9udW0gPC0gc2NhbGUoZGZfc3RhdGUyWywgYygiYXZnX3ByaWNlIiwgIm1heF9wcmljZSIpXSkNCg0KYGBgDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPiBQYXNvIDUuRXN0YWJsZWNlciBjbHVzdGVycyA8L3NwYW4+DQoNCmBgYHtyfQ0KI0NsdXN0ZXJpemFjacOzbiA0IHBvcnF1ZSBoYXkgdW5hIGRpdmlzacOzbiBjbGFyYSBlbnRyZSBsb3MgcHJvbWVkaW9zIGRlIGxvcyBwcmVjaW9zDQpjbHVzdGVyczEgPC0ga21lYW5zKGRmX251bSwgY2VudGVycyA9IDQpDQpgYGANCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+IFBhc28gNi5WaXN1YWxpemFjacOzbiBkZSBjbHVzdGVyZXMgPC9zcGFuPg0KDQpgYGB7cn0NCiNQbG90IHZpc3VhbCBkZSBsb3MgY2x1c3RlcnMNCmZ2aXpfY2x1c3RlcihjbHVzdGVyczEsIGRhdGEgPSBkZl9udW0sDQogICAgICAgICAgICAgZ2VvbSA9ICJwb2ludCIsDQogICAgICAgICAgICAgZWxsaXBzZS50eXBlID0gImNvbnZleCIsDQogICAgICAgICAgICAgc2hvdy5jbHVzdC5jZW50ID0gVFJVRSwNCiAgICAgICAgICAgICBwYWxldHRlID0gImpjbyIsDQogICAgICAgICAgICAgZ2d0aGVtZSA9IHRoZW1lX21pbmltYWwoKSkNCmBgYA0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij4gUGFzbyA3LkNvbmNsdXNpb25lcyB5IGhhbGxhemdvcyBkZWwgcHJlY2lvIGRlIGxhIHRvcnRpbGxhIGVuIE3DqXhpY28gPC9zcGFuPg0KDQpFbCBhbsOhbGlzaXMgZGVsIHByZWNpbyBkZSBsYSB0b3J0aWxsYSBwb3IgZXN0YWRvIHJldmVsw7MgdW4gcGF0csOzbiBkZSBjb21wb3J0YW1pZW50byBpbmVzcGVyYWRvLiBBbCBhcGxpY2FyIHVuYSB0w6ljbmljYSBkZSBjbMO6c3RlcmVzLCBzZSBpZGVudGlmaWPDsyBxdWUgZWwgKnByZWNpbyBwcm9tZWRpbyogZGUgbGEgdG9ydGlsbGEgc2UgYWdydXBhIGVuIGN1YXRybyBjbMO6c3RlcmVzIGRpc3RpbnRvcy4gRXN0YSBzZWdtZW50YWNpw7NuIG5vIHNvbG8gc2UgZGViZSBhIGRpZmVyZW5jaWFzIHNpZ25pZmljYXRpdmFzIGVuIGxvcyBwcmVjaW9zIGVudHJlIGVzdGFkb3MsIHNpbm8gdGFtYmnDqW4gYSB2YXJpYWNpb25lcyBkZSB1bm9zIHBvY29zIGNlbnRhdm9zIHF1ZSwgYWwgYWdyZWdhcnNlLCBkZWZpbmVuIHNlcGFyYWNpb25lcyBjbGFyYXMgZW4gbG9zIHJhbmdvcyBkZSBwcmVjaW9zLg0KDQpFc3RhIGFncnVwYWNpw7NuIGVuIGN1YXRybyBjbMO6c3RlcmVzIGRlbXVlc3RyYSBsYSBleGlzdGVuY2lhIGRlIG1lcmNhZG9zIGRlIHByZWNpb3MgYmllbiBkZWZpbmlkb3MgYSBuaXZlbCBlc3RhdGFsLCBtw6FzIGFsbMOhIGRlIGxhIHNpbXBsZSB2YXJpYWNpw7NuIGVjb27Ds21pY2Eu