Найкращий інструмент відтворюваності - це скласти журнал ваших дій приблизно так:
experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported
Це можна записати на папері, але, якщо ваші експерименти вписуються в обчислювальні рамки, ви можете використовувати обчислювальні інструменти, щоб частково або повністю автоматизувати цей процес реєстрації даних (особливо, допомагаючи відстежувати вхідні набори даних, які можуть бути величезними, і вихід фігури).
Прекрасним інструментом відтворюваності для Python з низькою кривою навчання є звичайно ноутбук IPython / Jupyter (не забувайте про магію % logon та% logstart ). Порада: щоб переконатися, що ваш ноутбук відтворюється, перезапустіть ядро і спробуйте запустити всі комірки зверху вниз (кнопка Виконати всі клітини): якщо вона працює, то збережіть все в архівному файлі ("заморожування"), інше, особливо якщо вам потрібно запускати клітинки нелінійним та не послідовним та неочевидним способом, щоб уникнути помилок, вам потрібно трохи переробити.
Ще одним чудовим інструментом, який зовсім недавно (2015 р.) Є реципієнт , який дуже схожий на сумару (див. Нижче), але зроблений спеціально для Python. Я не знаю, чи працює він із ноутбуками Юпітера, але я знаю, що автор їх часто використовує, тому я здогадуюсь, що якщо він наразі не підтримується, це буде в майбутньому.
Git також приголомшливий, і він не прив'язаний до Python. Це допоможе вам не тільки зберегти історію всіх ваших експериментів, коду, наборів даних, фігур тощо, але й надасть вам інструменти для підтримки ( git pickaxe ), співпраці ( вини ) та налагодження ( git - бісект ) за допомогою наукової роботи метод налагодження (називається дельта налагодження ). Ось історія вигаданого дослідника, який намагається зробити власну систему реєстрації експериментів, доки вона не стане факсимілею Git.
Іншим загальним інструментом, що працює з будь-якою мовою (з API Python на pypi ), є Суматра , який спеціально розроблений для того, щоб допомогти вам виконати повторювані дослідження ( реплікація має на меті отримати ті ж результати, що даються з точно таким же кодом та програмним забезпеченням, тоді як відтворюваність має на меті створення однакові результати дають будь-який засіб, який набагато складніше і забирає багато часу та не є автоматизованим).
Ось як працює Суматра: для кожного експерименту, який ви проводите через Суматру, це програмне забезпечення буде діяти як "збереження ігрового стану", яке часто зустрічається у відеоіграх. Точніше, це заощадить:
- всі надані вами параметри;
- точний стан вихідного коду всієї вашої експериментальної програми та файлів конфігурації;
- вихід / графіки / результати, а також будь-який файл, створений вашою експериментальною програмою.
Потім буде створена база даних із позначкою часу та іншими метаданими для кожного з ваших експериментів, яку ви згодом можете сканувати за допомогою webGUI. Оскільки Sumatra зберегла повний стан вашої заявки для конкретного експерименту в один конкретний момент часу, ви можете відновити код, який дав конкретний результат у будь-який момент, коли вам захочеться, таким чином, у вас є повторювані дослідження з низькою вартістю (за винятком зберігання, якщо ви працюєте над величезними наборами даних, але ви можете налаштувати винятки, якщо не хочете щоразу зберігати все).
Іншим дивовижним інструментом є Zeitgeist GNOME (раніше кодований в Python, але тепер перенесений на Vala), всеохоплююча система журналу дій, яка записує все, що ви робите, і вона може використовувати машинне навчання для підбиття підсумків за певний проміжок часу, на який ви хочете відносини між предметами. щодо подібності та форм використання, наприклад, відповідаючи на запитання на кшталт "Що для мене було найбільш актуальним, коли я працював над проектом X протягом місяця минулого року?" . Цікаво, що Zim Desktop Wiki , додаток для запису приміток, подібний до Evernote, має плагін для роботи з Zeitgeist.
Зрештою, ви можете використовувати або Git, або Sumatra, або будь-яке інше програмне забезпечення, яке ви хочете, вони забезпечать вам приблизно таку ж здатність до копіювання, але Sumatra спеціально розроблена для наукових досліджень, тому вона пропонує кілька фантазійних інструментів, як веб-інтерфейс GUI для сканування ваші результати, в той час як Git більш орієнтований на підтримку коду (але він має налагоджувальні засоби, такі як git-bisect, тому якщо ваші експерименти включають коди, це може бути насправді краще). Або звичайно ви можете використовувати і те, і інше!
/ EDIT: dsign торкнувся тут дуже важливого моменту: копіюваність вашої установки настільки ж важлива, як і копічність вашої програми. Іншими словами, ви повинні принаймні надати повний список використаних вами бібліотек та компіляторів, а також їх точні версії та деталі вашої платформи .
Особисто я в наукових обчисленнях з Python виявив, що упаковка додатка разом із бібліотеками є занадто болючою, тому я зараз просто використовую всебічний науковий пакет python, такий як Anaconda (з чудовим конда- менеджером пакунків ), і просто порадити користувачам використовувати той самий пакет. Іншим рішенням може бути створення сценарію для автоматичного генерування virtualenv або пакування всього, використовуючи комерційну програму Docker, як це цитується dsign або відкритим вихідним кодом Vagrant (з прикладом pylearn2-in-a-box, який використовує Vagrant для створення легко перерозподіляється пакет віртуального середовища).
Нарешті, щоб дійсно забезпечити, що у вас є повністю робоче середовище кожного разу, коли вам потрібно, ви можете зробити віртуальну машину (див. VirtualBox), і навіть можете зберегти стан машини (знімок), коли ваш експеримент буде готовий запуститися всередину. Тоді ви можете просто поділитися цією віртуальною машиною з усім включеним, щоб кожен міг повторити ваш експеримент із точним налаштуванням. Це, мабуть, найкращий спосіб копіювання експерименту на основі програмного забезпечення. Контейнери можуть бути більш легкою альтернативою, але вони не включають все середовище, так що вірність тиражування буде менш надійною.
/ EDIT2: Ось чудове відео, що підсумовує (для налагодження, але це також можна застосувати до досліджень), що є основним для відтворюваного дослідження: реєстрація ваших експериментів та інших кроків наукового методу, свого роду "явний експеримент" .