Introducción

En este análisis revisamos las ventas, la rentabilidad y la variedad de productos del minimarket para entender cómo se comporta la demanda.

A través de distintos gráficos, buscamos identificar qué categorías se venden más, cómo varían las compras según el mes y si el inventario actual está alineado con lo que realmente se consume. Esto nos permite obtener una visión clara para apoyar decisiones comerciales y de abastecimiento.

Movimientos por Mes

Este gráfico muestra la cantidad de movimientos registrados cada mes, permitiendo identificar los periodos de mayor y menor demanda.Esta tendencia es clave para planificar promociones, ajustar inventario y anticipar meses donde se requiere mayor abastecimiento.

library(tidyverse)
library(readxl)
library(lubridate)

datos_grafico <- MOVIMIENTOS %>%
 
  # Si tu columna ya es fecha, esto no la rompe.
  mutate(Mes_Anio = floor_date(as_datetime(Fecha), unit = "month")) %>% 
  
  group_by(Mes_Anio) %>% 
  summarise(Total_Cantidad = sum(Cantidad)) %>%
  # Quitamos los NA por si acaso alguna fecha falló
  filter(!is.na(Mes_Anio))

# 3. Graficar
ggplot(datos_grafico, aes(x = Mes_Anio, y = Total_Cantidad)) +
  geom_col(fill = "pink", color = "black") +
  
  # Etiquetas de números
  geom_text(aes(label = Total_Cantidad), vjust = -0.5, size = 3.5) +
  
  # Formato del eje X (Clave para que se vea bien)
  scale_x_datetime(date_labels = "%b %Y", date_breaks = "1 month") +
  
  labs(
    title = "Cantidad de Movimientos por mes",
    x = "Mes",
    y = "Movimientos Totales"
  ) +
  
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Rentabilidad por Categoría

Este gráfico muestra la rentabilidad de cada categoría, destacando cuáles aportan ganancias y cuáles generan pérdidas. Esta información, junto con los rankings de ventas, permite analizar el desempeño general del negocio y priorizar las categorías más relevantes para la empresa.

library(scales) # Para el signo $

ggplot(DATOS, aes(x = reorder(Categoria, `Ganancia Bruta Total`), y = `Ganancia Bruta Total`)) +
  # El truco: 'fill' decide el color si la ganancia es mayor a 0 o no
  geom_col(aes(fill = `Ganancia Bruta Total` > 0)) + 
  
  coord_flip() + # Giramos para leer los nombres
  
  # Colores manuales: TRUE = Ganancia (Verde), FALSE = Pérdida (Rojo)
  scale_fill_manual(values = c("TRUE" = "forestgreen", "FALSE" = "firebrick"),
                    labels = c("Pérdida", "Ganancia"),
                    name = "Resultado") +
  
  # Formato de dinero
  scale_y_continuous(labels = dollar_format(prefix = "$", big.mark = ".")) +
  
  labs(title = "Ranking de Rentabilidad por Categoría",
       x = "", 
       y = "Ganancia Total Acumulada ($)") +
  
  theme_minimal()+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Ventas por Categoría y Mes

El gráfico combina categoría y mes para mostrar la frecuencia de ventas en el tiempo. Esto ayuda a detectar qué categorías tienen mayor rotación en determinados meses y, así, optimizar decisiones de inventario, reposición y planificación de promociones en periodos de alta demanda.

ggplot(DATOS, aes(x = Mes, y = Categoria)) +
  geom_count(color = "blue") +
  labs(title = "Frecuencia de Ventas: ¿Qué categorías se mueven más por mes?",
       size = "N° Transacciones") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Variedad de Productos por Categoría

El gráfico muestra cuántos productos tiene cada categoría. Al compararlo con las ventas y rankings, es posible determinar si la cantidad de productos ofrecidos coincide con la demanda rea y detectar categorías con artículos que se venden poco o los que necesitan mayor inventario por su alta rotación.

ggplot(DATOS, aes(x = reorder(Categoria, Categoria, function(x) length(x)))) +
  geom_bar(fill = "steelblue") + # Un color corporativo sólido
  coord_flip() +                 # ¡Esto es lo que arregla los nombres ilegibles!
  labs(title = "Variedad de Productos por Categoría",
       subtitle = "Categorías con mayor cantidad de productos distintos en catálogo",
       x = "",                   # Quitamos la etiqueta X porque ya se entiende
       y = "Cantidad de Productos Listados") +
  theme_minimal()

Conclusión

Los resultados muestran qué categorías tienen mejor desempeño, en qué meses hay más demanda y dónde el inventario puede ajustarse. Con esta información, es posible reforzar los productos con mayor rotación, reducir la cantidad de artículos en categorías con baja venta y planificar promociones según los periodos más activos. En conjunto, el análisis entrega una base sólida para mejorar la gestión del minimarket.