Introducción a ciencia de datos

L1: Estadística univariada

Objetivos

Aplicar los temas vistos en el material del curso en el caso del sector retail

  1. Entender y analizar los usos de las tablas de frecuencias para resolver problemas relevantes para el negocio
  2. Entender y analizar las principales medidas de tendencia central y su interpretación
  3. Entender y analizar las medidas de dispersión más comunes para el análisis de datos

1. Contexto del caso

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

2. Importación de librerías y archivos

# 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')

3. Lectura de datos

#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 ...

4. Tablas de frecuencias

Tabla de frecuencia univariada

# 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

5. Tendencia central

Media o promedio

# Promedio de precios
mean(data$precio)
## [1] 119.7923

Mediana

# Mediana de precios, valor central de la distribución de los datos
median(data$precio)
## [1] 83.12

Moda

# Valor más común en los precios
names(sort(table(data$precio), decreasing = TRUE)[1])
## [1] "3.92"

6. Medidas de localización

Cuantiles

# 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

7. Medidas de dispersión

Desviación estándar

# 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

Rango intercuartílico

# 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

Rango

# 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

Coeficiente de variación

# 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

Bonus

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