library(ggplot2)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyr)
library(DescTools)
library(readxl)
Datos_Arca_Continental_Original <- read_excel('/Users/angiezeron/Documents/R things/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
db = Datos_Arca_Continental_Original
db
## # A tibble: 466,509 × 25
## 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
## # ℹ 466,499 more rows
## # ℹ 18 more variables: `Tamaño Cte Industria` <chr>, `Segmento Det` <chr>,
## # Marca <chr>, Presentacion <chr>, Tamaño <chr>, Retornable_NR <chr>,
## # Enero <dbl>, Febrero <dbl>, Marzo <dbl>, Abril <dbl>, Mayo <dbl>,
## # Junio <dbl>, Julio <dbl>, Agosto <dbl>, Septiembre <dbl>, Octubre <dbl>,
## # Noviembre <dbl>, Diciembre <dbl>
En este dataframe se puede identifdicar lo siguiente:
VECTORES: Numéricos (
#caracteristicas de cada columna
summary(db)
## 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 Min. : -19.0 Min. : -11.00 Min. : -32.00
## Class :character 1st Qu.: 1.0 1st Qu.: 1.00 1st Qu.: 1.00
## Mode :character Median : 2.0 Median : 2.00 Median : 3.00
## Mean : 10.1 Mean : 9.76 Mean : 11.36
## 3rd Qu.: 6.0 3rd Qu.: 6.00 3rd Qu.: 6.00
## Max. :42736.0 Max. :42767.00 Max. :42795.00
## NA's :233480 NA's :231213 NA's :227420
## Abril Mayo Junio Julio
## Min. : -70.00 Min. : -106.00 Min. : -211.0 Min. : -60.00
## 1st Qu.: 1.00 1st Qu.: 1.00 1st Qu.: 1.0 1st Qu.: 1.00
## Median : 3.00 Median : 3.00 Median : 3.0 Median : 2.00
## Mean : 11.71 Mean : 12.75 Mean : 12.2 Mean : 11.75
## 3rd Qu.: 6.00 3rd Qu.: 7.00 3rd Qu.: 6.0 3rd Qu.: 6.00
## Max. :42826.00 Max. :42856.00 Max. :42887.0 Max. :42917.00
## NA's :224057 NA's :216910 NA's :215753 NA's :223411
## Agosto Septiembre Octubre Noviembre
## Min. : -211.00 Min. : -527.0 Min. : -38.0 Min. : -25.0
## 1st Qu.: 1.00 1st Qu.: 1.0 1st Qu.: 1.0 1st Qu.: 1.0
## Median : 3.00 Median : 3.0 Median : 3.0 Median : 3.0
## Mean : 11.98 Mean : 13.4 Mean : 13.7 Mean : 13.3
## 3rd Qu.: 6.00 3rd Qu.: 7.0 3rd Qu.: 7.0 3rd Qu.: 6.0
## Max. :42948.00 Max. :42979.0 Max. :43009.0 Max. :43040.0
## NA's :220242 NA's :337314 NA's :338386 NA's :338460
## Diciembre
## Min. : -28.0
## 1st Qu.: 1.0
## Median : 3.0
## Mean : 14.8
## 3rd Qu.: 7.0
## Max. :43070.0
## NA's :341855
#para ver si tiene NAs
hay_nas <- any(is.na(db))
hay_nas
## [1] TRUE
#omitir los NAs
db_sin_nas <- na.omit(db)
db_sin_nas
## # A tibble: 51,076 × 25
## ID Año Territorio `Sub Territorio` CEDI Cliente Nombre
## <dbl> <dbl> <chr> <chr> <chr> <chr> <chr>
## 1 9 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 2 22 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 3 23 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 4 24 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 5 26 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 6 27 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 7 28 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 8 29 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 9 30 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## 10 31 2016 Guadalajara Belenes Suc. Belenes 77737 ABARR
## # ℹ 51,066 more rows
## # ℹ 18 more variables: `Tamaño Cte Industria` <chr>, `Segmento Det` <chr>,
## # Marca <chr>, Presentacion <chr>, Tamaño <chr>, Retornable_NR <chr>,
## # Enero <dbl>, Febrero <dbl>, Marzo <dbl>, Abril <dbl>, Mayo <dbl>,
## # Junio <dbl>, Julio <dbl>, Agosto <dbl>, Septiembre <dbl>, Octubre <dbl>,
## # Noviembre <dbl>, Diciembre <dbl>
#Usando GEOMPOINT, haz un grafico que permita visualizar los datos atipicos y utiliza el concepto de media winzorizada o media recortada para evitar que sesguen lo svalores de los estadisticos descriptivos.
db_largo <- db %>%
pivot_longer(cols = Enero:Diciembre, names_to = "Mes", values_to = "Ventas")
# Gráfico de outliers
ggplot(db_largo, aes(x = Mes, y = Ventas)) +
geom_boxplot() + # Boxplot para ver los rangos y los outliers
geom_point(aes(color = Mes), position = position_jitterdodge(), alpha = 0.5) +
theme_minimal() +
labs(title = "Visualización de Outliers por Mes", y = "Ventas", x = "Mes") +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Mejorar la legibilidad de las etiquetas del eje x
## Warning: Removed 3148501 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 3148501 rows containing missing values or values outside the scale
## range (`geom_point()`).
Los outliers se visualizan como los puntos que estan fuera de la
aglomeración de cada mes.
db_largo <- db %>%
pivot_longer(cols = Enero:Diciembre, names_to = "Mes", values_to = "Ventas")
media_winzorizada_por_mes <- db_largo %>%
group_by(Mes) %>%
# Aquí excluimos los NA antes de la winsorización y la media
summarise(MediaWinzorizada = mean(Winsorize(Ventas, na.rm = TRUE), na.rm = TRUE))
# Crear el gráfico de boxplot y superponer la media winzorizada
ggplot(db_largo, aes(x = Mes, y = Ventas)) +
geom_boxplot() + # Boxplot para ver los rangos y outliers
geom_point(aes(color = Mes), position = position_jitter(width = 0.2), alpha = 0.5) +
geom_point(data = media_winzorizada_por_mes, aes(x = Mes, y = MediaWinzorizada), color = 'black', size = 3) +
theme_minimal() +
labs(title = "Visualización de Outliers por Mes con Media Winzorizada",
y = "Ventas",
x = "Mes") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Warning: Removed 3148501 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 3148501 rows containing missing values or values outside the scale
## range (`geom_point()`).
?? nose porque me queda igual con la winzorizada
#usando SELECT, Muestra las ventas de Enero a Junio por Cedi.
ventas_seleccionadas <- db %>%
select(CEDI, Enero:Junio)
ventas_seleccionadas
## # A tibble: 466,509 × 7
## CEDI Enero Febrero Marzo Abril Mayo Junio
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Suc. Belenes NA NA NA NA NA NA
## 2 Suc. Belenes NA 2 8 4 4 2
## 3 Suc. Belenes NA NA 3 6 3 3
## 4 Suc. Belenes NA NA NA NA NA NA
## 5 Suc. Belenes NA NA NA NA NA NA
## 6 Suc. Belenes NA NA 1 NA NA NA
## 7 Suc. Belenes 1 NA NA NA 0 NA
## 8 Suc. Belenes NA 1 NA 1 NA 1
## 9 Suc. Belenes 3 3 4 4 4 4
## 10 Suc. Belenes NA NA NA NA NA 0
## # ℹ 466,499 more rows
#usando FILTER, Muestra los movimientos por Cedi y tamaño de tienda grande.
ventas_filtradas <- db %>%
filter(Tamaño == 'Familiar') %>%
select(CEDI, Tamaño)
ventas_filtradas
## # A tibble: 137,995 × 2
## CEDI Tamaño
## <chr> <chr>
## 1 Suc. Belenes Familiar
## 2 Suc. Belenes Familiar
## 3 Suc. Belenes Familiar
## 4 Suc. Belenes Familiar
## 5 Suc. Belenes Familiar
## 6 Suc. Belenes Familiar
## 7 Suc. Belenes Familiar
## 8 Suc. Belenes Familiar
## 9 Suc. Belenes Familiar
## 10 Suc. Belenes Familiar
## # ℹ 137,985 more rows
#usando ARRANGE, Ordena la base de datos por Cedi, por marca y por presentación.
ventas_ordenadas <- db %>%
arrange(CEDI, Marca, Presentacion)
ventas_ordenadas
## # A tibble: 466,509 × 25
## ID Año Territorio `Sub Territorio` CEDI Cliente Nombre
## <dbl> <dbl> <chr> <chr> <chr> <chr> <chr>
## 1 184065 2018 Territorio Sub Territorio CEDI Cliente Nombre
## 2 200110 2018 Guadalajara Belenes Suc. Belenes 7800 SAN I
## 3 200224 2018 Guadalajara Belenes Suc. Belenes 7875 ABARR
## 4 200461 2018 Guadalajara Belenes Suc. Belenes 7917 ABARR
## 5 200576 2018 Guadalajara Belenes Suc. Belenes 8010 ABARR
## 6 200682 2018 Guadalajara Belenes Suc. Belenes 8186 SUPER
## 7 200783 2018 Guadalajara Belenes Suc. Belenes 8201 MIGUE
## 8 200968 2018 Guadalajara Belenes Suc. Belenes 8678 FERNA
## 9 201041 2018 Guadalajara Belenes Suc. Belenes 8689 ABARR
## 10 201313 2018 Guadalajara Belenes Suc. Belenes 8795 ABARR
## # ℹ 466,499 more rows
## # ℹ 18 more variables: `Tamaño Cte Industria` <chr>, `Segmento Det` <chr>,
## # Marca <chr>, Presentacion <chr>, Tamaño <chr>, Retornable_NR <chr>,
## # Enero <dbl>, Febrero <dbl>, Marzo <dbl>, Abril <dbl>, Mayo <dbl>,
## # Junio <dbl>, Julio <dbl>, Agosto <dbl>, Septiembre <dbl>, Octubre <dbl>,
## # Noviembre <dbl>, Diciembre <dbl>
#usando RENAME, Cambia el nombre del campo Sub Territorio por Sub_territorio
cambio_nombre <- db %>%
rename(Sub_territorio = 'Sub Territorio')
cambio_nombre
## # A tibble: 466,509 × 25
## 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
## # ℹ 466,499 more rows
## # ℹ 18 more variables: `Tamaño Cte Industria` <chr>, `Segmento Det` <chr>,
## # Marca <chr>, Presentacion <chr>, Tamaño <chr>, Retornable_NR <chr>,
## # Enero <dbl>, Febrero <dbl>, Marzo <dbl>, Abril <dbl>, Mayo <dbl>,
## # Junio <dbl>, Julio <dbl>, Agosto <dbl>, Septiembre <dbl>, Octubre <dbl>,
## # Noviembre <dbl>, Diciembre <dbl>
#Usando MUTATE, Agrega un campo calculado con las ventas del primer semestre y muestra las ventas del primer semestre por marca.
ventas_primer_semestre <- db %>%
mutate(VentasPrimerSemestre = rowSums(select(., Enero, Febrero, Marzo, Abril, Mayo, Junio), na.rm = TRUE)) %>%
group_by(Marca) %>%
summarise(VentasPrimerSemestre = sum(VentasPrimerSemestre, na.rm = TRUE))
ventas_primer_semestre
## # A tibble: 56 × 2
## Marca VentasPrimerSemestre
## <chr> <dbl>
## 1 AdeS Frutal 8126
## 2 AdeS Lácteo 4413
## 3 Barista Bros 334
## 4 Bebere 1034
## 5 Burn 5070
## 6 Café Blak 79
## 7 Ciel Agua Purificada 864686
## 8 Ciel Exprim 33959
## 9 Ciel Mineralizada 18043
## 10 Ciel Mini 4942
## # ℹ 46 more rows
#usando SUMMARISE, Obtén la media de las ventas del primer semestre agrupado por marca, presentación y tamaño.
ventas_resumidas <- db %>%
mutate(VentasPrimerSemestre = rowSums(select(., Enero, Febrero, Marzo, Abril, Mayo, Junio), na.rm = TRUE)) %>%
group_by(Marca, Presentacion, Tamaño) %>%
summarise(MediaVentas = mean(VentasPrimerSemestre))
## `summarise()` has grouped output by 'Marca', 'Presentacion'. You can override
## using the `.groups` argument.
ventas_resumidas
## # A tibble: 274 × 4
## # Groups: Marca, Presentacion [273]
## Marca Presentacion Tamaño MediaVentas
## <chr> <chr> <chr> <dbl>
## 1 AdeS Frutal 200 ml Tetra Individual 1.22
## 2 AdeS Frutal 946 ml NR Tetra Familiar 4.17
## 3 AdeS Lácteo 200 ml Tetra Individual 0.0857
## 4 AdeS Lácteo 946 ml NR Tetra Familiar 3.30
## 5 Barista Bros 250 ml. NR PET Individual 0.343
## 6 Bebere 473 ml NR Individual 3.23
## 7 Burn Lata 235 ml Individual 0.558
## 8 Burn Lata 237 ml Individual 0.182
## 9 Burn Lata 310 ml Individual 0
## 10 Burn Lata 450 ml Individual 2.60
## # ℹ 264 more rows
#Calcular medidas de tendencia central (primer semestre)
tendencia_central <- db %>%
mutate(VentasPrimerSemestre = rowSums(select(., Enero, Febrero, Marzo, Abril, Mayo, Junio), na.rm = TRUE)) %>%
summarise(
MediaVentasPrimerSemestre = mean(VentasPrimerSemestre),
MedianaVentasPrimerSemestre = median(VentasPrimerSemestre)
)
tendencia_central
## # A tibble: 1 × 2
## MediaVentasPrimerSemestre MedianaVentasPrimerSemestre
## <dbl> <dbl>
## 1 35.2 4
#tendencia central de todo el año
ventas_totales_anuales <- db %>%
mutate(VentasTotalesAnuales = rowSums(select(., Enero:Diciembre), na.rm = TRUE)) %>%
summarise(
MediaVentasAnuales = mean(VentasTotalesAnuales),
MeidianaVentasAnuales = median(VentasTotalesAnuales)
)
ventas_totales_anuales
## # A tibble: 1 × 2
## MediaVentasAnuales MeidianaVentasAnuales
## <dbl> <dbl>
## 1 62.8 7
```