Script
Proyecto reproducible
El esqueleto de un análisis que se puede rehacer entero con un comando. Viene dos veces, en R y en Python, y los dos tienen que dar exactamente los mismos números.
Proyecto en R y Python · ZIP · 21 KB
No usa ningún paquete: corre con R recién instalado y con Python recién instalado.
Qué trae
| datos/crudos/ | Los datos como llegaron. Acá no se toca nada. |
|---|---|
| datos/limpios/ | Lo que produce el paso 1. Se puede borrar y rehacer. |
| salidas/ | Tablas y figuras. También se puede borrar y rehacer. |
| R/ | El análisis en R. |
| python/ | El mismo análisis en Python. |
La regla que hace reproducible a un proyecto es esa: los datos crudos no se tocan nunca y todo lo demás se puede borrar y volver a generar con un comando. Si para rehacer un resultado hace falta acordarse de algo que se hizo a mano, el proyecto no es reproducible, por prolijo que se vea.
Cómo se corre
# en R, desde la carpeta del proyecto
source("R/correr.R")
# en Python
python python/correr.pyCualquiera de los dos hace lo mismo: limpia los datos crudos, guarda el limpio, y escribe tres tablas en salidas/ —descriptivos, lo mismo abierto por grupo, y un resumen con los números sueltos que cita el informe—.
Los dos pasos, separados
Importar y limpiar lee el crudo, saca los espacios de más, convierte los números, marca lo que está fuera de rango, descarta las filas repetidas y deja anotado cuántas entraron y cuántas salieron. Analizar lee el limpio —nunca el crudo— y escribe las tablas. Están separados a propósito: limpiar es lento y se hace una vez; analizar se repite veinte veces mientras se escribe la tesis.
Los datos de ejemplo son una encuesta ficticia de 120 casos con los problemas que traen los datos de verdad: espacios de más, un grupo escrito en mayúsculas, una edad de 150 años, un ingreso vacío, un puntaje que dice «s/d» y una fila cargada dos veces. Después de la limpieza quedan 120 casos y el resumen dice qué pasó con cada problema.
Por qué en los dos idiomas
Porque comparar los dos es la verificación más barata que existe y casi nadie la hace. Las dos versiones escriben los números con seis decimales fijos, así que los archivos salen idénticos byte a byte y compararlos es una línea en la terminal. Si difieren, hay un error en alguno de los dos.
Cómo está verificado
Un script descargable no se verifica leyéndolo: se verifica corriéndolo. El verificador descomprime lo publicado, corre el proyecto entero con Python y también con R, y exige que los cuatro archivos de salida sean idénticos. Después compara los números con una implementación aparte de las mismas reglas, prueba otras dos encuestas —uno de los grupos escrito de tres maneras, una variable sin un solo dato utilizable—, comprueba que correrlo dos veces dé lo mismo y que, corrido desde otra carpeta, avise en vez de escribir cualquier cosa. En integración continua no hay R, así que ahí se compara contra lo que R dio la última vez, guardado en el repositorio.