La mejor herramienta de reproducibilidad es hacer un registro de sus acciones, algo como esto:
experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported
Esto puede escribirse en un papel, pero, si sus experimentos se ajustan a un marco computacional, puede usar herramientas computacionales para automatizar parcial o completamente ese proceso de registro (particularmente ayudándole a rastrear los conjuntos de datos de entrada que pueden ser enormes, y la salida cifras).
Por supuesto, una gran herramienta de reproducibilidad para Python con una curva de aprendizaje baja es IPython / Jupyter Notebook (no olvide las magias % logon y% logstart ). Consejo: para asegurarse de que su computadora portátil es reproducible, reinicie el núcleo e intente ejecutar todas las celdas de arriba a abajo (botón Ejecutar todas las celdas): si funciona, guarde todo en un archivo ("congelación"), de lo contrario, notablemente Si necesita ejecutar celdas de forma no lineal, no secuencial y no obvia para evitar errores, debe volver a trabajar un poco.
Otra gran herramienta que es muy reciente (2015) es recipy , que es muy similar a sumatra (ver más abajo), pero hecha específicamente para Python. No sé si funciona con los Cuadernos Jupyter, pero sé que el autor los usa con frecuencia, así que supongo que si no es compatible actualmente, lo será en el futuro.
Git también es increíble, y no está vinculado a Python. Le ayudará no solo a mantener un historial de todos sus experimentos, códigos, conjuntos de datos, figuras, etc., sino que también le proporcionará herramientas para mantener ( git pickaxe ), colaborar ( culpar ) y depurar ( git - bisect ) utilizando un científico método de depuración (llamado depuración delta ). Aquí hay una historia de un investigador ficticio que intenta hacer su propio sistema de registro de experimentos, hasta que termina siendo un facsímil de Git.
Otra herramienta general se trabaja con cualquier idioma (con un API Python en PyPI ) es de Sumatra , que está diseñado específicamente para ayudarle a hacer replicable investigación ( replicables tiene como objetivo producir los mismos resultados dado el mismo código y software, mientras reproducibilidad tiene como objetivo producir la Los mismos resultados dados en cualquier medio, que es mucho más difícil y lento y no automatizable).
Así es como funciona Sumatra: para cada experimento que realice a través de Sumatra, este software actuará como un "estado de guardar juego" que a menudo se encuentra en los videojuegos. Más precisamente, ahorrará:
- todos los parámetros que proporcionaste;
- el estado exacto del código fuente de toda su aplicación experimental y archivos de configuración;
- la salida / gráficos / resultados y también cualquier archivo producido por su aplicación experimental.
Luego construirá una base de datos con la marca de tiempo y otros metadatos para cada uno de sus experimentos, que luego puede rastrear usando la webGUI. Dado que Sumatra guardó el estado completo de su aplicación para un experimento específico en un punto específico en el tiempo, puede restaurar el código que produjo un resultado específico en cualquier momento que desee, por lo que tiene una investigación replicable a bajo costo (excepto para el almacenamiento si trabaja en grandes conjuntos de datos, pero puede configurar excepciones si no desea guardar todo cada vez).
Otra herramienta increíble es el Zeitgeist de GNOME (anteriormente codificado en Python pero ahora portado a Vala), un sistema de diario de acción que abarca todo el compás, que registra todo lo que haces y puede usar el aprendizaje automático para resumir durante un período de tiempo que deseas la relación entre elementos sobre patrones de similitud y uso, por ejemplo, responder preguntas como "¿Qué fue lo más relevante para mí, mientras trabajaba en el proyecto X, durante un mes el año pasado?" . Curiosamente, Zim Desktop Wiki , una aplicación para tomar notas similar a Evernote, tiene un complemento para trabajar con Zeitgeist.
Al final, puede usar Git o Sumatra o cualquier otro software que desee, le proporcionarán aproximadamente el mismo poder de replicación, pero Sumatra está específicamente diseñado para la investigación científica, por lo que proporciona algunas herramientas sofisticadas como una GUI web para rastrear sus resultados, mientras que Git se adapta más al mantenimiento del código (pero tiene herramientas de depuración como git-bisect, por lo que si sus experimentos involucran códigos, en realidad puede ser mejor). ¡O, por supuesto, puedes usar ambos!
/ EDITAR: dsign tocó un punto muy importante aquí: la replicabilidad de su configuración es tan importante como la replicabilidad de su aplicación. En otras palabras, al menos debe proporcionar una lista completa de las bibliotecas y compiladores que utilizó junto con sus versiones exactas y los detalles de su plataforma .
Personalmente, en informática científica con Python, descubrí que empaquetar una aplicación junto con las bibliotecas es demasiado doloroso, por lo que ahora solo uso un paquete Python científico todo en uno como Anaconda (con el gran administrador de paquetes conda ), y solo aconseje a los usuarios que usen el mismo paquete. Otra solución podría ser proporcionar un script para generar automáticamente un virtualenv , o empaquetar todo utilizando la aplicación comercial Docker como se cita por dsign o el Vagrant de código abierto (por ejemplo, pylearn2-in-a-box que usa Vagrant para producir un redistribuible fácilmente paquete de entorno virtual).
Finalmente, para asegurarse realmente de tener un entorno de trabajo completo cada vez que lo necesite, puede hacer una máquina virtual (consulte VirtualBox) e incluso puede guardar el estado de la máquina (instantánea) con su experimento listo para ejecutarse en su interior. Luego puede compartir esta máquina virtual con todo lo incluido para que cualquiera pueda replicar su experimento con su configuración exacta. Esta es probablemente la mejor manera de replicar un experimento basado en software. Los contenedores pueden ser una alternativa más liviana, pero no incluyen todo el entorno, por lo que la fidelidad de replicación será menos robusta.
/ EDIT2: Aquí hay un gran video que resume (para la depuración, pero esto también se puede aplicar a la investigación) lo que es fundamental para hacer una investigación reproducible: registrar sus experimentos y otros pasos del método científico, una especie de "experimentación explícita" .