Semana 06 - Limpieza y Transformación de Datos
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,montoycompletada.Se identifica un posible outlier en la columna
montocon 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.