Semana 06 - Limpieza y Transformación de Datos

Author

Johamnely Mateo

Published

June 10, 2026

Introducción

En esta práctica se realiza un proceso completo de limpieza y transformación de datos utilizando R y el paquete dplyr. El objetivo principal es identificar problemas comunes en un dataset real, como valores faltantes, registros duplicados y outliers, para posteriormente aplicar técnicas de limpieza, transformación y análisis de datos.

Librerías

library(tidyverse) library(stringr) library(forcats) 

Creación del Dataset

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") )  ventas_crudas 

Parte 1 - Diagnóstico Inicial

Estructura del dataset

glimpse(ventas_crudas) 

Resumen estadístico

summary(ventas_crudas) 

Valores faltantes por columna

colSums(is.na(ventas_crudas)) 

Observaciones del diagnóstico

  • Existe un registro duplicado en id_venta.

  • Hay valores faltantes en las columnas vendedor, monto y completada.

  • Se identifica un posible outlier en la columna monto con valor de 9,500,000.

  • Existen inconsistencias en mayúsculas, minúsculas y espacios en texto.

Parte 2 - Limpieza de Datos

Eliminación de duplicados

ventas_limpias <- ventas_crudas %>%   distinct(id_venta, .keep_all = TRUE)  ventas_limpias 

Limpieza de texto

ventas_limpias <- ventas_limpias %>%   mutate(     vendedor = str_trim(vendedor),     vendedor = str_to_title(vendedor),     region = str_trim(region),     region = str_to_lower(region)   )  ventas_limpias 

Imputación de valores faltantes

ventas_limpias <- ventas_limpias %>%   group_by(mes) %>%   mutate(     monto = ifelse(       is.na(monto),       median(monto, na.rm = TRUE),       monto     )   ) %>%   ungroup()  ventas_limpias <- ventas_limpias %>%   mutate(     vendedor = replace_na(vendedor, "Desconocido"),     completada = replace_na(completada, "NO"),     completada = as.factor(completada)   )  ventas_limpias 

Detección de outliers con IQR

Q1 <- quantile(ventas_limpias$monto, 0.25) Q3 <- quantile(ventas_limpias$monto, 0.75)  IQR_valor <- IQR(ventas_limpias$monto)  limite_inferior <- Q1 - 1.5 * IQR_valor limite_superior <- Q3 + 1.5 * IQR_valor  ventas_limpias <- ventas_limpias %>%   mutate(     es_outlier = monto < limite_inferior |                  monto > limite_superior   )  ventas_limpias 

Parte 3 - Transformación de Datos

Cálculo de comisión

ventas_limpias <- ventas_limpias %>%   mutate(     comision = ifelse(       completada == "SI",       monto * 0.05,       0     )   )  ventas_limpias 

Categoría de venta

ventas_limpias <- ventas_limpias %>%   mutate(     categoria_venta = case_when(       monto < 15000 ~ "Baja",       monto >= 15000 & monto <= 25000 ~ "Media",       monto > 25000 ~ "Alta"     )   )  ventas_limpias 

Ranking de vendedores por región

ventas_limpias <- ventas_limpias %>%   group_by(region) %>%   mutate(     ranking = rank(desc(monto))   ) %>%   ungroup()  ventas_limpias 

Parte 4 - Resumen Analítico

resumen_ventas <- ventas_limpias %>%   group_by(vendedor) %>%   summarise(     total_ventas_completadas = sum(completada == "SI"),     monto_total_vendido = sum(monto),     monto_promedio_venta = mean(monto),     comision_total = sum(comision),     .groups = "drop"   ) %>%   arrange(desc(monto_total_vendido))  resumen_ventas 

Conclusión

Durante esta práctica se aplicaron diferentes técnicas de limpieza y transformación de datos utilizando dplyr y otras herramientas del ecosistema Tidyverse. Se identificaron registros duplicados, valores faltantes y outliers, aplicando métodos adecuados para corregir cada problema. Finalmente, se construyó un resumen analítico que permite evaluar el desempeño de los vendedores y comprender mejor la distribución de las ventas.