(R) Rol: Actúa como un Analista de Datos Senior especializado en el lenguaje de programación R y el ecosistema Tidyverse. Tu enfoque principal es la limpieza de datos (data wrangling) y la creación de scripts reproducibles, eficientes y fáciles de entender.
(A) Acción: Tu tarea es desarrollar un script
completo en R que lea un archivo de texto con datos de ventas que está
“sucio” y lo transforme en un data.frame
limpio y listo
para el análisis, llamado datos_final
. El script debe
abordar todos los problemas de formato, tipo de dato y consistencia
presentes en el archivo original.
(C) Contexto: Se te proporciona el contenido exacto
de un archivo de texto llamado datos_originales_sucios.txt
.
Este archivo contiene varias irregularidades que debes manejar
programáticamente.
Contenido del archivo de texto
(datos_originales_sucios.txt
):
#-- INICIO DEL REPORTE DE VENTAS --#
#-- GENERADO: 2023-10-27 --#
ID_TRANSACCION|FECHA_OPERACION|PRODUCTO|CANTIDAD|PRECIO_UNITARIO_EUR
id_001; 21/10/2023 ; Producto A; 5; 1.250,50
id_002; 2023-10-22; Producto B ; 2; 99,90
id_003; Oct 23, 2023; producto_a; NA; 1250,50
id_004; 24-10-2023; Producto C; 10; --
id_005; 2023-10-25; PRODUCTO B ; 3 ; 99,9
#-- FIN DEL REPORTE --#
id_006; 26/10/2023; Producto D; 1; 500,00
Desafíos específicos a resolver en el script: 1.
Metadatos y Comentarios: El archivo contiene líneas al
inicio y en medio que no son datos (#-- ... --#
) y deben
ser ignoradas. 2. Separadores Inconsistentes: La línea
de encabezado usa una barra vertical (|
) como separador,
mientras que las líneas de datos usan punto y coma (;
). 3.
Espacios Irregulares: Existen espacios en blanco
inconsistentes alrededor de los separadores. 4. Formatos de
Fecha Múltiples: La columna de fechas contiene formatos como
dd/mm/yyyy
, yyyy-mm-dd
y
Mes día, año
. 5. Inconsistencia Textual:
La columna de producto tiene variaciones en mayúsculas/minúsculas y uso
de guiones bajos (Producto B
, PRODUCTO B
,
producto_a
). 6. Valores Faltantes Mixtos:
Los datos faltantes se representan como NA
y también como
--
. 7. Formato Numérico Incorrecto: Las
columnas numéricas (CANTIDAD
y
PRECIO_UNITARIO_EUR
) están almacenadas como texto. El
precio usa .
como separador de miles y ,
como
separador decimal.
(E) Expectativa: Espero un único bloque de código en
R que sea completo y ejecutable. El script debe: 1. Usar
librerías del Tidyverse: Principalmente readr
,
dplyr
, stringr
y lubridate
. 2.
Cargar los datos eficientemente: La estrategia
preferida es leer primero las líneas del archivo, unificar el separador
a punto y coma (;
) y luego usar una función de lectura con
header = TRUE
. 3. Producir un
data.frame
final llamado datos_final
que cumpla con los siguientes criterios de limpieza: *
ID_TRANSACCION
: Debe ser de tipo character
. *
FECHA_OPERACION
: Debe ser de tipo Date
, con
todos los formatos originales unificados. * PRODUCTO
: Debe
estar estandarizado en formato “Title Case” (ej. “Producto A”) y sin
guiones bajos. * CANTIDAD
: Debe ser de tipo
numeric
, manejando los NA
correctamente. *
PRECIO_UNITARIO_EUR
: Debe ser de tipo numeric
,
usando el punto (.
) como separador decimal y manejando
correctamente los valores faltantes (--
). 4. Ser
legible y estar bien comentado: Explica los pasos clave del
proceso de carga y limpieza.
Escribe un script completo en R usando el Tidyverse para procesar los
siguientes datos de texto y crear un data.frame
limpio
llamado datos_final
.
Datos de entrada:
#-- INICIO DEL REPORTE DE VENTAS --#
#-- GENERADO: 2023-10-27 --#
ID_TRANSACCION|FECHA_OPERACION|PRODUCTO|CANTIDAD|PRECIO_UNITARIO_EUR
id_001; 21/10/2023 ; Producto A; 5; 1.250,50
id_002; 2023-10-22; Producto B ; 2; 99,90
id_003; Oct 23, 2023; producto_a; NA; 1250,50
id_004; 24-10-2023; Producto C; 10; --
id_005; 2023-10-25; PRODUCTO B ; 3 ; 99,9
#-- FIN DEL REPORTE --#
id_006; 26/10/2023; Producto D; 1; 500,00
Requisitos del script: 1. Carga:
Ignora las líneas de comentario (#--
). Unifica los
separadores (|
y ;
) a ;
antes de
leer los datos con su encabezado. 2. Limpieza:
Transforma las columnas para que el data.frame
final
(datos_final
) tenga la siguiente estructura: *
FECHA_OPERACION
: Tipo Date
. *
PRODUCTO
: character
, estandarizado a “Title
Case” y sin guiones bajos (ej. “Producto A”). * CANTIDAD
:
numeric
, interpretando NA
como valor faltante.
* PRECIO_UNITARIO_EUR
: numeric
, usando
.
como separador decimal. Debe manejar correctamente los
separadores de miles (.
) y los valores faltantes
(--
). 3. Salida: Al final, imprime el
data.frame
datos_final
y su estructura con
str()
.