Najlepszym narzędziem odtwarzalności jest rejestrowanie twoich działań, mniej więcej tak:
experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported
Można to zapisać na papierze, ale jeśli twoje eksperymenty mieszczą się w środowisku obliczeniowym, możesz użyć narzędzi obliczeniowych do częściowej lub całkowitej automatyzacji tego procesu rejestrowania (w szczególności pomagając w śledzeniu wejściowych zestawów danych, które mogą być ogromne, i wyników liczby).
Świetnym narzędziem odtwarzalności dla Pythona z niską krzywą uczenia się jest oczywiście Notatnik IPython / Jupyter (nie zapomnij o % logon i% logstart magics ). Wskazówka: aby upewnić się, że Twój notebook jest odtwarzalny, zrestartuj jądro i spróbuj uruchomić wszystkie komórki od góry do dołu (przycisk Uruchom wszystkie komórki): jeśli to działa, zapisz wszystko w pliku archiwum („zamrażanie”), w innym przypadku, szczególnie jeśli chcesz uruchamiać komórki w sposób nieliniowy, niesekwencyjny i nieoczywisty, aby uniknąć błędów, musisz trochę przerobić.
Kolejnym świetnym narzędziem, które jest bardzo aktualne (2015), jest przepis , który jest bardzo podobny do sumatry (patrz poniżej), ale stworzony specjalnie dla Pythona. Nie wiem, czy to działa z notatnikami Jupyter, ale wiem, że autor często z nich korzysta, więc sądzę, że jeśli nie jest obecnie obsługiwany, będzie w przyszłości.
Git jest także niesamowity i nie jest powiązany z Pythonem. Pomoże ci to nie tylko zachować historię wszystkich twoich eksperymentów, kodu, zestawów danych, liczb itp., Ale także zapewni ci narzędzia do utrzymywania ( git kilof ), współpracy ( obwinianie ) i debugowania ( git - bisect ) przy użyciu naukowych metoda debugowania (zwana debugowaniem delta ). Oto historia fikcyjnego badacza, który próbuje stworzyć własny system rejestrowania eksperymentów, dopóki nie stanie się on faksem Gita.
Innym ogólnym narzędziem współpracującym z dowolnym językiem (z API Pythona na pypi ) jest Sumatra , która została specjalnie zaprojektowana, aby pomóc ci w przeprowadzaniu powtarzalnych badań ( powtarzalne cele mają na celu uzyskanie tych samych wyników przy tym samym kodzie i oprogramowaniu, podczas gdy odtwarzalność ma na celu wytworzenie takie same wyniki dla dowolnego medium, które jest o wiele trudniejsze i czasochłonne, a nie automatyczne).
Oto jak działa Sumatra: dla każdego eksperymentu przeprowadzanego przez Sumatrę oprogramowanie to będzie działać jak „zapisywanie stanu gry” często występujące w grach wideo. Dokładniej, pozwoli to zaoszczędzić:
- wszystkie podane parametry;
- dokładny stan kodu źródłowego całej eksperymentalnej aplikacji i plików konfiguracyjnych;
- dane wyjściowe / wykresy / wyniki, a także każdy plik utworzony przez twoją eksperymentalną aplikację.
Następnie zbuduje bazę danych ze znacznikiem czasu i innymi metadatami dla każdego eksperymentu, które można później przeszukiwać za pomocą webGUI. Ponieważ Sumatra zapisała pełny stan aplikacji dla określonego eksperymentu w określonym momencie, możesz przywrócić kod, który dał określony wynik w dowolnym momencie, dzięki czemu masz powtarzalne badania przy niskim koszcie (z wyjątkiem przechowywania, jeśli pracujesz na ogromnych zestawach danych, ale możesz skonfigurować wyjątki, jeśli nie chcesz zapisywać wszystkiego za każdym razem).
Innym niesamowitym narzędziem jest Zeitgeist GNOME (wcześniej zakodowany w Pythonie, ale teraz przeniesiony do Vala), wszechstronny system dziennika działań, który rejestruje wszystko, co robisz, i może korzystać z uczenia maszynowego, aby podsumować przez pewien okres czasu zależność między elementami na podstawie w sprawie wzorców podobieństwa i użytkowania, np. odpowiadania na pytania typu „Co było dla mnie najbardziej istotne, kiedy pracowałem nad projektem X przez miesiąc w zeszłym roku?” . Co ciekawe, Zim Desktop Wiki , aplikacja do robienia notatek podobna do Evernote, ma wtyczkę do współpracy ze Zeitgeist.
W końcu możesz użyć Git lub Sumatry lub dowolnego innego oprogramowania, które zapewnią ci taką samą moc replikacji, ale Sumatra jest specjalnie dostosowana do badań naukowych, więc zapewnia kilka fantazyjnych narzędzi, takich jak internetowy interfejs GUI do indeksowania Twoje wyniki, podczas gdy Git jest bardziej dostosowany do obsługi kodu (ale ma narzędzia do debugowania, takie jak git-bisect, więc jeśli twoje eksperymenty obejmują kody, może być lepsze). Lub oczywiście możesz użyć obu!
/ EDIT: dsign dotknął tutaj bardzo ważnej kwestii: replikacja twojej instalacji jest równie ważna jak replikacja twojej aplikacji. Innymi słowy, powinieneś przynajmniej dostarczyć pełną listę używanych bibliotek i kompilatorów wraz z ich dokładnymi wersjami i szczegółami twojej platformy .
Osobiście w informatyce naukowej w Pythonie odkryłem, że pakowanie aplikacji wraz z bibliotekami jest po prostu zbyt bolesne, dlatego teraz po prostu używam uniwersalnego naukowego pakietu python, takiego jak Anaconda (z doskonałym menedżerem pakietów conda ), i po prostu doradzam użytkownikom korzystanie z tego samego pakietu. Innym rozwiązaniem może być dostarczenie skryptu do automatycznego generowania virtualenv lub spakowanie wszystkiego za pomocą komercyjnej aplikacji Docker, cytowanej przez dsign lub Vagrant z open source (na przykład pylearn2-in-a-box, które używają Vagrant do stworzenia łatwo redystrybucyjnej dystrybucji pakiet środowiska wirtualnego).
Wreszcie, aby naprawdę upewnić się, że masz w pełni działające środowisko za każdym razem, gdy potrzebujesz, możesz stworzyć maszynę wirtualną (patrz VirtualBox), a nawet zapisać stan maszyny (migawka) z eksperymentem gotowym do uruchomienia w środku. Następnie możesz po prostu udostępnić tę maszynę wirtualną wszystkim, co jest w niej zawarte, aby każdy mógł powtórzyć eksperyment z Twoją dokładną konfiguracją. Jest to prawdopodobnie najlepszy sposób na powtórzenie eksperymentu opartego na oprogramowaniu. Kontenery mogą być lżejszą alternatywą, ale nie obejmują całego środowiska, dlatego wierność replikacji będzie mniej niezawodna.
/ EDIT2: Oto świetne podsumowanie wideo (do debugowania, ale można to również zastosować do badań), co jest fundamentem do przeprowadzenia powtarzalnych badań: rejestrowanie eksperymentów i poszczególnych etapów metody naukowej, rodzaj „jawnego eksperymentowania” .