
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