Prompt para IA (Metodología RACE)

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

Prompt Sintético

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