``` 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>