``` r
ventas_crudas <- tibble(
id_venta = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 3),
vendedor = c("ana", "PEDRO", "María ", NA, "carmen", "ana", "PEDRO", "luis", "carmen", "luis", "María "),
region = c("norte", "SUR", "Norte", "sur", "NORTE", "norte", "sur", "Norte", "sur", "norte", "Norte"),
monto = c(15000, 22000, 18500, NA, 31000, 16000, 19500, 9500000, 21000, 17500, 18500),
mes = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 1),
completada = c("SI", "SI", "NO", "SI", NA, "SI", "NO", "SI", "SI", "NO", "NO"))
glimpse(ventas_crudas)
## Rows: 11
## Columns: 6
## $ id_venta <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 3
## $ vendedor <chr> "ana", "PEDRO", "María ", NA, "carmen", "ana", "PEDRO", "lu…
## $ region <chr> "norte", "SUR", "Norte", "sur", "NORTE", "norte", "sur", "N…
## $ monto <dbl> 15000, 22000, 18500, NA, 31000, 16000, 19500, 9500000, 2100…
## $ mes <dbl> 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 1
## $ completada <chr> "SI", "SI", "NO", "SI", NA, "SI", "NO", "SI", "SI", "NO", "…
summary(ventas_crudas)
## id_venta vendedor region monto mes
## Min. : 1.000 Length :11 Length :11 Min. : 15000 Min. :1
## 1st Qu.: 3.000 N.unique : 5 N.unique : 5 1st Qu.: 17750 1st Qu.:1
## Median : 5.000 N.blank : 0 N.blank : 0 Median : 19000 Median :2
## Mean : 5.273 Min.nchar: 3 Min.nchar: 3 Mean : 967900 Mean :2
## 3rd Qu.: 7.500 Max.nchar: 6 Max.nchar: 5 3rd Qu.: 21750 3rd Qu.:3
## Max. :10.000 NAs : 1 Max. :9500000 Max. :3
## NAs :1
## completada
## Length :11
## N.unique : 2
## N.blank : 0
## Min.nchar: 2
## Max.nchar: 2
## NAs : 1
##
colSums(is.na(ventas_crudas))
## id_venta vendedor region monto mes completada
## 0 1 0 1 0 1
¿Cuántos duplicados hay? Hay 1 fila duplicada, que es id_venta 3, que aparece dos veces al principio y al final.
¿Cuántos NAs por columna? vendedor: 1 NA monto: 1 NA completada: 1 NA
¿Hay outliers? Sí, en monto, el valor de 9,500,000 es un outlier, comparado con el resto de las ventas que rondan entre 15k y 31k.
ventas_limpias <- ventas_crudas|>
distinct(id_venta, .keep_all = TRUE)|>
mutate(
vendedor = replace_na(vendedor, "Desconocido"),
vendedor = str_to_title(str_trim(vendedor)),
region = str_to_lower(str_trim(region)))|>
group_by(mes)|>
mutate(monto = if_else(is.na(monto), median(monto, na.rm = TRUE), monto)) |>
ungroup()|>
mutate(
completada = replace_na(completada, "NO"),
completada = factor(completada, levels = c("SI", "NO")))|>
mutate(
Q1 = quantile(monto, 0.25),
Q3 = quantile(monto, 0.75),
es_outlier = monto > (Q3 + 1.5 * IQR(monto)) | monto < (Q1 - 1.5 * IQR(monto)))|>
select(-Q1, -Q3)|>
mutate(
comision = if_else(completada == "SI", monto * 0.05, 0),
categoria_venta = case_when(
monto < 15000 ~ "Baja",
monto <= 25000 ~ "Media",
TRUE ~ "Alta" ) ) |>
group_by(region) |>
mutate(ranking_vendedor = rank(desc(monto)) ) |>
ungroup()
glimpse(ventas_limpias)
## Rows: 10
## Columns: 10
## $ id_venta <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
## $ vendedor <chr> "Ana", "Pedro", "María", "Desconocido", "Carmen", "An…
## $ region <chr> "norte", "sur", "norte", "sur", "norte", "norte", "su…
## $ monto <dbl> 15000, 22000, 18500, 23500, 31000, 16000, 19500, 9500…
## $ mes <dbl> 1, 1, 1, 2, 2, 2, 3, 3, 3, 3
## $ completada <fct> SI, SI, NO, SI, NO, SI, NO, SI, SI, NO
## $ es_outlier <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE…
## $ comision <dbl> 750, 1100, 0, 1175, 0, 800, 0, 475000, 1050, 0
## $ categoria_venta <chr> "Media", "Media", "Media", "Media", "Alta", "Media", …
## $ ranking_vendedor <dbl> 6, 2, 3, 1, 2, 5, 4, 1, 3, 4
resumen_analitico <- ventas_limpias |>
group_by(vendedor) |>
summarise(
total_ventas_completadas = sum(completada == "SI"),
monto_total_vendido = sum(monto),
monto_promedio_venta = mean(monto),
comision_total_ganada = sum(comision) ) |>
arrange(desc(monto_total_vendido))
print(resumen_analitico)
## # A tibble: 6 × 5
## vendedor total_ventas_completadas monto_total_vendido monto_promedio_venta
## <chr> <int> <dbl> <dbl>
## 1 Luis 1 9517500 4758750
## 2 Carmen 1 52000 26000
## 3 Pedro 1 41500 20750
## 4 Ana 2 31000 15500
## 5 Desconocido 1 23500 23500
## 6 María 0 18500 18500
## # ℹ 1 more variable: comision_total_ganada <dbl>