# install.packages("readxl") # Leer documentos de excel
library(readxl)
# install.packages("tidyverse") # Manipulacion de datos
library(tidyverse)
# install.packages("ggplot2") # Generar graficos presentables
library(ggplot2)
# install.packages("forecast")
library(forecast)
#file.choose()
df <- read_excel("C:\\Users\\andre\\OneDrive\\Documentos\\AISAC\\Datos Arca Continental Original.xlsx")
## Warning: Expecting numeric in N184066 / R184066C14: got a date
## Warning: Expecting numeric in O184066 / R184066C15: got a date
## Warning: Expecting numeric in P184066 / R184066C16: got a date
## Warning: Expecting numeric in Q184066 / R184066C17: got a date
## Warning: Expecting numeric in R184066 / R184066C18: got a date
## Warning: Expecting numeric in S184066 / R184066C19: got a date
## Warning: Expecting numeric in T184066 / R184066C20: got a date
## Warning: Expecting numeric in U184066 / R184066C21: got a date
## Warning: Expecting numeric in V184066 / R184066C22: got a date
## Warning: Expecting numeric in W184066 / R184066C23: got a date
## Warning: Expecting numeric in X184066 / R184066C24: got a date
## Warning: Expecting numeric in Y184066 / R184066C25: got a date
str(df)
## tibble [466,509 × 25] (S3: tbl_df/tbl/data.frame)
## $ ID : num [1:466509] 1 2 3 4 5 6 7 8 9 10 ...
## $ Año : num [1:466509] 2016 2016 2016 2016 2016 ...
## $ Territorio : chr [1:466509] "Guadalajara" "Guadalajara" "Guadalajara" "Guadalajara" ...
## $ Sub Territorio : chr [1:466509] "Belenes" "Belenes" "Belenes" "Belenes" ...
## $ CEDI : chr [1:466509] "Suc. Belenes" "Suc. Belenes" "Suc. Belenes" "Suc. Belenes" ...
## $ Cliente : chr [1:466509] "77737" "77737" "77737" "77737" ...
## $ Nombre : chr [1:466509] "ABARR" "ABARR" "ABARR" "ABARR" ...
## $ Tamaño Cte Industria: chr [1:466509] "Extra Grande" "Extra Grande" "Extra Grande" "Extra Grande" ...
## $ Segmento Det : chr [1:466509] "Agua Mineral" "Agua Purificada" "Agua Purificada" "Agua Saborizada" ...
## $ Marca : chr [1:466509] "Topo Chico A.M." "Ciel Agua Purificada" "Ciel Agua Purificada" "Ciel Exprim" ...
## $ Presentacion : chr [1:466509] "600 ml NR" "1 Ltro. N.R." "1.5 Lts. NR" "600 ml NR" ...
## $ Tamaño : chr [1:466509] "Individual" "Individual" "Individual" "Individual" ...
## $ Retornable_NR : chr [1:466509] "No Retornable" "No Retornable" "No Retornable" "No Retornable" ...
## $ Enero : num [1:466509] NA NA NA NA NA NA 1 NA 3 NA ...
## $ Febrero : num [1:466509] NA 2 NA NA NA NA NA 1 3 NA ...
## $ Marzo : num [1:466509] NA 8 3 NA NA 1 NA NA 4 NA ...
## $ Abril : num [1:466509] NA 4 6 NA NA NA NA 1 4 NA ...
## $ Mayo : num [1:466509] NA 4 3 NA NA NA 0 NA 4 NA ...
## $ Junio : num [1:466509] NA 2 3 NA NA NA NA 1 4 0 ...
## $ Julio : num [1:466509] NA 2 3 NA NA NA 0 NA 4 NA ...
## $ Agosto : num [1:466509] NA 2 3 NA NA NA NA 1 7 NA ...
## $ Septiembre : num [1:466509] NA 2 3 NA NA NA NA 1 4 NA ...
## $ Octubre : num [1:466509] NA 2 3 NA NA NA 0 NA 3 NA ...
## $ Noviembre : num [1:466509] NA 4 3 NA 0 NA NA NA 1 NA ...
## $ Diciembre : num [1:466509] 1 2 3 1 NA NA NA NA 3 NA ...
# Cuantos NAs tengo en la base de datos?
sum(is.na(df))
## [1] 3148501
# Cuanto NAs tengo por variable?
sapply(df, function(x) sum(is.na(x)))
## ID Año Territorio
## 0 0 0
## Sub Territorio CEDI Cliente
## 0 0 0
## Nombre Tamaño Cte Industria Segmento Det
## 0 0 0
## Marca Presentacion Tamaño
## 0 0 0
## Retornable_NR Enero Febrero
## 0 233480 231213
## Marzo Abril Mayo
## 227420 224057 216910
## Junio Julio Agosto
## 215753 223411 220242
## Septiembre Octubre Noviembre
## 337314 338386 338460
## Diciembre
## 341855
# Opcion 1. Eliminar NAs
# df1 <- na.omit(df)
# Opcion 2. Reemplazar NAs con CEROS
df1 <- df
df1 [is.na(df1)] <- 0
sum(is.na(df1))
## [1] 0
# Opcion 3. Reemplazar NAs con PROMEDIO
# df1 <- df
# df1$Enero[is.na(df1$Enero)] <- mean(df1$Enero, na.rm=TRUE)
boxplot(df1$Enero)
# eliminar renglon de los totales
df1 <- df1[df1$Enero <6000, ]
boxplot(df1$Enero)
# Adecuar nombres con gsub
names(df1) <- gsub(" ","_", names(df1))
# Muestra las ventas de enero a junio por CEDI:
df2 <- select(df1,c(CEDI,Enero:Junio))
# Muestra los movimientos por CEDI y tamano de tienda grande:
df3 <- df1 %>% filter(Tamaño_Cte_Industria == "Grande")
# Ordena la base de datos por CEDI, por mrca y por presentacion:
df4 <- df1 %>% arrange(CEDI, Marca, Presentacion)
# Agrega un campo calculado con las ventas del primer semestre y muestra las ventas del primer semestre por marca:
df5 <- df1 %>% mutate(Ventas_Sem1 = Enero + Febrero + Marzo + Abril + Mayo + Junio)
ventas_sem1_por_marca <- df5 %>%
group_by(Marca) %>%
summarise(Ventas_Sem1=sum(Ventas_Sem1))
# Obten la media de las ventas del primer semestre agrupado por marca, presentacion y tamano
df6 <- df5 %>%
group_by(Marca, Presentacion, Tamaño) %>%
summarise(Ventas_Sem1+mean(Ventas_Sem1))
## Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
## dplyr 1.1.0.
## ℹ Please use `reframe()` instead.
## ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
## always returns an ungrouped data frame and adjust accordingly.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `summarise()` has grouped output by 'Marca', 'Presentacion', 'Tamaño'. You can
## override using the `.groups` argument.
# Calcular medidas de tendencia central
summary(df1)
## ID Año Territorio Sub_Territorio
## Min. : 1 Min. :2016 Length:466508 Length:466508
## 1st Qu.:116628 1st Qu.:2017 Class :character Class :character
## Median :233256 Median :2018 Mode :character Mode :character
## Mean :233255 Mean :2018
## 3rd Qu.:349882 3rd Qu.:2019
## Max. :466509 Max. :2019
## CEDI Cliente Nombre Tamaño_Cte_Industria
## Length:466508 Length:466508 Length:466508 Length:466508
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Segmento_Det Marca Presentacion Tamaño
## Length:466508 Length:466508 Length:466508 Length:466508
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Retornable_NR Enero Febrero Marzo
## Length:466508 Min. : -19.000 Min. : -11.000 Min. : -32.000
## Class :character 1st Qu.: 0.000 1st Qu.: 0.000 1st Qu.: 0.000
## Mode :character Median : 0.000 Median : 0.000 Median : 0.000
## Mean : 4.951 Mean : 4.829 Mean : 5.729
## 3rd Qu.: 2.000 3rd Qu.: 2.000 3rd Qu.: 3.000
## Max. :5333.000 Max. :4995.000 Max. :5636.000
## Abril Mayo Junio Julio
## Min. : -70.000 Min. :-106.00 Min. :-211.000 Min. : -60.000
## 1st Qu.: 0.000 1st Qu.: 0.00 1st Qu.: 0.000 1st Qu.: 0.000
## Median : 0.000 Median : 0.00 Median : 0.000 Median : 0.000
## Mean : 5.992 Mean : 6.73 Mean : 6.464 Mean : 6.033
## 3rd Qu.: 3.000 3rd Qu.: 3.00 3rd Qu.: 3.000 3rd Qu.: 3.000
## Max. :6164.000 Max. :6759.00 Max. :6033.000 Max. :6735.000
## Agosto Septiembre Octubre Noviembre
## Min. :-211.000 Min. :-527.000 Min. : -38.000 Min. : -25.00
## 1st Qu.: 0.000 1st Qu.: 0.000 1st Qu.: 0.000 1st Qu.: 0.00
## Median : 0.000 Median : 0.000 Median : 0.000 Median : 0.00
## Mean : 6.235 Mean : 3.625 Mean : 3.674 Mean : 3.57
## 3rd Qu.: 3.000 3rd Qu.: 1.000 3rd Qu.: 1.000 3rd Qu.: 1.00
## Max. :6065.000 Max. :6509.000 Max. :6326.000 Max. :5319.00
## Diciembre
## Min. : -28.000
## 1st Qu.: 0.000
## Median : 0.000
## Mean : 3.858
## 3rd Qu.: 0.000
## Max. :6182.000
# Colapsar meses en una columna
df7 <- gather(df1, Mes, Ventas, Enero:Diciembre)
df7
## # A tibble: 5,598,096 × 15
## ID Año Territorio Sub_Territorio CEDI Cliente Nombre
## <dbl> <dbl> <chr> <chr> <chr> <chr> <chr>
## 1 1 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 2 2 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 3 3 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 4 4 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 5 5 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 6 6 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 7 7 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 8 8 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 9 9 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 10 10 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## # ℹ 5,598,086 more rows
## # ℹ 8 more variables: Tamaño_Cte_Industria <chr>, Segmento_Det <chr>,
## # Marca <chr>, Presentacion <chr>, Tamaño <chr>, Retornable_NR <chr>,
## # Mes <chr>, Ventas <dbl>
## Muestra las ventas anuales totales por tamaño...
#Se nota que el tamaño familiar es el más vendido con un total de venta de 15787181:
df7_tarea <- select(df1,c(Tamaño,Enero:Diciembre))
df7_tarea$total = rowSums(df7_tarea[, c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")])
df7_tarea_agrupado = df7_tarea %>%
group_by(Tamaño) %>%
summarize(Total_Grupo = sum(total))
print(df7_tarea_agrupado)
## # A tibble: 2 × 2
## Tamaño Total_Grupo
## <chr> <dbl>
## 1 Familiar 15787181
## 2 Individual 12992631
## Muestra los movimientos por sub territorio en especifico Belenes...
#Se identifico que en el sub territorio de Belenes hubo un total de venta de 9176279
df8 <- df1 %>% filter(Sub_Territorio == "Belenes")
df8$total = rowSums(df8[, c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")])
df8_agrupado = df8 %>%
group_by(Sub_Territorio) %>%
summarize(Total_Grupo = sum(total))
print(df8_agrupado)
## # A tibble: 1 × 2
## Sub_Territorio Total_Grupo
## <chr> <dbl>
## 1 Belenes 9176279
## base de datos ordenada por Retornable o no retonable, por marca y por presentación...
#Se notó que los refrescos retornables tienen mayor frecuencia de venta, ya que ocupan los primeros 5 lugares
df9 <- df1 %>% arrange(Retornable_NR,Marca,Presentacion)
df9$total = rowSums(df9[, c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")])
## Campo calculado con las ventas anuales y muestra las ventas anuales por presentación...
#Se identificó que la presentación de 2.5 Lts. Ret Pet fue la más exitosa con un total de venta de 5829946
df10 <- df1 %>%
mutate(Ventas_Anuales = Enero + Febrero + Marzo + Abril + Mayo + Junio + Julio + Agosto + Septiembre + Octubre + Noviembre + Diciembre)
ventas_anuales_por_presentacion <- df10 %>%
group_by(Presentacion) %>%
summarise(Ventas_Anuales= sum(Ventas_Anuales))
## Media de las ventas del primer semestre agrupado por presentación y tamaño...
#Se identificó que en promedio la presentación de 2.5 Lts. Ret Pet se vendió en promedio 814.1245636
df11 <- df10 %>%
group_by(Presentacion,Tamaño) %>%
summarise(Ventas_Anuales= mean(Ventas_Anuales))
## `summarise()` has grouped output by 'Presentacion'. You can override using the
## `.groups` argument.
#Agregar una columna con el Numero de Mes
meses <- c("Enero"="01","Febrero"="02","Marzo"="03","Abril"="04", "Mayo"= "05", "Junio"="06","Julio"="07", "Agosto"= "08", "Septiembre"="09", "Octubre"="10", "Noviembre"="11","Diciembre"="12")
df7$Numero_de_mes <- meses[df7$Mes]
#Graficar el total de ventas por mes y año
ventas_totales <- df7 %>%
group_by(Año,Numero_de_mes) %>%
summarise(ventas_totales = sum(Ventas)) %>%
arrange(Numero_de_mes)
## `summarise()` has grouped output by 'Año'. You can override using the `.groups`
## argument.
ggplot(ventas_totales, aes(x=Numero_de_mes, y=ventas_totales, group=Año, color=as.factor(Año))) +
geom_line() +
geom_point() +
labs(x="Mes", y="Ventas Totales (Qty)", color= "Año")
Angie Zerón A00834060 Isaac Perez A01252923 Antonio Kuri A01722016
# Se identificó que las marcas con mayor cantidad de ventas fueron Coca Cola, Agua purificada ciel, Coca Cola Light, Sprite
ventas_totales_por_marca <- df7 %>%
group_by(Marca) %>%
summarise(ventas_totales_por_marca = sum(Ventas)) %>%
arrange(ventas_totales_por_marca)
ggplot(ventas_totales_por_marca, aes(x=ventas_totales_por_marca, y=Marca, group=Marca, color=as.factor(Marca))) +
geom_line() +
geom_point() +
labs(x="Ventas Totales (Qty)", y="Marca", color= "Marca")
# Se identificó que el tamaño mas vendido es el familiar por mucho
ventas_totales_por_tamaño <- df7 %>%
group_by(Tamaño) %>%
summarise(ventas_totales_por_tamaño = sum(Ventas)) %>%
arrange(ventas_totales_por_tamaño)
ggplot(ventas_totales_por_tamaño, aes(x=Tamaño, y=ventas_totales_por_tamaño, group=Tamaño, color=as.factor(Tamaño))) +
geom_line() +
geom_point() +
labs(x="Tamaño", y="Ventas Totales (Qty)", color= "Tamaño")
# Se identificó que el orden de mayor a menor venta por territorio es Toluquilla, Belenes, Huentitán
ventas_totales_por_subt <- df7 %>%
group_by(Sub_Territorio) %>%
summarise(ventas_totales_por_subt = sum(Ventas)) %>%
arrange(ventas_totales_por_subt)
ggplot(ventas_totales_por_subt, aes(x=Sub_Territorio, y=ventas_totales_por_subt, group=Sub_Territorio, color=as.factor(Sub_Territorio))) +
geom_line() +
geom_point() +
labs(x="Sub_Territorio", y="Ventas Totales (Qty)", color= "Sub_Territorio")
# Se identificó que el año con mayor cantidad de ventas fue el 2019 seguido por el 2017, 2018 y 2016
ventas_totales_por_año <- df7 %>%
group_by(Año) %>%
summarise(ventas_totales_por_año = sum(Ventas)) %>%
arrange(ventas_totales_por_año)
ggplot(ventas_totales_por_año, aes(x=Año, y=ventas_totales_por_año, group=Año, color=as.factor(Año))) +
geom_bar(stat = "identity", fill = "white") +
theme_minimal() +
labs(x="Año", y="Ventas Totales (Qty)", color= "Año")
# Se identificó que la cantidad de ventas de los productos retornables y no retornables es muy similar, sin embargo se nota una ligera diferencia a favor de lo retornable
ventas_totales_por_retonoret <- df7 %>%
group_by(Retornable_NR) %>%
summarise(ventas_totales_por_retonoret = sum(Ventas)) %>%
arrange(ventas_totales_por_retonoret)
ggplot(ventas_totales_por_retonoret, aes(x=Retornable_NR, y=ventas_totales_por_retonoret, group=Retornable_NR, color=as.factor(Retornable_NR))) +
geom_bar(stat = "identity", fill = "transparent") +
theme_minimal() +
labs(x="Retornable_NR", y="Ventas Totales (Qty)", color= "Retornable_NR")
# Elaborar Regresion Lineal
ventas_4567 <- df7 %>%
filter(Cliente == "4567") %>%
group_by(Año) %>%
summarise(Ventas_Totales = sum(Ventas)) %>%
filter(Ventas_Totales != 0)
# ventas_4567$Secuencia <- 1:nrow(ventas_4567)
ggplot(ventas_4567, aes(x=Año, y=Ventas_Totales)) +
geom_point() +
labs(x="Año", y="Ventas Totales(Qty)", tittle= "Ventas Totales del cliente 4567")
regresion <- lm(Ventas_Totales ~ Año, data=ventas_4567)
summary(regresion)
##
## Call:
## lm(formula = Ventas_Totales ~ Año, data = ventas_4567)
##
## Residuals:
## 1 2 3
## -5092 10185 -5092
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 48918677 17799125 2.748 0.222
## Año -24174 8820 -2.741 0.223
##
## Residual standard error: 12470 on 1 degrees of freedom
## Multiple R-squared: 0.8825, Adjusted R-squared: 0.765
## F-statistic: 7.512 on 1 and 1 DF, p-value: 0.2227
# Ecuacion
# y = 48918677 - 24174 * Año
# R cuadrada ajustada
# 77%
datos <- data.frame(Año=2020:2025)
prediccion <- predict(regresion,datos)
prediccion
## 1 2 3 4 5 6
## 87197.333 63023.333 38849.333 14675.333 -9498.667 -33672.667
ventas_4567$Tipo_de_Dato <- "Datos Reales"
datos$Ventas_Totales <- prediccion
datos$Tipo_de_Dato <- "Prediccion"
datos_combinados <- rbind(ventas_4567,datos)
ggplot(datos_combinados, aes(x=Año, y=Ventas_Totales, color=Tipo_de_Dato))+
geom_point() +
labs(x="Año", y="ventas Totales(Qty)", title= "Pronostico a 5 años de Ventas del Cliente 4567")
#¿A cuánto ascienden las ventas esperadas para el 2020 en la Coca Cola de 500 ml NR Vidrio?
ventas_esperadas <- df7 %>%
filter(Marca == "Coca-Cola" & Presentacion =="500 ml NR Vidrio") %>%
group_by(Año) %>%
summarise(Ventas_Totales = sum(Ventas)) %>%
filter(Ventas_Totales !=0) %>% #para quitar los renglones con 0
filter(Año !=2016)
ggplot(ventas_esperadas, aes(x=Año, y=Ventas_Totales)) +
geom_point() +
labs(x="Año", y="Ventas Totales (Qty)", title = "Ventas Anuales de Coca Cola")
regresion1 <- lm(Ventas_Totales ~ Año, data=ventas_esperadas)
summary(regresion1)
##
## Call:
## lm(formula = Ventas_Totales ~ Año, data = ventas_esperadas)
##
## Residuals:
## 1 2 3
## 1732 -3465 1732
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -5303404 6054988 -0.876 0.542
## Año 2833 3000 0.944 0.518
##
## Residual standard error: 4243 on 1 degrees of freedom
## Multiple R-squared: 0.4713, Adjusted R-squared: -0.05738
## F-statistic: 0.8915 on 1 and 1 DF, p-value: 0.5183
#Ecuacion
#y= -5303404 + 2833
#R cuadrada ajustada
# -0.05738
datos <- data.frame(Año=2020:2025)
prediccion <-predict(regresion1,datos)
prediccion
## 1 2 3 4 5 6
## 419255.7 422088.7 424921.7 427754.7 430587.7 433420.7
ventas_esperadas$Tipo_de_Dato <- "Datos Reales"
datos$Ventas_Totales <- prediccion
datos$Tipo_de_Dato <- "Prediccion"
datos_combinados <- rbind(ventas_esperadas, datos)
ggplot(datos_combinados, aes(x=Año, y=Ventas_Totales, color=Tipo_de_Dato)) +
geom_point() +
labs(x="Año", y="Ventas Totales (Qty)", title = "Pronóstico de ventas esperadas para el 2020", subtitle = "Coca Cola de 500 ml NR Vidrio")
Para el año 2020, se espera que las ventas de COCA COLA de 500 ml NR
Vidrio tenddra ventas esperadas de 419,000
#Ventas totales del cliente 6626
ventas_6626 <- df7 %>%
filter(Cliente == "6626") %>%
group_by(Año) %>%
summarise(Ventas_totales = sum(Ventas)) %>%
filter(Ventas_totales !=0) #para quitar los renglones con 0
#ventas_mayores$Secuencia <- 1:nrow(ventas_mayores) # es una secuencia por si lo ocupamos en algo mas
#cuando hago regreson ocupo que el eje x sea un rumero, asi que se cambia a una secuencia de meses para que no se confunda al graficarlo
ggplot(ventas_6626, aes(x=Año, y=Ventas_totales)) +
geom_point() +
labs(x="Año", y="Ventas Totales (Qty)", title = "Ventas totales del cliente 0948")
regresion <- lm(Ventas_totales ~ Año, data=ventas_6626)
summary(regresion)
##
## Call:
## lm(formula = Ventas_totales ~ Año, data = ventas_6626)
##
## Residuals:
## 1 2 3
## -2811 5622 -2811
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 55208195 9825229 5.619 0.112
## Año -27316 4869 -5.610 0.112
##
## Residual standard error: 6886 on 1 degrees of freedom
## Multiple R-squared: 0.9692, Adjusted R-squared: 0.9384
## F-statistic: 31.48 on 1 and 1 DF, p-value: 0.1123
#Ecuacion
#y= 55208195 + ( -27316 )
# este es el intercepto este es la correlacion (en este caso negativa)
#R cuadrada ajustada
# 0.9384
datos <- data.frame(Año=2020:2025)
prediccion <-predict(regresion,datos)
prediccion
## 1 2 3 4 5 6
## 29875 2559 -24757 -52073 -79389 -106705
ventas_6626$Tipo_de_Dato <- "Datos Reales"
datos$Ventas_totales <- prediccion
datos$Tipo_de_Dato <- "Prediccion"
datos_combinados <- rbind(ventas_6626, datos)
ggplot(datos_combinados, aes(x=Año, y=Ventas_totales, color=Tipo_de_Dato)) +
geom_point() +
labs(x="Año", y="Ventas Totales (Qty)", title = "Pronóstico a 5 años de ventas del cliente 6626")
Las ventas del cliente 6626 tienen tendencia a caer a los proximos
años
#Ventas totales de Guadalajara
ventas_gdl <- df7 %>%
group_by(Año) %>%
summarise(Ventas_totales = sum(Ventas)) %>%
filter(Ventas_totales !=0) #para quitar los renglones con 0
#ventas_mayores$Secuencia <- 1:nrow(ventas_mayores) # es una secuencia por si lo ocupamos en algo mas
#cuando hago regreson ocupo que el eje x sea un rumero, asi que se cambia a una secuencia de meses para que no se confunda al graficarlo
ggplot(ventas_gdl, aes(x=Año, y=Ventas_totales)) +
geom_point() +
labs(x="Año", y="Ventas Totales (Qty)", title = "Ventas totales del cliente 0948")
regresion <- lm(Ventas_totales ~ Año, data=ventas_gdl)
summary(regresion)
##
## Call:
## lm(formula = Ventas_totales ~ Año, data = ventas_gdl)
##
## Residuals:
## 1 2 3 4
## 98787 151376 -599113 348950
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.398e+09 4.571e+08 -3.058 0.0924 .
## Año 6.964e+05 2.266e+05 3.073 0.0916 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 506600 on 2 degrees of freedom
## Multiple R-squared: 0.8253, Adjusted R-squared: 0.7379
## F-statistic: 9.446 on 1 and 2 DF, p-value: 0.09156
#Ecuacion
#y= -1.398e+09 + (6.964e+05)
#R cuadrada ajustada
# 0.7379
datos <- data.frame(Año=2020:2025)
prediccion <-predict(regresion,datos)
prediccion
## 1 2 3 4 5 6
## 8935915 9632299 10328684 11025068 11721453 12417838
ventas_gdl$Tipo_de_Dato <- "Datos Reales"
datos$Ventas_totales <- prediccion
datos$Tipo_de_Dato <- "Prediccion"
datos_combinados <- rbind(ventas_gdl, datos)
ggplot(datos_combinados, aes(x=Año, y=Ventas_totales, color=Tipo_de_Dato)) +
geom_point() +
labs(x="Año", y="Ventas Totales (Qty)", title = "Pronóstico a 5 años de ventas en GDL")
Se pronostica que las ventas van a crecer en el territorio de
Guadalajara en los proximos ańos
#Ventas esperadas en el sub territorio de BELENES del producto AGUA PURIFICADA
ventas_segmento <- df7 %>%
filter(Sub_Territorio == "Belenes" & Segmento_Det =="Agua Purificada") %>%
group_by(Año) %>%
summarise(Ventas_Totales = sum(Ventas)) %>%
filter(Ventas_Totales !=0) %>% #para quitar los renglones con 0
filter(Año !=2016)
ggplot(ventas_segmento, aes(x=Año, y=Ventas_Totales)) +
geom_point() +
labs(x="Año", y="Ventas Totales (Qty)", title = "Ventas Anuales de Coca Cola")
regresion1 <- lm(Ventas_Totales ~ Año, data=ventas_segmento)
summary(regresion1)
##
## Call:
## lm(formula = Ventas_Totales ~ Año, data = ventas_segmento)
##
## Residuals:
## 1 2 3
## 15616 -31232 15616
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -156230141 54582274 -2.862 0.214
## Año 77493 27048 2.865 0.214
##
## Residual standard error: 38250 on 1 degrees of freedom
## Multiple R-squared: 0.8914, Adjusted R-squared: 0.7828
## F-statistic: 8.209 on 1 and 1 DF, p-value: 0.2138
#Ecuacion
#y= -5303404 + 2833
#R cuadrada ajustada
# -0.05738
datos <- data.frame(Año=2020:2025)
prediccion <-predict(regresion1,datos)
prediccion
## 1 2 3 4 5 6
## 305719 383212 460705 538198 615691 693184
ventas_segmento$Tipo_de_Dato <- "Datos Reales"
datos$Ventas_Totales <- prediccion
datos$Tipo_de_Dato <- "Prediccion"
datos_combinados <- rbind(ventas_segmento, datos)
ggplot(datos_combinados, aes(x=Año, y=Ventas_Totales, color=Tipo_de_Dato)) +
geom_point() +
labs(x="Año", y="Ventas Totales (Qty)", title = "Pronóstico de ventas esperadas para Belenes", subtitle = "En Agua Purificada")
Las ventas en el sub territorio Belenes en tanto Agua purificada va a
tener una tendencia de crecimiento para los próximos 4 años.
#Ventas en el sub segmento de toluquilla para las bebidas de fruta
ventas_segmento1 <- df7 %>%
filter(Sub_Territorio == "Toluquilla" & Segmento_Det =="Bebidas de Fruta") %>%
group_by(Año) %>%
summarise(Ventas_Totales = sum(Ventas)) %>%
filter(Ventas_Totales !=0) %>% #para quitar los renglones con 0
filter(Año !=2016)
ggplot(ventas_segmento1, aes(x=Año, y=Ventas_Totales)) +
geom_point() +
labs(x="Año", y="Ventas Totales (Qty)", title = "Ventas Anuales de Coca Cola")
regresion1 <- lm(Ventas_Totales ~ Año, data=ventas_segmento1)
summary(regresion1)
##
## Call:
## lm(formula = Ventas_Totales ~ Año, data = ventas_segmento1)
##
## Residuals:
## 1 2 3
## -3357 6715 -3357
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 11498348 11734816 0.980 0.506
## Año -5676 5815 -0.976 0.508
##
## Residual standard error: 8224 on 1 degrees of freedom
## Multiple R-squared: 0.4879, Adjusted R-squared: -0.0242
## F-statistic: 0.9527 on 1 and 1 DF, p-value: 0.5077
#Ecuacion
#y= -5303404 + 2833
#R cuadrada ajustada
# -0.05738
datos <- data.frame(Año=2020:2025)
prediccion <-predict(regresion1,datos)
prediccion
## 1 2 3 4 5 6
## 32828.333 27152.333 21476.333 15800.333 10124.333 4448.333
ventas_segmento1$Tipo_de_Dato <- "Datos Reales"
datos$Ventas_Totales <- prediccion
datos$Tipo_de_Dato <- "Prediccion"
datos_combinados <- rbind(ventas_segmento1, datos)
ggplot(datos_combinados, aes(x=Año, y=Ventas_Totales, color=Tipo_de_Dato)) +
geom_point() +
labs(x="Año", y="Ventas Totales (Qty)", title = "Pronóstico de ventas esperadas para Toluquilla", subtitle = "En Bebidas de Fruta")
Según el pronóstico, se espera que para el sub territorio de Toluquilla
en cuanto a las bebidas de fruta, las ventas decrezcan.
top_10_clientes <- df7 %>%
group_by(Cliente) %>%
summarise(Ventas_Totales = sum(Ventas)) %>%
arrange(desc(Ventas_Totales)) %>%
top_n(10, Ventas_Totales)
top_10_clientes
## # A tibble: 10 × 2
## Cliente Ventas_Totales
## <chr> <dbl>
## 1 4567 406636
## 2 6626 253521
## 3 5420 238048
## 4 9745 190233
## 5 2539 181847
## 6 6190 172311
## 7 1859 159890
## 8 6114 158145
## 9 8682 155956
## 10 8283 145717
ventas_mensuales_4567 <- df7 %>%
filter(Cliente == "4567") %>%
group_by(Año, Numero_de_mes) %>%
summarise(Ventas_Totales = sum(Ventas)) %>%
filter(Ventas_Totales != 0)
# COnfirma que los datos que queremos modelar esten ordenados cronologicamente.
# Funcion de serie de tiempo MENSUAL, que inicia Enero 2017
ts <- ts(data=ventas_mensuales_4567$Ventas_Totales, start = c(2017,1), frequency = 12)
# Funcion de serie de tiempo MENSUAL, que inicia Abril 2017
# ts <- ts(data=ventas_mensuales_4567$Ventas_Totales, start = c(2017,4), frecuency = 12)
# Funcion de serie de tiempo TRIMESTRAL, que inicia Enero 2017
# ts <- ts(data=ventas_mensuales_4567$Ventas_Totales, start = c(2017,1), frecuency = 4)
# Funcion de serie de tiempo TRIMESTRAL, que inicia Octubre 2017 (Q4)
# ts <- ts(data=ventas_mensuales_4567$Ventas_Totales, start = c(2017,1), frecuency = 4)
# FUncion de serie de tiempo ANUAL, que inicia en 2017
# ts <- ts(data=ventas_mensuales_4567$Ventas_Totales, start = 2017 frecuency = 1)
# Crear MOdelo ARIMA
# Modelo autoregresivo integrado de promedio movil.
arima <- auto.arima(ts, D=1) # D=1 por la temporalidad
arima
## Series: ts
## ARIMA(0,0,0)(0,1,0)[12]
##
## sigma^2 = 10383172: log likelihood = -189.94
## AIC=381.87 AICc=382.09 BIC=382.87
summary(arima)
## Series: ts
## ARIMA(0,0,0)(0,1,0)[12]
##
## sigma^2 = 10383172: log likelihood = -189.94
## AIC=381.87 AICc=382.09 BIC=382.87
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set -36.98041 2547.446 1572.02 -1.811657 13.08459 0.6269271 0.2519497
# Generar el pronostico dw ventas
pronostico <- forecast(arima, level=95, h=36)
pronostico
## Point Forecast Lo 95 Hi 95
## Sep 2019 12086 5770.4219 18401.58
## Oct 2019 11427 5111.4219 17742.58
## Nov 2019 11270 4954.4219 17585.58
## Dec 2019 12227 5911.4219 18542.58
## Jan 2020 9430 3114.4219 15745.58
## Feb 2020 11312 4996.4219 17627.58
## Mar 2020 12515 6199.4219 18830.58
## Apr 2020 13334 7018.4219 19649.58
## May 2020 16286 9970.4219 22601.58
## Jun 2020 15347 9031.4219 21662.58
## Jul 2020 14005 7689.4219 20320.58
## Aug 2020 14050 7734.4219 20365.58
## Sep 2020 12086 3154.4238 21017.58
## Oct 2020 11427 2495.4238 20358.58
## Nov 2020 11270 2338.4238 20201.58
## Dec 2020 12227 3295.4238 21158.58
## Jan 2021 9430 498.4238 18361.58
## Feb 2021 11312 2380.4238 20243.58
## Mar 2021 12515 3583.4238 21446.58
## Apr 2021 13334 4402.4238 22265.58
## May 2021 16286 7354.4238 25217.58
## Jun 2021 15347 6415.4238 24278.58
## Jul 2021 14005 5073.4238 22936.58
## Aug 2021 14050 5118.4238 22981.58
## Sep 2021 12086 1147.0979 23024.90
## Oct 2021 11427 488.0979 22365.90
## Nov 2021 11270 331.0979 22208.90
## Dec 2021 12227 1288.0979 23165.90
## Jan 2022 9430 -1508.9021 20368.90
## Feb 2022 11312 373.0979 22250.90
## Mar 2022 12515 1576.0979 23453.90
## Apr 2022 13334 2395.0979 24272.90
## May 2022 16286 5347.0979 27224.90
## Jun 2022 15347 4408.0979 26285.90
## Jul 2022 14005 3066.0979 24943.90
## Aug 2022 14050 3111.0979 24988.90
plot(pronostico, main="Ventas Mensuales y Pronostico a 3 Años del cliente 4567", xlab="Año", ylab="Ventas (Qty)")
ventas_totales_seg <- df7 %>%
filter(Segmento_Det == "Agua Purificada" | Segmento_Det == "Isnotonicos Regular" | Segmento_Det == "Colas Regular" ) %>%
filter(Año == 2018) %>%
group_by(Segmento_Det, Numero_de_mes) %>%
summarise(Ventas_Totales = sum(Ventas)) %>%
arrange(Numero_de_mes)
## `summarise()` has grouped output by 'Segmento_Det'. You can override using the
## `.groups` argument.
ggplot(ventas_totales_seg, aes(x=Numero_de_mes, y=Ventas_Totales,group=Segmento_Det, color=as.factor(Segmento_Det))) +
geom_line() +
geom_point() +
labs(x="Mes", y="Ventas Totales(Qty)", title= "Ventas Totales por Segmento", color = "Segmento")
** Las ventas aumentaron en 2019, pero cada segmento se comporto
diferente. El incremento de ventas se puede lograr gracias a mejors
campañas de mercadotecnia y lanzamiento de nuevos productos. En 2018 la
venta de Coca-Cola entre Febrero y Dicie,bre aumento en 100,000
unidades, mientras que las aguas istonicas no tuvieron cambios.**
ventas_totales_tam_cliente <- df7 %>%
filter(Año == 2019) %>%
group_by(Tamaño_Cte_Industria, Numero_de_mes) %>%
summarise(Ventas_Totales = sum(Ventas)) %>%
arrange %>%
filter(Ventas_Totales != 0)
## `summarise()` has grouped output by 'Tamaño_Cte_Industria'. You can override
## using the `.groups` argument.
ggplot(ventas_totales_tam_cliente, aes(x=Numero_de_mes, y=Ventas_Totales,group= Tamaño_Cte_Industria, color=as.factor(Tamaño_Cte_Industria))) +
geom_line() +
geom_point() +
labs(x="Mes", y="Ventas Totales(Qty)", title= "Ventas Totales por Segmento", color = "Segmento")
** El incremento de ventas es similar independientemente de los tamaños
de los clientes. como todos los negocios están abiertos los mismos días,
y están ubicados en la misma ciudad (Guadalajara), los factores externos
de las ventas efectan casi igual a todos. El mes de mayo de 2019 fue el
de mayor ventas en todos los tamaños de cliente, I el primer bimestre
fue el más bajo también para todos los tamaños de cliente.**
ventas_totales_marca <- df7 %>%
filter(Año == 2019) %>%
filter(Marca == c("Coca Cola", "Valle Frut", "Ciel Agua Purificada", "Coca-Cola Light")) %>%
group_by(Marca, Numero_de_mes) %>%
summarise(Ventas_Totales = sum(Ventas)) %>%
arrange %>%
filter(Ventas_Totales != 0)
## `summarise()` has grouped output by 'Marca'. You can override using the
## `.groups` argument.
ggplot(ventas_totales_marca, aes(x=Numero_de_mes, y=Ventas_Totales,group= Marca, color=as.factor(Marca))) +
geom_line() +
geom_point() +
labs(x="Mes", y="Ventas Totales(Qty)", title= "Ventas totales por Marca", color = "Marca")
** El comportamiento de ventas es similar entre las marcas a través de
los meses, pero hay marcas que venden mucho más que otras. Los meses de
más ventas de bebidas son los meses en que la temperatura es mayor, y
las marcas más conocidas son las que tiene en mente el consumidor. El
mes de mayo 2019 es para todas las marcas el de mayores ventas, pero la
marca coca-cola es la que vende más quetodas.**
ventas_totales_envase <- df7 %>%
filter(Retornable_NR=="Retornable") %>%
filter(Año == c(2017,2018,2019)) %>%
group_by(Año, Numero_de_mes) %>%
summarise(Ventas_Totales = sum(Ventas)) %>%
arrange(Numero_de_mes) %>%
filter(Ventas_Totales != 0)
## `summarise()` has grouped output by 'Año'. You can override using the `.groups`
## argument.
ggplot(ventas_totales_envase, aes(x=Numero_de_mes, y=Ventas_Totales,group=Año, color=as.factor(Año)))+
geom_line() +
geom_point() +
labs(x="Mes", y="Ventas Totales(Qty)", title= "Ventas Totales de Envases Retornables", color = "Año")
** La venta de productos en envase retornable aumentó en los últimos dos
años. Las campañas de conciencia ambiental han vuelto populares las
opciones menos dañinas al ecosistema. De 2017 a 2018 hubo un ligero
incremento en las ventas de envase retornable, y entre 2018 y 2019 el
aumento fue muy notorio.**
** Nota: Hay otros factores a considerar como que en 2019 hay más tiendas con el proyecto siglo XXI, o que las tiendas en general venden más productos (tanto retornables como no retornables).**
ventas_totales_seg <- df7 %>%
filter(Segmento_Det == "Agua Purificada" | Segmento_Det == "Isnotonicos Regular" | Segmento_Det == "Colas Regular" ) %>%
filter(Año == 2018) %>%
group_by(Segmento_Det, Numero_de_mes) %>%
summarise(Ventas_Totales = sum(Ventas)) %>%
arrange(Numero_de_mes)
## `summarise()` has grouped output by 'Segmento_Det'. You can override using the
## `.groups` argument.
ggplot(ventas_totales_seg, aes(x=Numero_de_mes, y=Ventas_Totales,group=Segmento_Det, color=as.factor(Segmento_Det))) +
geom_line() +
geom_point() +
labs(x="Mes", y="Ventas Totales(Qty)", title= "Ventas Totales por Segmento", color = "Segmento")
** Las ventas de Agua Purificada no ha aumentado en relación a Refrescos
o Bebidas Isotónicas. La persepción que el agua no tiene valor agregado
en la preparación y el azúcar en la receta hacen de los refrescos la
opción preferida de los consumidores mexicanos. En 2018 las ventas
totales de Agua Purificada no superaron las 50,000 unidades, mientras
que la coca-cola vendió en su mes más alto 450,000 (8 veces más que el
agua).**
ventas_totales_ayr <- df7 %>%
filter(Segmento_Det == "Agua Purificada" | Segmento_Det == "Colas Regular" ) %>%
group_by(Segmento_Det, Año) %>%
summarise(Ventas_Totales = sum(Ventas))
## `summarise()` has grouped output by 'Segmento_Det'. You can override using the
## `.groups` argument.
ggplot(ventas_totales_ayr, aes(x=Año, y=Ventas_Totales,group=Segmento_Det, color=as.factor(Segmento_Det))) +
geom_line() +
geom_point() +
labs(x="Año", y="Ventas Totales(Qty)", title= "Ventas Totales por Segmento", color = "Segmento")
** La venta de agua y refrescos se incrementa en los mismos meses, y a
través de los años, pero no se puede concluir que un incremento cause el
otro. Los meses calurosos y el crecimiento de la población hace que las
ventas se incrementen en las bebidas, sean agua o refresco. En la
gráfica obtenida se observa un incremento año con año en la venta de
agua ytambién de refrescos.**
ventas_coca_vidrio <- df7 %>%
filter(Marca == "Coca-Cola" & Presentacion == "500 ml NR Vidrio") %>%
group_by(Año, Numero_de_mes) %>%
summarise(Ventas_Totales = sum(Ventas)) %>%
filter(Ventas_Totales != 0)
## `summarise()` has grouped output by 'Año'. You can override using the `.groups`
## argument.
# COnfirma que los datos que queremos modelar esten ordenados cronologicamente.
# Funcion de serie de tiempo MENSUAL, que inicia Enero 2017
ts <- ts(data=ventas_coca_vidrio$Ventas_Totales, start = c(2017,1), frequency = 12)
# Crear MOdelo ARIMA
# Modelo autoregresivo integrado de promedio movil.
arima <- auto.arima(ts, D=1) # D=1 por la temporalidad
arima
## Series: ts
## ARIMA(1,0,0)(0,1,0)[12] with drift
##
## Coefficients:
## ar1 drift
## 0.7092 719.6837
## s.e. 0.1328 299.8533
##
## sigma^2 = 41602728: log likelihood = -325.42
## AIC=656.84 AICc=657.7 BIC=661.24
summary(arima)
## Series: ts
## ARIMA(1,0,0)(0,1,0)[12] with drift
##
## Coefficients:
## ar1 drift
## 0.7092 719.6837
## s.e. 0.1328 299.8533
##
## sigma^2 = 41602728: log likelihood = -325.42
## AIC=656.84 AICc=657.7 BIC=661.24
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 48.85447 5325.927 3245.824 -1.37305 8.085494 0.3668297 -0.1551829
# Generar el pronostico dw ventas
pronostico <- forecast(arima, level=95, h=16)
pronostico
## Point Forecast Lo 95 Hi 95
## Sep 2020 57009.75 44367.95 69651.56
## Oct 2020 47611.80 32113.20 63110.40
## Nov 2020 43891.36 27138.87 60643.85
## Dec 2020 49988.01 32639.01 67337.02
## Jan 2021 52649.58 35008.14 70291.03
## Feb 2021 59116.44 41329.71 76903.18
## Mar 2021 63214.35 45354.98 81073.72
## Apr 2021 45929.53 28033.74 63825.33
## May 2021 77893.53 59979.44 95807.63
## Jun 2021 66916.74 48993.45 84840.03
## Jul 2021 65103.76 47175.85 83031.68
## Aug 2021 66475.17 48544.93 84405.41
## Sep 2021 65845.94 43788.54 87903.34
## Oct 2021 56389.84 32524.67 80255.02
## Nov 2021 52628.16 27903.54 77352.78
## Dec 2021 58695.56 33549.72 83841.40
plot(pronostico, main="Ventas Mensuales y Pronostico para 2020 de Coca-Cola 500 ml NR Vidrio", xlab="Año", ylab="Ventas (Qty)")
Ascienden a entre 45mil y 60mil