En la empresa Supermercado Montserrat contiene una gran cantidad de boletas generadas por cada caja. Por lo consecuente que cada boleta corresponde a un cliente y a su vez tiene registra sus productos y su cantidad. Esta información es enviada a la central, donde es almacenada por años. Y en la misma central contienen la información contenido de sus bodegas en cada sucursal. Siendo que se obtiene la información de compra, no se sabe cuál es el producto que el cliente prefieren y su relación con la cantidad de que contiene la bodega. Por lo cual se requiere una forma visual que indique el consumo y contenido de abastecimiento de los productos en cada sucursal. Así poder comprar o trasladar los productos entre sus 35 sucursales, dependiendo a la preferencia de los clientes
Cada sucursal contiene a lo menos 3 cajas en funcionamiento,Los datos son almacenados en la misma caja por una semana como máximo y luego son eliminadas en forma automática.
Por lo cual la cantidad de transacción son variadas de pendiendo de cada boleta, cada boleta (en su inicio) contiene la cantidad de registros que coresponde a la compra,cada archivo en la caja tiene un formatos de nombre con una exteccion numerica “IDC001”, que el número corresponde a la caja de la transaccion (001) y el nombre IDC corresponde el tipo de dato (Encriptados). Esta información se envía en forma automática al servidor master, que queda en un solo archivo HOCIDC.001, que HOCIDC corresponde el tipo de datos (Encriptados) Cuando el número supere el valor 30 son eliminados. Esto implica que la información en cada sucursal se almacenará por 1 mes.
Cada noche se procede a rescatar de ventas, esto implica obtener cada archivó en cada sucursal con el nombre de “HOCIDC.001” y copiándola a la central (Servidor repositorio) con el nombre de HOCIDC02.191112, el HOCIDC corresponde al tipo de dato (Encriptado), 02 corresponde a la sucursal y la extensión corresponde a la fecha.
Este archivo es leído y almacenados en AS400 en una sola tabla llamada “ventas.2019”
Esquema general de la información
Se obtendrá del Servidor AS400 las siguientes tablas Ventas.2019 y Locales
Definiciones de la tabla:
| Columna | Tipo Datos | Descripción |
|---|---|---|
| CODLOC Código de local |
Numérico (3) | Corresponde a la enumeración de la sucursal |
| FECHA Fecha del registro |
Fecha | Fecha correspondiente al registro |
| HORA Hora que se realizó el registro |
Tiempo hora | Corresponde a la hora que se realizó la transacción |
| SECCION Número de sección que corresponde al producto |
Numérico(3) | Corresponde al código relacional de la sección que pertenece. Estas secciones puede ser verdura , panadería , etc. |
| NOMSEC Nombre de la sección |
Texto(30) | Corresponde al nombre que pertenes el producto. |
| PLU numero de código del producto. |
Numérico(18) | Corresponde al códigos de productos(PLU) |
| NOMPLU Nombre del producto |
Texto (50) | Corresponde al nombre del producto |
| CANTIDAD Cantidad de la compra |
Decimal(4,3) | Corresponde a la cantidad e la compra, puede ser valor en entero o con decimales para los pasables |
| VALOR Valor del producto |
Numérico (8) | Valor que el cliente pago por el producto |
| TOTAL Total de boleta |
Numérico (8) | Valor que el cliente canse el total de su compra |
| FOLIO Número de boleta |
Numérico (12) | Número de boleta o factura |
| Columna | Tipo Datos | Descripción |
|---|---|---|
| CODLOC Código de local |
Numérico (3) | Corresponde a la enumeración de la sucursal |
| NOMSUP Nombre de la sucursal |
Texto(15) | Nombre de la sucursal |
| DIRSUP Dirección de la sucursal |
Texto(50) | La ubicacion de la sucursal |
| Columna | Tipo Datos | Descripción |
|---|---|---|
| CODLOC Código de local |
Numérico (3) | Corresponde a la enumeración de la sucursal |
| PLU Número de código del producto. |
Numérico (18) | Corresponde al códigos de productos (PLU)) sucursal |
| CANINV Cantidad de la compra |
Decimal(4,3) | Corresponde a la cantidad e la compra, puede ser valor en entero o con decimales |
El archivo Ventas.2019 contiene las ventas del año 2019, en datos no se encuentras vacíos o signos no correspondiente a su columna determinada, solo que exciten dos observaciones.
El nombre de la columna “CODLOC” contiene un carácter oculto que provoca una mala lectura de su nombre, por lo cual se realiza un renombramiento de esta columna.
El archivo Locales contiene los nombres de cada sucursal excepto el posicionamiento global (GPS), por lo tanto, se Utilizara el excel en office 2014 en un ambiente Windows. para añadir las nuevas columnas, LONGITUD y LATITUD de cada sucursal. La información de la ubicación GPS se usará con la herramienta de google maps.
La información entregada por el usuario:
° Venta.2019
° Locales.xls
° Bodegas
Fueron entregadas atreves de un pendrive (almacenamiento externo)
La información entregada de venta.2019, tal como lo indica es de extensión “.2019”, con un cantidad de Gigabyte de 7,5 con una cantidad de registro de 562.326.365
La información entregada de Bodega no contiene extensión, con una cantidad de 1,2 Mega byte con una cantidad de 58.974 registro.
La información entregada de Locales.xls, es un extracto del original por motivo de seguridad, el cliente elimino la información contenida y fue entregado en formato de excel, con 1,2 Mega byte con una cantidad de 35 registros.
Se importará la información del archivo Ventas.2019 y se renombrará la columna CODLOC por motivo que se encuentra el carácter («) que no corresponde a la columna.
Se importará el archivo Bodega, Donde se encuentra la información de cada sucursal y su contenido.
Esta información contenida, se tendrá que renombrar sus columnas siendo que se encuentran cambiadas de su posición original.
Se importa el archivo Ventas.2019, Quedando con el nombre del dataset Ventas y sus valores nulos en “na”.
Ventas <- read.csv2("Ventas.2019", na="na")
Se importa archivo locales, Quedando con el nombre del dataset Locales y sus valores nulos en “0”.
con los tipo de columnas : “numeric”, “text”, “text”,“numeric”, “numeric”.
Locales <- read_excel("Locales.xlsx", col_types = c("numeric", "text", "text","numeric", "numeric"), na = "0")
Se importa archivo bodegas, Quedando con el nombre del dataset Bodegas
Bodegas <- read.csv2("Bodegas")
Se cambia en la tabla Ventas la columna CODLOC por el mismo nombre, ya que contiene un carácter incorrecto en su sintáis. .
names(Ventas )[1]<-"CODLOC"
Se cambia los nombres de posición de las columnas de la tabla bodegas, por motivo que se encuentran en pociones incorrectas.
names(Bodegas)[1]<-"CODLOC"
names(Bodegas)[2]<-"PLU"
names(Bodegas)[3]<-"CANTBODE"
Se tuvo que analizar las cantidades registradas en las ventas y las cantidades en bodegas.
Observando esta información nos encontramos que se podía unir ambas informaciones generando un porcentaje de compras y porcentaje existente en la bodega. de esta manera se podra mostrar un promedio que lo que se consumen y lo que contienen en la bodegas.
También se pudo obtener la media, la median de la muestra de los datos en cada sucursal.
Se agrupa la información de ventas entre las columnas local y PLU, sumando la cantidad.
VentaAgrupada <- Ventas %>% filter(SECCION != 8) %>% select(CODLOC,PLU,NOMPLU,CANTIDAD) %>% group_by(CODLOC,PLU,NOMPLU) %>% summarise(CANTIDAD = sum( CANTIDAD))
Se agrupa la información de Bodega entre las columnas local y PLU, sumando la cantidad y la columna con el nombre CANTBODE
BodegaAgrupada <- Bodegas %>% group_by(CODLOC,PLU) %>% summarise(CANTBODE = sum(CANTBODE))
Se unen ambas tablas “VentaAgrupada” y "BodegaAgrupada, la unión de deberá unir através de CODLOC y PLU.
Agrupado <- left_join(VentaAgrupada,BodegaAgrupada,by=c("CODLOC","PLU"))
Construimos el porcentaje de diferencia entre las ventas y existencia en bodega.
Agrupado <- mutate(Agrupado,Porsentaje= round(CANTBODE*100/CANTIDAD,0))
El porcentaje de sobre stock en la cadena de sucursales corresponde a los siguientes productos.
Agrupado %>% filter(Porsentaje>100) %>% select("Sucursal" = CODLOC,"Producto" = NOMPLU,"%" = Porsentaje,PLU)
## # A tibble: 2 x 4
## # Groups: Sucursal, PLU [2]
## Sucursal Producto `%` PLU
## <int> <fct> <dbl> <dbl>
## 1 2 TOMATE GRANEL 128 201560000008
## 2 7 TOMATE GRANEL 262 201560000008
Obtener el código de PLU del mayor diferencia
PLUPRO <- as.factor((Agrupado %>% filter(Porsentaje>100))[1:1,]$PLU)[1]
Seleccionamos el todos los productos con el PLUPRO, Luego lo unimos con la tabla **Locales* para tener los nombres de las sucursales
Registros <- Ventas %>% filter(PLU==PLUPRO) %>% select(CODLOC,NOMPLU,( CANTIDAD))
Registros <- left_join(Registros,Locales,by=c("CODLOC"))
Nombre del producto
Nombre <- as.vector( Registros[1:1,]["NOMPLU"])
Graficamos las tendencias de consumo en la cadena del supermercado Montserrat.
ggplot(Registros, aes(x=NOMSUP, y=CANTIDAD,fill = NOMSUP)) + labs(x = "Sucursales",y="Cantidades",title ="Frecuencia de consumo por Sucursal " , subtitle =Registros$NOMPLU[1] )+geom_boxplot() + theme(axis.text.x = element_text(angle=90, vjust=0.5),legend.position = "none")
Graficamos las tendencias de consumo en la cadena del supermercado Montserrat.
Lo cual se muestra que algarrobal es donde más frecuencia consumen los clientes y a subes en monjitas es el local que consume menos entres sus sucursales.
Ahora verificamos lo que contiene en las bodegas, con los consumos en los locales.
Para esto hay obtener los datos Agrupado y unirlo con los Locales
Resultado <- Agrupado %>% filter(PLU == PLUPRO)
Resultado <- left_join(Resultado,Locales ,by=c("CODLOC"))
Mostramos los datos de bodega conjunto al consumo de los clientes
ggplot(Resultado,aes(NOMSUP, CANTBODE)) +
geom_bar(aes(fill="black"), stat="identity") +
geom_errorbar( aes(x=NOMSUP, ymin=Minimo25, ymax=Minimo75), width=0.4, alpha=0.9, size=0.8) +
theme(axis.text.x = element_text(angle = 60, hjust = 1) )+
labs(x = "Sucursales",y="Cantidades",title ="Consumo Clientes VS Bodega " , subtitle =Resultado$NOMPLU[1])+
scale_fill_hue(name="",labels=c("Bodegas", "" ),l=40)
Se muestra que en la sucursal Algarrobal contiene más en bodega, respecto a los consumo de los clientes
Respecto a lo requerido, el producto de sobre stock encontrado nos muestra lo siguiente.
Que en todas las sucursales los clientes consumen el producto “Tomate Granel”. Solo que en ciertos sucursales se consumen menos de lo habitual. por ejemplo:
° La sucursal
° Monjitas
° Libertad
Juntando la información de los consumos de los clientes y la existencia de la bodega, nos damos cuenta que la repartición de estos productos y la necesidad del cliente no seran satisfactorio a un imprevisto de algún alto consumo. Esto puede provocar que el cliente no tenga los productos o tengan una perdida por mermas o descomposición
Lo observado en las sucursales, las reparticiones de elementos están mal distribuidos. Siendo que existen producto que se encuentran más cargados a sucursal que otros, por ejemplo. ° Algarrobal ° Los condes ° Libertad ° Macul ° Independencia.
Estos productos que contienen demasiado contenido, provocará que se descomponga ya que son productos de verduras y su fecha de caducidad es corta, por lo cual se tendrá que trasladar lo más pronto posible a las sucursal menos productos y mayor consumo de clientes.
Respecto a los reglamentos de supermercado Montserrat, los productos de corta duración de caducidad, debe estar entre 25 y 40 % de abastecimiento.
Por lo cual no cumple en algunos casos. Existen sucursales con más y otras menos, pero en condiciones extremas. Existen ciertos casos, márquetin deberá monitorear ciertas sucursales, por ejemplo. La sucursal W.Martinez. En sus alrededores se encuentra una competencia considerable que corresponde a una feria.
La información entregadora por Supermercado Montserrat, fue incompleta y es poca analítica a largo plazo en ciertos casos.
La información de las ventas fue por un año completo y la información de la bodega es solo lo existente en el momento actual.
Eso provoca que no se podría monitorios meses anteriores respecto a la bodega, siendo que la bodega no almacena históricos. Analizando por un mes la información, se pudo observar que las compras de los clientes y las compras que realiza la empresa, se supera a la cantidad requerida por el cliente.
De esto a la vez existen sucursales que contienen menos productos, de que los clientes consumen.
Esto puede provocar una pérdida de productos corresponde a la merma en este caso de los tomates, siendo que podría distribuirse a otras sucursales para poder tener menos mermas.
Con esta herramienta R o análisis de producto, los compradores y las bodegas de la central del supermercado, podría visualizar mejor la distribución de sus productos y las necesidades de los clientes.
Y por otro lado en el ámbito de la programación R, se utilizó poco las herramientas, siendo que el programa R, es bastante práctico para trabajar con grandes cantidades de registros probados con (569.235.206), para este caso se utilizó con muy menos registros (366.826).
Se hubiera generado los reportes con más índole de análisis utilizando la herramienta shiny, se hubiera podido ver más condiciones semejantes de bodega, para poder reflejar una mejor condición de la empresa a nivel producto.
Con la herramienta shiny se puede generar reportes dinámicos para el usuario.
Tutorial
https://rstudio.com/wp-content/uploads/2015/03/rmarkdown-spanish.pdf
https://rmarkdown.rstudio.com/lesson-1.html
https://rstudio.com/wp-content/uploads/2016/05/base-r.pdf
https://dss.princeton.edu/training/RStudio101.pdf
https://rstudio.com/
Grafico geom_errorbar + ggplot
https://ggplot2.tidyverse.org/reference/geom_linerange.html
http://www.rpubs.com/Mentors_Ubiqum/Group_By
https://rstudio.com/wp-content/uploads/2016/05/base-r.pdf