Alat reproduksibilitas terbaik adalah membuat log tindakan Anda, sesuatu seperti ini:
experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported
Ini dapat ditulis di atas kertas, tetapi, jika percobaan Anda sesuai dengan kerangka kerja komputasi, Anda dapat menggunakan alat komputasi untuk mengotomatiskan sebagian atau seluruh proses logging (terutama dengan membantu Anda melacak dataset input yang bisa sangat besar, dan hasilnya angka).
Alat reproduksibilitas hebat untuk Python dengan kurva belajar yang rendah tentu saja adalah IPython / Jupyter Notebook (jangan lupa % logon dan% logstart magics ). Kiat: untuk memastikan notebook Anda dapat direproduksi, restart kernel dan coba jalankan semua sel dari atas ke bawah (tombol Jalankan Semua Sel): jika berfungsi, maka simpan semuanya dalam file arsip ("beku"), jika tidak, terutama jika Anda perlu menjalankan sel dengan cara yang tidak linier dan tidak berurutan dan tidak jelas untuk menghindari kesalahan, Anda perlu mengerjakan ulang sedikit.
Alat hebat lain yang sangat baru (2015) adalah recipy , yang sangat mirip dengan sumatra (lihat di bawah), tetapi dibuat khusus untuk Python. Saya tidak tahu apakah itu berfungsi dengan Notebook Jupyter, tapi saya tahu penulis sering menggunakannya jadi saya kira jika itu saat ini tidak didukung, itu akan di masa depan.
Git juga luar biasa, dan tidak terikat dengan Python. Ini akan membantu Anda tidak hanya untuk menyimpan riwayat semua percobaan, kode, kumpulan data, angka, dll. Tetapi juga memberi Anda alat untuk memelihara ( git pickaxe ), berkolaborasi ( menyalahkan ) dan men-debug ( git - bisect ) menggunakan ilmiah metode debugging (disebut delta debugging ). Berikut ini adalah kisah seorang peneliti fiksi yang mencoba membuat eksperimennya sendiri dengan sistem logging, hingga akhirnya menjadi faksimili Git.
Alat umum lain bekerja dengan bahasa apapun (dengan API Python pada pypi ) adalah Sumatera , yang dirancang khusus untuk membantu Anda melakukan ditiru penelitian ( direplikasi bertujuan untuk menghasilkan hasil yang sama diberikan persis kode yang sama dan software, sedangkan reproduksi bertujuan untuk menghasilkan hasil yang sama diberikan media apa pun, yang jauh lebih sulit dan memakan waktu dan tidak dapat diautomatisasi).
Inilah cara kerja Sumatera: untuk setiap percobaan yang Anda lakukan melalui Sumatera, perangkat lunak ini akan bertindak seperti "save game state" yang sering ditemukan di videogame. Lebih tepatnya, itu akan menghemat:
- semua parameter yang Anda berikan;
- status kode sumber yang tepat dari seluruh aplikasi eksperimental dan file konfigurasi Anda;
- output / plot / hasil dan juga file apa pun yang dihasilkan oleh aplikasi eksperimental Anda.
Kemudian akan membangun database dengan stempel waktu dan metadata lainnya untuk setiap percobaan Anda, yang nantinya dapat Anda jelajahi menggunakan webGUI. Karena Sumatra menyimpan status penuh aplikasi Anda untuk percobaan tertentu pada satu titik waktu tertentu, Anda dapat mengembalikan kode yang menghasilkan hasil spesifik kapan saja Anda inginkan, sehingga Anda memiliki penelitian yang dapat ditiru dengan biaya rendah (kecuali untuk penyimpanan jika Anda bekerja pada kumpulan data besar, tetapi Anda dapat mengonfigurasi pengecualian jika Anda tidak ingin menyimpan semuanya setiap kali).
Alat luar biasa lainnya adalah Zeitgeist GNOME (sebelumnya dikodekan dengan Python tetapi sekarang porting ke Vala), sebuah sistem penjurnalan tindakan semua-kompas, yang mencatat semua yang Anda lakukan dan dapat menggunakan pembelajaran mesin untuk meringkas untuk periode waktu yang Anda inginkan hubungan antar item berdasarkan pada kesamaan dan pola penggunaan, misalnya menjawab pertanyaan seperti "Apa yang paling relevan bagi saya, ketika saya sedang mengerjakan proyek X, selama satu bulan tahun lalu?" . Yang menarik, Zim Desktop Wiki , aplikasi pencatat yang mirip dengan Evernote, memiliki plugin untuk bekerja dengan Zeitgeist.
Pada akhirnya, Anda dapat menggunakan Git atau Sumatra atau perangkat lunak lain yang Anda inginkan, mereka akan memberi Anda kekuatan replikasi yang sama, tetapi Sumatra secara khusus dirancang untuk penelitian ilmiah sehingga ia menyediakan beberapa alat mewah seperti GUI web untuk dijelajahi hasil Anda, sementara Git lebih disesuaikan dengan pemeliharaan kode (tetapi memiliki alat debugging seperti git-membagi sehingga jika percobaan Anda melibatkan kode, itu sebenarnya mungkin lebih baik). Atau tentu saja Anda bisa menggunakan keduanya!
/ EDIT: dsign menyentuh poin yang sangat penting di sini: replikasi pengaturan Anda sama pentingnya dengan replikasi aplikasi Anda. Dengan kata lain, Anda setidaknya harus memberikan daftar lengkap pustaka dan kompiler yang Anda gunakan beserta versi tepatnya dan perincian platform Anda .
Secara pribadi, dalam komputasi ilmiah dengan Python, saya telah menemukan bahwa mengemas aplikasi bersama dengan perpustakaan terlalu menyakitkan, jadi saya sekarang hanya menggunakan paket python ilmiah all-in-one seperti Anaconda (dengan conda pengelola paket hebat ), dan hanya menyarankan pengguna untuk menggunakan paket yang sama. Solusi lain dapat dengan menyediakan skrip untuk secara otomatis menghasilkan virtualenv , atau untuk mengemas segala sesuatu menggunakan aplikasi Docker komersial seperti dikutip oleh dsign atau opensource Vagrant (dengan misalnya pylearn2-in-a-box yang menggunakan Vagrant untuk menghasilkan distribusi yang mudah didistribusikan kembali paket lingkungan virtual).
Akhirnya, untuk benar-benar memastikan bahwa Anda memiliki lingkungan yang berfungsi penuh setiap kali Anda butuhkan, Anda dapat membuat mesin virtual (lihat VirtualBox), dan Anda bahkan dapat menyimpan keadaan mesin (snapshot) dengan eksperimen yang siap dijalankan di dalam. Lalu, Anda bisa membagikan mesin virtual ini dengan semua yang disertakan sehingga siapa pun dapat mereplikasi percobaan Anda dengan pengaturan yang tepat. Ini mungkin cara terbaik untuk mereplikasi eksperimen berbasis perangkat lunak. Kontainer mungkin merupakan alternatif yang lebih ringan, tetapi mereka tidak termasuk seluruh lingkungan, sehingga kesetiaan replikasi akan menjadi kurang kuat.
/ EDIT2: Berikut adalah ringkasan video yang hebat (untuk debugging tetapi ini juga dapat diterapkan untuk penelitian) apa yang mendasar untuk melakukan penelitian yang dapat direproduksi: mencatat percobaan Anda dan setiap langkah lain dari metode ilmiah, semacam "eksperimen eksplisit" .