A melhor ferramenta de reprodutibilidade é fazer um log de suas ações, algo como isto:
experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported
Isso pode ser anotado em um documento, mas, se suas experiências se encaixarem em uma estrutura computacional, você pode usar ferramentas computacionais para automatizar parcial ou completamente esse processo de registro (principalmente ajudando a rastrear os conjuntos de dados de entrada que podem ser enormes e a saída figuras).
Uma ótima ferramenta de reprodutibilidade para Python com baixa curva de aprendizado é o IPython / Jupyter Notebook (não se esqueça das magias % logon e% logstart ). Dica: para garantir a reprodutibilidade do seu notebook, reinicie o kernel e tente executar todas as células de cima para baixo (botão Executar todas as células): se funcionar, salve tudo em um arquivo ("congelamento"); se você precisar executar células de maneira não linear, seqüencial e não óbvia para evitar erros, precisará refazer um pouco.
Outra ótima ferramenta muito recente (2015) é o recebimento , que é muito parecido com o sumatra (veja abaixo), mas feito especificamente para o Python. Não sei se ele funciona com os Jupyter Notebooks, mas sei que o autor os usa com frequência, então acho que, se não houver suporte no momento, será no futuro.
O Git também é incrível, e não está vinculado ao Python. Ele ajudará não apenas a manter um histórico de todos os seus experimentos, códigos, conjuntos de dados, figuras, etc., mas também fornecerá ferramentas para manter ( git pickaxe ), colaborar ( culpar ) e depurar ( git - bisect ) usando um método científico. método de depuração (chamado depuração delta ). Aqui está uma história de um pesquisador fictício tentando criar seu próprio sistema de registro de experimentos, até que ele acaba sendo um fac-símile do Git.
Outra ferramenta geral trabalhar com qualquer linguagem (com uma API Python em pypi ) é Sumatra , que é projetado especificamente para ajudar você a fazer replicável pesquisa ( replicáveis pretende produzir os mesmos resultados dado exatamente o mesmo código e softwares, enquanto reprodutibilidade objetivos para produzir o mesmos resultados em qualquer meio, o que é muito mais difícil, demorado e não automatizável).
Aqui está como o Sumatra funciona: para cada experimento que você realiza através do Sumatra, esse software age como um "estado de jogo salvo", freqüentemente encontrado em videogames. Mais precisamente, ele salvará:
- todos os parâmetros que você forneceu;
- o estado exato do código fonte de todo o seu aplicativo experimental e arquivos de configuração;
- a saída / plotagens / resultados e também qualquer arquivo produzido por sua aplicação experimental.
Ele criará um banco de dados com o carimbo de data e hora e outros metadados para cada uma das suas experiências, que você poderá rastrear posteriormente usando a webGUI. Como o Sumatra salvou o estado completo do seu aplicativo para um experimento específico em um ponto específico no tempo, você pode restaurar o código que produziu um resultado específico a qualquer momento que desejar, para ter uma pesquisa replicável a um custo baixo (exceto armazenamento, se você trabalha em grandes conjuntos de dados, mas pode configurar exceções se não quiser salvar tudo sempre).
Outra ferramenta incrível é o Zeitgeist do GNOME (anteriormente codificado em Python, mas agora portado para Vala), um sistema de diário de ação abrangente, que registra tudo o que você faz e pode usar o aprendizado de máquina para resumir por um período que você deseja que o relacionamento entre itens seja baseado. sobre padrões de similaridade e uso, por exemplo, respondendo a perguntas como "O que foi mais relevante para mim, enquanto eu trabalhava no projeto X, durante um mês no ano passado?" . Curiosamente, o Zim Desktop Wiki , um aplicativo de anotações semelhante ao Evernote, possui um plug-in para trabalhar com o Zeitgeist.
No final, você pode usar o Git, o Sumatra ou qualquer outro software que desejar, eles fornecerão aproximadamente o mesmo poder de replicabilidade, mas o Sumatra é especificamente adaptado para pesquisa científica, por isso fornece algumas ferramentas sofisticadas, como uma GUI da Web para rastrear seus resultados, enquanto o Git é mais adaptado à manutenção de código (mas possui ferramentas de depuração como o git-bisect, portanto, se seus experimentos envolverem códigos, pode ser melhor). Ou é claro que você pode usar os dois!
/ EDIT: dsign tocou em um ponto muito importante aqui: a replicabilidade da sua configuração é tão importante quanto a replicabilidade do seu aplicativo. Em outras palavras, você deve pelo menos fornecer uma lista completa das bibliotecas e compiladores que você usou, juntamente com suas versões exatas e os detalhes da sua plataforma .
Pessoalmente, na computação científica com Python, descobri que empacotar um aplicativo junto com as bibliotecas é muito doloroso, portanto, agora apenas uso um pacote python científico completo como o Anaconda (com o ótimo gerenciador de pacotes conda ), e apenas aconselhe os usuários a usar o mesmo pacote. Outra solução poderia ser fornecer um script para gerar automaticamente um virtualenv ou empacotar tudo usando o aplicativo comercial do Docker, conforme citado por dsign ou o Vagrant de código aberto (por exemplo, pylearn2-in-a-box que usa o Vagrant para produzir um redistribuível facilmente pacote de ambiente virtual).
Por fim, para realmente garantir que você tenha um ambiente totalmente funcional sempre que precisar, você pode criar uma máquina virtual (consulte VirtualBox) e até salvar o estado da máquina (instantâneo) com o seu experimento pronto para ser executado dentro. Depois, você pode compartilhar esta máquina virtual com tudo incluído, para que qualquer pessoa possa replicar sua experiência com sua configuração exata. Esta é provavelmente a melhor maneira de replicar um experimento baseado em software. Os contêineres podem ser uma alternativa mais leve, mas não incluem todo o ambiente, para que a fidelidade à replicação seja menos robusta.
/ EDIT2: Aqui está um ótimo vídeo resumindo (para depuração, mas isso também pode ser aplicado à pesquisa) o que é fundamental para fazer pesquisas reproduzíveis: registrando seus experimentos e os passos do método científico, uma espécie de "experimentação explícita" .