Le meilleur outil de reproductibilité consiste à consigner vos actions dans un journal:
experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported
Cela peut être écrit sur un papier, mais si vos expériences s’inscrivent dans un cadre informatique, vous pouvez utiliser des outils informatiques pour automatiser en partie ou en totalité ce processus de journalisation (notamment en vous aidant à suivre les jeux de données en entrée Les figures).
IPython / Jupyter Notebook est un excellent outil de reproductibilité pour Python avec une courbe d’apprentissage faible (n'oubliez pas les magies % logon et% logstart ). Astuce: pour vous assurer que votre ordinateur est reproductible, redémarrez le noyau et essayez d’exécuter toutes les cellules de haut en bas (bouton Exécuter toutes les cellules): si cela fonctionne, enregistrez tout dans un fichier d’archive ("gel"), sinon, notamment Si vous devez exécuter des cellules de manière non linéaire, non séquentielle et non évidente pour éviter les erreurs, vous devez retravailler un peu.
Un autre excellent outil très récent (2015) est recipy , qui ressemble beaucoup à sumatra (voir ci-dessous), mais spécialement conçu pour Python. Je ne sais pas si cela fonctionne avec les ordinateurs portables Jupyter, mais je sais que l'auteur les utilise fréquemment, donc je suppose que si ce n'est pas actuellement pris en charge, ce le sera dans le futur.
Git est également génial et n'est pas lié à Python. Il vous aidera non seulement à garder un historique de toutes vos expériences, le code, les ensembles de données, chiffres, etc. , mais aussi vous fournir des outils pour maintenir ( git pickaxe ), collaborer ( blâme ) et debug ( git - bisect ) à l' aide d' un scientifique méthode de débogage (appelée débogage delta ). Voici l'histoire d'un chercheur fictif qui tente de créer son propre système de journalisation d'expériences, jusqu'à ce qu'il devienne un fac-similé de Git.
Un autre outil de travail général avec une langue (avec une API Python sur pypi ) est de Sumatra , qui est spécialement conçu pour vous aider à faire réplicables la recherche ( réplicables vise à produire les mêmes résultats étant donné le code exact même et logiciels, alors que la reproductibilité vise à produire le mêmes résultats, quel que soit le support utilisé, ce qui est beaucoup plus difficile, prend du temps et ne peut pas être automatisé).
Voici comment Sumatra fonctionne: pour chaque expérience que vous menez à travers Sumatra, ce logiciel agira comme un "état de sauvegarde", que l’on trouve souvent dans les jeux vidéo. Plus précisément, vous économiserez:
- tous les paramètres que vous avez fournis;
- l'état exact du code source de l'ensemble de votre application expérimentale et de vos fichiers de configuration;
- les résultats / tracés / résultats ainsi que tout fichier généré par votre application expérimentale.
Il construira ensuite une base de données avec l'horodatage et d'autres métadonnées pour chacune de vos expériences, que vous pourrez analyser ultérieurement à l'aide de l'interface WebGUI. Sumatra ayant enregistré l’état complet de votre application pour une expérience spécifique à un moment donné, vous pouvez restaurer le code qui a produit un résultat spécifique à tout moment. Vous disposez ainsi d’une recherche reproductible à faible coût (sauf pour le stockage si vous travaillez sur d’énormes jeux de données, mais vous pouvez configurer des exceptions si vous ne voulez pas tout sauvegarder à chaque fois).
GNOME Zeitgeist (auparavant codé en Python mais maintenant porté en vala) est un autre outil formidable , un système de journalisation des actions très complet, qui enregistre tout ce que vous faites et qui peut utiliser l’apprentissage automatique pour résumer sur une période donnée les relations entre les éléments. sur la similarité et les schémas d'utilisation, par exemple en répondant à des questions du type "Qu'est-ce qui était le plus pertinent pour moi pendant que je travaillais sur le projet X pendant un mois l'année dernière?" . Fait intéressant, Zim Desktop Wiki , une application de prise de notes similaire à Evernote, possède un plugin pour travailler avec Zeitgeist.
En fin de compte, vous pouvez utiliser Git ou Sumatra ou tout autre logiciel de votre choix. Ils vous fourniront à peu près le même pouvoir de réplication, mais Sumatra est spécialement conçu pour la recherche scientifique. Il fournit donc quelques outils sophistiqués, tels qu'une interface graphique Web, vos résultats, alors que Git est plus adapté à la maintenance du code (mais il a des outils de débogage comme git-bisect, donc si vos expériences impliquent des codes, ce sera peut-être mieux). Ou bien sûr, vous pouvez utiliser les deux!
/ EDIT: dsign a touché un point très important ici: la réplicabilité de votre configuration est aussi importante que la réplicabilité de votre application. En d'autres termes, vous devez au moins fournir une liste complète des bibliothèques et des compilateurs que vous avez utilisés, avec leurs versions exactes et les détails de votre plate - forme .
Personnellement, dans l'informatique scientifique avec Python, j'ai trouvé qu'il était trop pénible d'empaqueter une application avec les bibliothèques. C'est pourquoi je viens maintenant d'utiliser un package python scientifique tout-en-un tel qu'Anaconda (avec l'excellent gestionnaire de paquets conda ), et juste conseiller aux utilisateurs d'utiliser le même paquet. Une autre solution pourrait consister à fournir un script pour générer automatiquement un fichier virtualenv ou à tout emballer à l’aide de l’ application commerciale Docker citée par dsign ou par le Vagrant opensource (avec par exemple pylearn2-in-a-box qui utilise Vagrant pour produire un fichier facilement distribuable). paquet d'environnement virtuel).
Enfin, pour réellement disposer d'un environnement de travail complet à chaque fois que vous en avez besoin, vous pouvez créer une machine virtuelle (voir VirtualBox). Vous pouvez même enregistrer l'état de la machine (capture instantanée) avec votre expérience prête à être exécutée à l'intérieur. Ensuite, vous pouvez simplement partager cette machine virtuelle avec tout ce qui est inclus afin que tout le monde puisse répliquer votre expérience avec votre configuration exacte. C’est probablement le meilleur moyen de reproduire une expérience logicielle. Les conteneurs peuvent constituer une alternative plus légère, mais ils n'incluent pas l'environnement complet, de sorte que la fidélité de la réplication sera moins robuste.
/ EDIT2: Voici une superbe vidéo résumant (pour le débogage mais qui peut aussi s’appliquer à la recherche) ce qui est fondamental pour faire une recherche reproductible: enregistrer vos expériences et les étapes de la méthode scientifique, une sorte d ’ " expérimentation explicite " .