Aplicar los temas vistos en el material del curso en el caso del sector retail
En este notebook se analizará las medidas de dispersión, posición y variabilidad para el sector retail, para esto tomaremos los datos más relevantes de precios, medidas y envíos de los productos para poder validar las hipótesis propuestas para cada tema
# Importar las librerías necesarias según el análisis que se vaya a realizar
# Librería para comando de sistema
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.0 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ 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
# cargar los datos en csv
data <- read.csv('https://raw.githubusercontent.com/Crisben/uleam-stat24/main/recursos/Taller%201/Ordenes_productos_C1_M2.csv', sep=';',encoding='latin-1')
#visualizar los primeros registros
head(data)
## orden_id order_item_id producto_id vendedor_id fecha_envio_limite precio
## 1 107500PO59A A PO59 VE5389 07/04/2018 18:12 271.86
## 2 37493PS22B B PS22 VE1558 20/10/2017 09:07 115.73
## 3 28050PK20B B PK20 VE9159 17/08/2017 08:15 432.99
## 4 52187PA10A A PA10 VE3159 23/09/2017 23:27 108.38
## 5 84639PR12A A PR12 VE5090 07/01/2018 11:50 51.50
## 6 73003PS37A A PS37 VE3806 09/12/2017 16:52 132.51
## valor_flete codigo_postal_vendedor ciudad_vendedor departamento_vendedor
## 1 30.72 52435 Mallama Nari\xf1o
## 2 4.68 52203 Colon Nari\xf1o
## 3 82.70 66001 Pereira Risaralda
## 4 35.39 52435 Mallama Nari\xf1o
## 5 11.10 73001 Ibague Tolima
## 6 33.68 52356 Ipiales Nari\xf1o
## nombre_categoria_producto longitud_nombre_producto
## 1 Productos ecoamigables 6
## 2 Carnicer\xeda 10
## 3 Deportes 25
## 4 Electrodom\xe9sticos 10
## 5 Frutas y verduras 23
## 6 Carnicer\xeda 13
## longitud_descripcion_producto cantidad_fotos_producto peso_g_producto
## 1 7 27 2486
## 2 31 20 256
## 3 5 4 5270
## 4 1 6 734
## 5 16 35 884
## 6 19 29 811
## longitud_cm_producto altura_cm_producto ancho_cm_producto
## 1 17 11 14
## 2 43 2 21
## 3 9 27 29
## 4 46 48 22
## 5 45 26 18
## 6 29 9 16
# Revisar los tipos de data en el archivo
str(data)
## 'data.frame': 10134 obs. of 18 variables:
## $ orden_id : chr "107500PO59A" "37493PS22B" "28050PK20B" "52187PA10A" ...
## $ order_item_id : chr "A" "B" "B" "A" ...
## $ producto_id : chr "PO59" "PS22" "PK20" "PA10" ...
## $ vendedor_id : chr "VE5389" "VE1558" "VE9159" "VE3159" ...
## $ fecha_envio_limite : chr "07/04/2018 18:12" "20/10/2017 09:07" "17/08/2017 08:15" "23/09/2017 23:27" ...
## $ precio : num 271.9 115.7 433 108.4 51.5 ...
## $ valor_flete : num 30.72 4.68 82.7 35.39 11.1 ...
## $ codigo_postal_vendedor : int 52435 52203 66001 52435 73001 52356 52240 50683 52381 66001 ...
## $ ciudad_vendedor : chr "Mallama" "Colon" "Pereira" "Mallama" ...
## $ departamento_vendedor : chr "Nari\xf1o" "Nari\xf1o" "Risaralda" "Nari\xf1o" ...
## $ nombre_categoria_producto : chr "Productos ecoamigables" "Carnicer\xeda" "Deportes" "Electrodom\xe9sticos" ...
## $ longitud_nombre_producto : int 6 10 25 10 23 13 8 5 7 1 ...
## $ longitud_descripcion_producto: int 7 31 5 1 16 19 37 35 11 39 ...
## $ cantidad_fotos_producto : int 27 20 4 6 35 29 24 26 30 33 ...
## $ peso_g_producto : int 2486 256 5270 734 884 811 621 286 30 16 ...
## $ longitud_cm_producto : int 17 43 9 46 45 29 26 29 50 11 ...
## $ altura_cm_producto : int 11 2 27 48 26 9 41 21 26 42 ...
## $ ancho_cm_producto : int 14 21 29 22 18 16 29 18 17 12 ...
# Frecuencia absoluta
frec_data <- data %>%
count(nombre_categoria_producto) %>%
arrange(desc(n)) %>%
rename(count = n)
head(frec_data, 4)
## nombre_categoria_producto count
## 1 Tecnolog\xeda 543
## 2 Deportes 537
## 3 Frutas y verduras 532
## 4 Carnicer\xeda 523
# Frecuencia absoluta y relativa acumulada
frec_data$acumulada_nombre_categoria_producto <- cumsum(frec_data$count)
frec_data$porcentaje_nombre_categoria_producto <- frec_data$count/cumsum(frec_data$count)
frec_data$acumulada_porcentaje_nombre_categoria_producto <- cumsum(frec_data$porcentaje_nombre_categoria_producto)
head(frec_data, 5)
## nombre_categoria_producto count acumulada_nombre_categoria_producto
## 1 Tecnolog\xeda 543 543
## 2 Deportes 537 1080
## 3 Frutas y verduras 532 1612
## 4 Carnicer\xeda 523 2135
## 5 Ropa de adultos 521 2656
## porcentaje_nombre_categoria_producto
## 1 1.0000000
## 2 0.4972222
## 3 0.3300248
## 4 0.2449649
## 5 0.1961596
## acumulada_porcentaje_nombre_categoria_producto
## 1 1.000000
## 2 1.497222
## 3 1.827247
## 4 2.072212
## 5 2.268372
# Promedio de precios
mean(data$precio)
## [1] 119.7923
# Mediana de precios, valor central de la distribución de los datos
median(data$precio)
## [1] 83.12
# Valor más común en los precios
names(sort(table(data$precio), decreasing = TRUE)[1])
## [1] "3.92"
# Calcular el 20%, 50% y 70% del peso de los productos
quantile(data$peso_g_producto, c(0.20, 0.50, 0.70))
## 20% 50% 70%
## 470.0 1458.5 2535.1
# Encontrar la desviación estándar de la longitud de los productos de la muestra
# Representa qué tan lejos de la media se encuentran las observaciones
sd(data$longitud_cm_producto)
## [1] 15.29287
# Encontrar el rango intercuartílico de la longitud de los productos
# es la diferencia entre el tercer y el primer cuartil.
IQR(data$longitud_cm_producto)
## [1] 22
# Encontrar el rango de la longitud de los productos de la muestra
# Representa la diferencia que existe entre el producto más grande y el más pequeño
range(data$longitud_cm_producto)
## [1] 0 91
# Encontrar el coeficiente de variaciónd de la longitud de los productos
# Es la división de la desviación estándar sobre la media
sd(data$longitud_cm_producto) / mean(data$longitud_cm_producto)
## [1] 0.5085428
summary(data)
## orden_id order_item_id producto_id vendedor_id
## Length:10134 Length:10134 Length:10134 Length:10134
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## fecha_envio_limite precio valor_flete codigo_postal_vendedor
## Length:10134 Min. : 0.01 Min. : 0.00 Min. : 5001
## Class :character 1st Qu.: 34.16 1st Qu.: 5.76 1st Qu.:50001
## Mode :character Median : 83.12 Median : 13.98 Median :52323
## Mean : 119.79 Mean : 20.05 Mean :49992
## 3rd Qu.: 165.51 3rd Qu.: 27.45 3rd Qu.:54003
## Max. :1262.94 Max. :183.15 Max. :99001
## ciudad_vendedor departamento_vendedor nombre_categoria_producto
## Length:10134 Length:10134 Length:10134
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
## longitud_nombre_producto longitud_descripcion_producto cantidad_fotos_producto
## Min. : 0.00 Min. : 0.00 Min. : 0.00
## 1st Qu.:10.00 1st Qu.:10.00 1st Qu.:10.00
## Median :20.00 Median :20.00 Median :20.00
## Mean :20.07 Mean :19.85 Mean :20.11
## 3rd Qu.:30.00 3rd Qu.:30.00 3rd Qu.:30.00
## Max. :40.00 Max. :40.00 Max. :40.00
## peso_g_producto longitud_cm_producto altura_cm_producto ancho_cm_producto
## Min. : 0 Min. : 0.00 Min. : 0.00 Min. : 0.00
## 1st Qu.: 607 1st Qu.:19.00 1st Qu.: 9.00 1st Qu.:15.00
## Median : 1458 Median :30.00 Median :17.00 Median :23.00
## Mean : 2106 Mean :30.07 Mean :17.92 Mean :22.91
## 3rd Qu.: 2941 3rd Qu.:41.00 3rd Qu.:26.00 3rd Qu.:30.00
## Max. :20661 Max. :91.00 Max. :64.00 Max. :72.00