(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().