Analizar la información de las ventas de 2016 a 2019 de productos de la familia Coca Cola en algunos de los establecimientos de la Zona Metropolitana de Guadalajara en los que se implementó el Proyecto Siglo XXI de Arca Continental.
# file.choose()
df <- read.csv("C:\\Users\\raulc\\OneDrive\\Escritorio\\arca.csv")summary(df)## ID Año Territorio Sub.Territorio
## Min. : 1 Min. :2016 Length:466509 Length:466509
## 1st Qu.:116628 1st Qu.:2017 Class :character Class :character
## Median :233255 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:466509 Length:466509 Length:466509 Length:466509
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Segmento.Det Marca Presentacion Tamaño
## Length:466509 Length:466509 Length:466509 Length:466509
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Retornable_NR Enero Febrero Marzo
## Length:466509 Length:466509 Length:466509 Length:466509
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Abril Mayo Junio Julio
## Length:466509 Length:466509 Length:466509 Length:466509
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Agosto Septiembre Octubre Noviembre
## Length:466509 Length:466509 Length:466509 Length:466509
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Diciembre
## Length:466509
## Class :character
## Mode :character
##
##
##
#install.packages("tidyverse")
library(tidyverse)## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.3 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
str(df)## 'data.frame': 466509 obs. of 25 variables:
## $ ID : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Año : int 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 ...
## $ Territorio : chr "Guadalajara" "Guadalajara" "Guadalajara" "Guadalajara" ...
## $ Sub.Territorio : chr "Belenes" "Belenes" "Belenes" "Belenes" ...
## $ CEDI : chr "Suc. Belenes" "Suc. Belenes" "Suc. Belenes" "Suc. Belenes" ...
## $ Cliente : chr "77737" "77737" "77737" "77737" ...
## $ Nombre : chr "ABARR" "ABARR" "ABARR" "ABARR" ...
## $ Tamaño.Cte.Industria: chr "Extra Grande" "Extra Grande" "Extra Grande" "Extra Grande" ...
## $ Segmento.Det : chr "Agua Mineral" "Agua Purificada" "Agua Purificada" "Agua Saborizada" ...
## $ Marca : chr "Topo Chico A.M." "Ciel Agua Purificada" "Ciel Agua Purificada" "Ciel Exprim" ...
## $ Presentacion : chr "600 ml NR" "1 Ltro. N.R." "1.5 Lts. NR" "600 ml NR" ...
## $ Tamaño : chr "Individual" "Individual" "Individual" "Individual" ...
## $ Retornable_NR : chr "No Retornable" "No Retornable" "No Retornable" "No Retornable" ...
## $ Enero : chr "" "" "" "" ...
## $ Febrero : chr "" "2" "" "" ...
## $ Marzo : chr "" "8" "3" "" ...
## $ Abril : chr "" "4" "6" "" ...
## $ Mayo : chr "" "4" "3" "" ...
## $ Junio : chr "" "2" "3" "" ...
## $ Julio : chr "" "2" "3" "" ...
## $ Agosto : chr "" "2" "3" "" ...
## $ Septiembre : chr "" "2" "3" "" ...
## $ Octubre : chr "" "2" "3" "" ...
## $ Noviembre : chr "" "4" "3" "" ...
## $ Diciembre : chr "1" "2" "3" "1" ...
# install.packages("dplyr")
library(dplyr)
count(df, Territorio, sort = TRUE)## Territorio n
## 1 Guadalajara 466508
## 2 Territorio 1
# count(df, Sub.Territorio, sort = TRUE)
# count(df, CEDI, sort = TRUE)
# count(df, Cliente, sort = TRUE)
# count(df, Nombre, sort = TRUE)
# count(df, Tamaño.Cte.Industria, sort = TRUE)
# count(df, Segmento.Det, sort = TRUE)
# count(df, Marca, sort = TRUE)
# count(df, Presentacion, sort = TRUE)
# count(df, Tamaño, sort = TRUE)
# count(df, Retornable_NR, sort = TRUE)Observaciones:
1. Eliminar renglón 184065 que tiene títulos en lugar de datos.
2. Cambiar formato (de Enero a Diciembre) de caracter a entero.
df <- df[-184065,]
df$Enero <- as.integer(df$Enero)## Warning: NAs introducidos por coerción
df$Febrero <- as.integer(df$Febrero)## Warning: NAs introducidos por coerción
df$Marzo <- as.integer(df$Marzo)## Warning: NAs introducidos por coerción
df$Abril <- as.integer(df$Abril)## Warning: NAs introducidos por coerción
df$Mayo <- as.integer(df$Mayo)## Warning: NAs introducidos por coerción
df$Junio <- as.integer(df$Junio)## Warning: NAs introducidos por coerción
df$Julio <- as.integer(df$Julio)## Warning: NAs introducidos por coerción
df$Agosto <- as.integer(df$Agosto)## Warning: NAs introducidos por coerción
df$Septiembre <- as.integer(df$Septiembre)## Warning: NAs introducidos por coerción
df$Octubre <- as.integer(df$Octubre)## Warning: NAs introducidos por coerción
df$Noviembre <- as.integer(df$Noviembre)## Warning: NAs introducidos por coerción
df$Diciembre <- as.integer(df$Diciembre)## Warning: NAs introducidos por coerción
df$Año <- as.character(df$Año)
summary(df)## ID Año Territorio Sub.Territorio
## Min. : 1 Length:466508 Length:466508 Length:466508
## 1st Qu.:116628 Class :character Class :character Class :character
## Median :233256 Mode :character Mode :character Mode :character
## Mean :233255
## 3rd Qu.:349882
## Max. :466509
##
## 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.00 Min. :-11.00 Min. :-32.00
## Class :character 1st Qu.: 1.00 1st Qu.: 1.00 1st Qu.: 1.00
## Mode :character Median : 2.00 Median : 2.00 Median : 3.00
## Mean : 9.39 Mean : 9.09 Mean : 10.54
## 3rd Qu.: 6.00 3rd Qu.: 6.00 3rd Qu.: 6.00
## Max. :999.00 Max. :986.00 Max. :986.00
## NA's :233551 NA's :231285 NA's :227506
## Abril Mayo Junio Julio
## Min. :-70.00 Min. :-106.00 Min. :-211.00 Min. :-60.00
## 1st Qu.: 1.00 1st Qu.: 1.00 1st Qu.: 1.00 1st Qu.: 1.00
## Median : 3.00 Median : 3.00 Median : 3.00 Median : 2.00
## Mean : 10.62 Mean : 11.44 Mean : 10.98 Mean : 10.72
## 3rd Qu.: 6.00 3rd Qu.: 7.00 3rd Qu.: 6.00 3rd Qu.: 6.00
## Max. :993.00 Max. : 991.00 Max. : 998.00 Max. :993.00
## NA's :224185 NA's :217072 NA's :215907 NA's :223537
## Agosto Septiembre Octubre Noviembre
## Min. :-211.00 Min. :-527 Min. :-38.0 Min. :-25.0
## 1st Qu.: 1.00 1st Qu.: 1 1st Qu.: 1.0 1st Qu.: 1.0
## Median : 3.00 Median : 3 Median : 3.0 Median : 3.0
## Mean : 10.95 Mean : 12 Mean : 12.1 Mean : 11.8
## 3rd Qu.: 6.00 3rd Qu.: 7 3rd Qu.: 7.0 3rd Qu.: 6.0
## Max. : 999.00 Max. : 993 Max. :998.0 Max. :991.0
## NA's :220366 NA's :337401 NA's :338482 NA's :338545
## Diciembre
## Min. :-28
## 1st Qu.: 1
## Median : 3
## Mean : 13
## 3rd Qu.: 7
## Max. :997
## NA's :341954
Observaciones:
3. Tenemos NA en las columnas de los meses.
4. Tenemos cantidades negativas.
5. No tenemos ventas por año.
6. Cantidades máximas muy elevadas.
# ¿Cuántos NA tengo en la base de datos?
sum(is.na(df))## [1] 3149791
# ¿Cuántos NA 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 233551 231285
## Marzo Abril Mayo
## 227506 224185 217072
## Junio Julio Agosto
## 215907 223537 220366
## Septiembre Octubre Noviembre
## 337401 338482 338545
## Diciembre
## 341954
# Reemplazar NA con CEROS
df[is.na(df)]<-0
# Las cantidades negativas se considerarán como pérdidas.
# Agregar columna de Ventas
df$Ventas <- df$Enero + df$Febrero + df$Marzo + df$Abril + df$Mayo + df$Junio + df$Julio + df$Agosto + df$Septiembre + df$Octubre + df$Noviembre + df$Diciembre
# Gráfica de Caja y Bigotes
boxplot(df$Enero, horizontal=TRUE)boxplot(df$Agosto, horizontal=TRUE)summary(df)## ID Año Territorio Sub.Territorio
## Min. : 1 Length:466508 Length:466508 Length:466508
## 1st Qu.:116628 Class :character Class :character Class :character
## Median :233256 Mode :character Mode :character Mode :character
## Mean :233255
## 3rd Qu.:349882
## Max. :466509
## 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.00 Min. :-11.000 Min. :-32.000
## Class :character 1st Qu.: 0.00 1st Qu.: 0.000 1st Qu.: 0.000
## Mode :character Median : 0.00 Median : 0.000 Median : 0.000
## Mean : 4.69 Mean : 4.581 Mean : 5.401
## 3rd Qu.: 2.00 3rd Qu.: 2.000 3rd Qu.: 3.000
## Max. :999.00 Max. :986.000 Max. :986.000
## Abril Mayo Junio Julio
## Min. :-70.000 Min. :-106.000 Min. :-211.0 Min. :-60.000
## 1st Qu.: 0.000 1st Qu.: 0.000 1st Qu.: 0.0 1st Qu.: 0.000
## Median : 0.000 Median : 0.000 Median : 0.0 Median : 0.000
## Mean : 5.519 Mean : 6.117 Mean : 5.9 Mean : 5.583
## 3rd Qu.: 3.000 3rd Qu.: 3.000 3rd Qu.: 3.0 3rd Qu.: 3.000
## Max. :993.000 Max. : 991.000 Max. : 998.0 Max. :993.000
## Agosto Septiembre Octubre Noviembre
## Min. :-211.000 Min. :-527.000 Min. :-38.000 Min. :-25.000
## 1st Qu.: 0.000 1st Qu.: 0.000 1st Qu.: 0.000 1st Qu.: 0.000
## Median : 0.000 Median : 0.000 Median : 0.000 Median : 0.000
## Mean : 5.777 Mean : 3.311 Mean : 3.327 Mean : 3.248
## 3rd Qu.: 3.000 3rd Qu.: 1.000 3rd Qu.: 1.000 3rd Qu.: 1.000
## Max. : 999.000 Max. : 993.000 Max. :998.000 Max. :991.000
## Diciembre Ventas
## Min. :-28.000 Min. :-527.00
## 1st Qu.: 0.000 1st Qu.: 2.00
## Median : 0.000 Median : 7.00
## Mean : 3.477 Mean : 56.93
## 3rd Qu.: 0.000 3rd Qu.: 26.00
## Max. :997.000 Max. :9517.00
¿Puede observarse un crecimiento en las ventas de algunos de los
segmentos de productos de la familia Coca Cola en las tiendas en las que
se implementó el Proyecto Siglo XXI de Arca Continental?
Respuesta: Se observa un incremento general de las ventas por
año.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x=Año, y=Ventas)) +
geom_bar(stat="identity") +
labs(
title= "Ventas por Año",
subtitle= "Caso Arca Continental"
)¿El incremento en las ventas es similar entre los diferentes tamaños
de clientes?
Respuesta: El incremento de ventas se debió a la incorporación
de tamaño de cliente Grande y Pequeño. Extra Grande bajó sus ventas el
último año, y Micro las subió.
ggplot(df, aes(x=Año, y=Ventas, colour=Tamaño.Cte.Industria)) +
geom_bar(stat="identity") +
labs(
title= "Ventas por Año",
subtitle= "Caso Arca Continental"
)df2 <- df %>% filter(Tamaño.Cte.Industria=="Extra Grande")
ggplot(df2, aes(x=Año, y=Ventas, colour=Tamaño.Cte.Industria)) +
geom_bar(stat="identity") +
labs(
title= "Ventas por Año",
subtitle= "Caso Arca Continental"
)df3 <- df %>% filter(Tamaño.Cte.Industria=="Grande")
ggplot(df3, aes(x=Año, y=Ventas, colour=Tamaño.Cte.Industria)) +
geom_bar(stat="identity") +
labs(
title= "Ventas por Año",
subtitle= "Caso Arca Continental"
)df4 <- df %>% filter(Tamaño.Cte.Industria=="Micro")
ggplot(df4, aes(x=Año, y=Ventas, colour=Tamaño.Cte.Industria)) +
geom_bar(stat="identity") +
labs(
title= "Ventas por Año",
subtitle= "Caso Arca Continental"
)df5 <- df %>% filter(Tamaño.Cte.Industria=="Pequeño")
ggplot(df5, aes(x=Año, y=Ventas, colour=Tamaño.Cte.Industria)) +
geom_bar(stat="identity") +
labs(
title= "Ventas por Año",
subtitle= "Caso Arca Continental"
)¿Cuál es el comportamiento observado de las unidades vendidas por mes
de cada una de las marcas, independientemente de sus respectivas
presentaciones?
Respuesta: La marca Coca-Cola es la más vendida de todas, con
incremento de ventas en 2019. La marca Sprite con incremento de ventas
año con año.
df6 <- df %>% filter(Marca=="Coca-Cola")
ggplot(df6, aes(x=Año, y=Ventas, colour=Tamaño.Cte.Industria)) +
geom_bar(stat="identity") +
labs(
title= "Ventas por Año de Coca-Cola",
subtitle= "Caso Arca Continental"
)df7 <- df %>% filter(Marca=="Sprite")
ggplot(df7, aes(x=Año, y=Ventas, colour=Tamaño.Cte.Industria)) +
geom_bar(stat="identity") +
labs(
title= "Ventas por Año de Sprite",
subtitle= "Caso Arca Continental"
)¿Se ha incrementado la venta de productos en envases retornables en
los últimos dos años?
Respuesta: No, sólo hubo un incremento en el último
año.
df8 <- df %>% filter(Retornable_NR=="Retornable")
ggplot(df8, aes(x=Año, y=Ventas, colour=Tamaño.Cte.Industria)) +
geom_bar(stat="identity") +
labs(
title= "Ventas por Año de envases Retornables",
subtitle= "Caso Arca Continental"
)¿El comportamiento de la venta de agua ha incrementado en relación al
de los refrescos o las bebidas isotónicas?
Respuesta: Las ventas de Agua Purificada y Colas Regular bajaron
en su último año. Sin embargo, Isotónicos Regultar aumentó año con
año.
df9 <- df %>% filter(Segmento.Det=="Agua Purificada" | Segmento.Det=="Isotónicos Regular" | Segmento.Det=="Colas Regular")
ggplot(df9, aes(x=Año, y=Ventas, fill=Segmento.Det)) +
geom_bar(position="dodge", stat="identity") +
labs(
title= "Ventas por Año",
subtitle= "Caso Arca Continental"
)¿Puede decirse que la venta mensual de agua está relacionada con la
venta mensual de refrescos en los últimos 4 años?
Respuesta: La venta de agua y refrescos no está
relacionada.
df10 <- df %>% filter(Segmento.Det=="Agua Purificada" | Segmento.Det=="Colas Regular")
ggplot(df10, aes(x=Año, y=Ventas, fill=Segmento.Det)) +
geom_bar(position="dodge", stat="identity") +
labs(
title= "Ventas por Año",
subtitle= "Caso Arca Continental"
)¿A cuánto ascienden las ventas esperadas para el 2020 en la Coca Cola
de 500 ml NR Vidrio?
Respuesta: Acorde a un modelo predictivo utilizando regresión
lineal, las ventas esperadas para Coca Cola de 500 ml NR Vidrio en 2020
son de 444,066 unidades, con una R cuadrada ajustada del
48%.
df11 <- df %>% filter(Marca=="Coca-Cola" & Presentacion=="500 ml NR Vidrio")
df12 <- aggregate(Ventas ~ Año, df11, sum)
df12$Año <- as.integer(df12$Año)
regresion <- lm(Ventas ~ Año, data=df12)
summary(regresion)##
## Call:
## lm(formula = Ventas ~ Año, data = df12)
##
## Residuals:
## 1 2 3 4
## -23838.5 35316.5 882.5 -12360.5
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -54970595 28310425 -1.942 0.192
## Año 27433 14032 1.955 0.190
##
## Residual standard error: 31380 on 2 degrees of freedom
## Multiple R-squared: 0.6565, Adjusted R-squared: 0.4847
## F-statistic: 3.822 on 1 and 2 DF, p-value: 0.1898
# Ecuación de la recta y = -54,970,595 + 27,433*Año
datos <- data.frame(Año=2020)
predict(regresion,datos)## 1
## 444065.5