Das beste Werkzeug für die Reproduzierbarkeit besteht darin, ein Protokoll Ihrer Aktionen zu erstellen.
experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported
Dies kann auf einem Blatt Papier festgehalten werden. Wenn Ihre Experimente jedoch in einen Rechenrahmen passen, können Sie diesen Protokollierungsprozess mithilfe von Rechentools teilweise oder vollständig automatisieren (insbesondere, indem Sie die sehr großen Eingabedatensätze und die Ausgabe nachverfolgen Zahlen).
Ein großartiges Reproduzierbarkeitstool für Python mit einer geringen Lernkurve ist natürlich IPython / Jupyter Notebook (vergessen Sie nicht die Magie von % logon und% logstart ). Tipp: Um sicherzustellen, dass Ihr Notebook reproduzierbar ist, starten Sie den Kernel neu und versuchen Sie, alle Zellen von oben nach unten auszuführen (Schaltfläche Alle Zellen ausführen): Wenn dies funktioniert, speichern Sie alles in einer Archivdatei ("Einfrieren"), insbesondere Wenn Sie Zellen nicht linear, nicht sequenziell und nicht offensichtlich ausführen müssen, um Fehler zu vermeiden, müssen Sie ein wenig nacharbeiten.
Ein weiteres großartiges Tool, das sehr neu ist (2015), ist Recipe , das Sumatra sehr ähnlich ist (siehe unten), aber speziell für Python entwickelt wurde. Ich weiß nicht, ob es mit Jupyter-Notizbüchern funktioniert, aber ich weiß, dass der Autor sie häufig verwendet, und ich vermute, dass es in Zukunft sein wird, wenn es derzeit nicht unterstützt wird.
Git ist auch fantastisch und nicht an Python gebunden. Es wird Ihnen nicht nur helfen, einen Überblick über alle Ihre Experimente, Codes, Datensätze, Zahlen usw. zu behalten, sondern bietet Ihnen auch Werkzeuge, mit denen Sie mithilfe einer wissenschaftlichen Methode die Spitzhacke pflegen ( git - bisect ), zusammenarbeiten ( tadeln ) und Fehler beheben ( git - bisect ) können Debugging-Methode ( Delta-Debugging genannt ). Hier ist die Geschichte eines fiktiven Forschers, der versucht, sein eigenes Experimentprotokollierungssystem zu erstellen, bis es ein Faksimile von Git wird.
Ein weiteres allgemeines Werkzeug mit jeder Sprache arbeiten (mit einem Python - API auf pypi ) ist Sumatra , die speziell auf Hilfe soll Sie tun replizierbar Forschung ( replizierbar Ziele die gleichen Ergebnisse angesichts der exakt gleichen Code und Software zu produzieren, während die Reproduzierbarkeit Ziele der produzieren gleiche Ergebnisse bei jedem Medium, das viel schwieriger und zeitaufwendiger und nicht automatisierbar ist).
So funktioniert Sumatra: Für jedes Experiment, das Sie mit Sumatra durchführen, verhält sich diese Software wie ein "Speicherzustand", der in Videospielen häufig vorkommt. Genauer gesagt, wird es sparen:
- alle von Ihnen angegebenen Parameter;
- den genauen Quellcode-Status Ihrer gesamten experimentellen Anwendung und Konfigurationsdateien;
- die Ausgabe / Diagramme / Ergebnisse und auch alle Dateien, die mit Ihrer experimentellen Anwendung erstellt wurden.
Anschließend wird eine Datenbank mit dem Zeitstempel und anderen Metadaten für jedes Ihrer Experimente erstellt, die Sie später mithilfe der webGUI crawlen können. Da Sumatra den vollständigen Status Ihrer Anwendung für ein bestimmtes Experiment zu einem bestimmten Zeitpunkt gespeichert hat, können Sie den Code, der zu einem bestimmten Zeitpunkt zu einem bestimmten Ergebnis geführt hat, jederzeit wiederherstellen. Auf diese Weise haben Sie reproduzierbare Nachforschungen zu geringen Kosten (mit Ausnahme der Speicherung, wenn Sie arbeiten an großen Datenmengen, können jedoch Ausnahmen konfigurieren, wenn Sie nicht jedes Mal alles speichern möchten.
Ein weiteres großartiges Tool ist GNOMEs Zeitgeist (zuvor in Python programmiert, jetzt aber in Vala portiert), ein umfassendes Action-Journaling-System, das alles aufzeichnet, was Sie tun, und das maschinelles Lernen verwendet, um die Beziehung zwischen Elementen für einen bestimmten Zeitraum zusammenzufassen zu Ähnlichkeiten und Nutzungsmustern, z. B. zur Beantwortung von Fragen wie "Was war für mich am relevantesten, als ich im letzten Jahr einen Monat an Projekt X gearbeitet habe?" . Interessanterweise hat Zim Desktop Wiki , eine Notizen-App ähnlich wie Evernote, ein Plugin für die Arbeit mit Zeitgeist.
Letztendlich können Sie entweder Git oder Sumatra oder eine beliebige andere Software verwenden, die Ihnen ungefähr die gleiche Reproduzierbarkeit bietet, aber Sumatra ist speziell auf wissenschaftliche Forschung zugeschnitten, sodass es einige ausgefallene Tools wie eine Web-GUI zum Crawlen bietet Ihre Ergebnisse, während Git eher auf die Codewartung zugeschnitten ist (aber es hat Debugging-Tools wie git-bisect. Wenn Ihre Experimente also Codes beinhalten, ist es möglicherweise sogar besser). Oder natürlich können Sie beide verwenden!
/ EDIT: dsign hat hier einen sehr wichtigen Punkt angesprochen : Die Reproduzierbarkeit Ihres Setups ist ebenso wichtig wie die Reproduzierbarkeit Ihrer Anwendung. Mit anderen Worten, Sie sollten mindestens eine vollständige Liste der von Ihnen verwendeten Bibliotheken und Compiler zusammen mit ihren genauen Versionen und den Details Ihrer Plattform bereitstellen .
Beim wissenschaftlichen Rechnen mit Python habe ich festgestellt, dass das Packen einer Anwendung zusammen mit den Bibliotheken einfach zu schmerzhaft ist. Daher verwende ich jetzt nur ein wissenschaftliches All-in-One-Python-Paket wie Anaconda (mit der großartigen Paketmanager- Conda ). und raten Sie den Benutzern, dasselbe Paket zu verwenden. Eine andere Lösung könnte darin bestehen, ein Skript zur automatischen Generierung einer virtuellen Datei bereitzustellen oder alles mit der kommerziellen Docker-Anwendung, wie von dsign oder dem OpenSource- Vagrant angegeben , zu verpacken (z. B. mit pylearn2-in-a-Box, die mithilfe von Vagrant eine leicht umverteilbare Datei erstellt Paket für die virtuelle Umgebung).
Schließlich können Sie eine virtuelle Maschine erstellen (siehe VirtualBox) und sogar den Status der Maschine (Snapshot) mit Ihrem Experiment speichern, um sicherzustellen, dass Sie jederzeit über eine voll funktionsfähige Umgebung verfügen. Dann können Sie diese virtuelle Maschine einfach mit allem, was enthalten ist, teilen, sodass jeder Ihr Experiment mit Ihrem genauen Setup replizieren kann. Dies ist wahrscheinlich der beste Weg, um ein softwarebasiertes Experiment zu replizieren. Container sind möglicherweise eine leichtgewichtigere Alternative, umfassen jedoch nicht die gesamte Umgebung, sodass die Replikationstreue weniger robust ist.
/ EDIT2: Hier ist ein großartiges Video, das zusammenfasst (zum Debuggen, aber dies kann auch für die Forschung angewendet werden), was für reproduzierbare Forschung von grundlegender Bedeutung ist: Ihre Experimente und die einzelnen Schritte der wissenschaftlichen Methode protokollieren, eine Art "explizites Experimentieren" .