Muitos analistas de dados que eu respeito usam controle de versão. Por exemplo:
- http://github.com/hadley/
- Veja comentários em http://permut.wordpress.com/2010/04/21/revision-control-statistics-bleg/
No entanto, estou avaliando se vale a pena adotar um sistema de controle de versão como o git.
Uma breve visão geral: sou um cientista social que usa R para analisar dados para publicações de pesquisa. Atualmente, não produzo pacotes R. Meu código R para um projeto normalmente inclui alguns milhares de linhas de código para entrada, limpeza, manipulação, análise e geração de saída de dados. As publicações são tipicamente escritas usando o LaTeX.
No que diz respeito ao controle de versão, existem muitos benefícios sobre os quais eu li, mas eles parecem ser menos relevantes para o analista de dados solo.
- Backup: Eu já tenho um sistema de backup.
- Bifurcação e rebobinamento: nunca senti a necessidade de fazer isso, mas posso ver como isso poderia ser útil (por exemplo, você está preparando vários artigos de periódicos com base no mesmo conjunto de dados; você está preparando um relatório que é atualizado mensalmente etc.) )
- Colaboração: na maioria das vezes eu mesmo estou analisando dados, portanto, não recebia os benefícios de colaboração do controle de versão.
Também existem vários custos potenciais envolvidos na adoção do controle de versão:
- Hora de avaliar e aprender um sistema de controle de versão
- Um possível aumento de complexidade em relação ao meu sistema de gerenciamento de arquivos atual
No entanto, ainda sinto que estou perdendo alguma coisa. Guias gerais sobre controle de versão parecem ser dirigidos mais aos cientistas da computação do que aos analistas de dados.
Assim, especificamente em relação aos analistas de dados em circunstâncias semelhantes às listadas acima:
- O controle de versão vale o esforço?
- Quais são os principais prós e contras da adoção do controle de versão?
- Qual é uma boa estratégia para iniciar o controle de versão para análise de dados com R (por exemplo, exemplos, idéias de fluxo de trabalho, software, links para guias)?
fonte
Respostas:
Eu sinto que a resposta para sua pergunta é um retumbante sim - os benefícios de gerenciar seus arquivos com um sistema de controle de versão superam os custos de implementação desse sistema.
Vou tentar responder em detalhes a alguns dos pontos que você levantou:
Sim, e eu também. No entanto, há algumas questões a serem consideradas em relação à adequação de contar com um sistema de backup de uso geral para rastrear adequadamente arquivos importantes e ativos relacionados ao seu trabalho. No lado do desempenho:
E o mais importante:
Por exemplo, tenha um Mac e use o Time Machine para fazer backup em outro disco rígido do meu computador. O Time Machine é ótimo para recuperar arquivos estranhos ou restaurar meu sistema, se tudo der errado. No entanto, simplesmente não tem o que é preciso para ser confiável com meu importante trabalho:
Ao fazer backup, o Time Machine precisa criar uma imagem de todo o disco rígido, o que leva uma quantidade considerável de tempo. Se eu continuar trabalhando, não há garantia de que meu arquivo será capturado no estado em que estava quando iniciei o backup. Também posso chegar a outro ponto que gostaria de salvar antes da conclusão do primeiro backup.
O disco rígido no qual meus backups do Time Machine são salvos está localizado na minha máquina - isso torna meus dados vulneráveis a roubo, incêndio e outros desastres.
Com um sistema de controle de versão como o Git, posso iniciar um backup de arquivos específicos sem mais esforço do que solicitar um salvamento em um editor de texto - e o arquivo é visualizado e armazenado instantaneamente. Além disso, o Git é distribuído para que cada computador em que trabalho tenha uma cópia completa do repositório.
Isso equivale a ter meu trabalho espelhado em quatro computadores diferentes - nada menos que um ato de Deus poderia destruir meus arquivos e dados, e nesse ponto eu provavelmente não me importaria muito.
Como solista, eu também não garfo tanto. No entanto, o tempo que economizei com a opção de retroceder pagou sozinho meu investimento em aprender um sistema de controle de versão muitas e muitas vezes. Você diz que nunca sentiu a necessidade de fazer isso, mas retroceder qualquer arquivo no seu sistema de backup atual foi realmente uma opção indolor e viável?
Às vezes, o relatório parecia melhor 45 minutos, uma hora ou dois dias atrás.
Sim, mas você aprenderia uma ferramenta que pode ser indispensável se acabar colaborando com outras pessoas em um projeto.
Não se preocupe muito com isso. Os sistemas de controle de versão são como linguagens de programação - eles têm alguns conceitos-chave que precisam ser aprendidos e o resto é apenas açúcar sintático. Basicamente, o primeiro sistema de controle de versão que você aprender exigirá investir mais tempo para mudar para outro, apenas aprender como o novo sistema expressa os principais conceitos.
Escolha um sistema popular e vá em frente!
Você tem uma pasta, por exemplo,
Projects
que contém todas as pastas e arquivos relacionados às suas atividades de análise de dados? Nesse caso, aplicar um controle de versão aumentará exatamente a complexidade do seu sistema de arquivos0
. Se seus projetos estão espalhados pelo seu computador - você deve centralizá-los antes de aplicar o controle de versão e isso acabará diminuindo a complexidade do gerenciamento de seus arquivos - é por isso que temos umaDocuments
pasta, afinal.Sim! Ele oferece um enorme botão de desfazer e permite transferir facilmente o trabalho de uma máquina para outra sem se preocupar com coisas como perder a unidade USB.
O único truque que consigo pensar é um ligeiro aumento no tamanho do arquivo - mas os modernos sistemas de controle de versão podem fazer coisas absolutamente incríveis com compactação e economia seletiva, portanto esse é um ponto discutível.
Mantenha os arquivos que geram dados ou relatórios sob controle de versão, seja seletivo. Se você estiver usando algo parecido
Sweave
, armazene seus.Rnw
arquivos e não os.tex
arquivos que são produzidos a partir deles. Armazene dados brutos se for difícil recuperar novamente. Se possível, escreva e armazene um script que adquira seus dados e outro que os limpe ou modifique, em vez de armazenar alterações nos dados brutos.Quanto à aprendizagem de um sistema de controle de versão, eu recomendo o Git e este guia .
Esses sites também têm dicas e truques interessantes relacionados à execução de ações específicas com o Git:
http://www.gitready.com/
http://progit.org/blog.html
fonte
Trabalhei nove anos em uma loja de análise e introduzi a ideia de controle de versão para nossos projetos de análise nessa loja. Eu acredito muito no controle de versão, obviamente. Gostaria de fazer os seguintes pontos, no entanto.
fonte
Por uma questão de integridade, pensei em fornecer uma atualização sobre minha adoção do controle de versão.
Eu achei o controle de versão para projetos de análise de dados solo muito úteis.
Adotei o git como minha principal ferramenta de controle de versão. Comecei usando Egit no Eclipse com StatET. Agora, geralmente, apenas uso a interface da linha de comandos, embora a integração com o RStudio seja bastante boa.
Eu escrevi sobre minha experiência em configurar o controle de versão da perspectiva dos projetos de análise de dados.
Conforme declarado no post, descobri que a adoção do controle de versão teve muitos benefícios secundários na maneira como penso nos projetos de análise de dados, incluindo esclarecimentos:
fonte
Faço pesquisas econômicas usando R e LaTeX e sempre coloco meu trabalho sob controle de versão. É como ter desfazer ilimitado. Experimente o Bazaar, é um dos mais simples de aprender e usar, e se você estiver no Windows, ele possui uma interface gráfica do usuário (TortoiseBZR).
Sim, existem benefícios adicionais ao controle de versão ao trabalhar com outras pessoas, mas mesmo em projetos solo, faz muito sentido.
fonte
No momento, você provavelmente pensa em seu trabalho como desenvolvimento de código que fará o que você deseja que ele faça. Depois de adotar o uso de um sistema de controle de revisão, você pensará no seu trabalho como anotando seu legado no repositório e fazendo alterações incrementais brilhantes nele. Parece muito melhor.
fonte
Eu ainda recomendaria o controle de versão para um ato solo como você, porque ter uma rede de segurança para detectar erros pode ser uma ótima coisa.
Eu trabalhei como desenvolvedor Java solo e ainda uso o controle de origem. Se eu estiver verificando as coisas continuamente, não posso perder mais de uma hora de trabalho se algo der errado. Posso experimentar e refatorar sem me preocupar, porque, se der errado, sempre posso voltar à minha última versão de trabalho.
Se esse for o seu caso, recomendo o uso do controle de origem. Não é difícil de aprender.
fonte
Você precisa usar um software de controle de versão, caso contrário, sua análise não será perfeitamente reproduzível.
Se você deseja publicar seus resultados em algum lugar, sempre deve poder reconstruir o status de seus scripts no momento em que os produziu. Digamos que um dos revisores descubra um erro em um de seus scripts: como você saberia quais resultados foram afetados ou não?
Nesse sentido, um sistema de backup não é suficiente, porque provavelmente é feito apenas uma vez por dia e não aplica rótulos aos diferentes backups; portanto, você não sabe quais versões correspondem a quais resultados. E aprender um vcs é mais simples do que você pensa, se aprender como adicionar um arquivo e como confirmar alterações, já é suficiente.
fonte
um grande SIM.
Prós: você pode acompanhar o que fez antes. Especialmente útil para o látex, pois você pode precisar de um parágrafo antigo que foi excluído por você! Quando o computador trava ou você trabalha em um novo, você tem seus dados de volta em tempo real.
contras: você precisa fazer algumas configurações.
Basta começar a usá-lo. Eu uso o SVN da tartaruga no Windows como uma ferramenta cliente e meu departamento tem um servidor svn, coloquei todo o meu código e dados (sim, você também colocou seus dados lá!) Lá.
fonte
Recue um pouco primeiro e aprenda as vantagens de escrever pacotes R! Você diz que possui projetos com vários milhares de linhas de código, mas essas não são estruturadas ou documentadas como o código do pacote? Você obtém grandes vitórias em conformidade com os ideais do pacote, incluindo documentação para todas as funções, testes para muitos dos erros difíceis de detectar, a facilidade de escrever seus próprios conjuntos de testes, etc.
Se você não tem disciplina para produzir um pacote, não tenho certeza se você tem a disciplina para fazer o controle de revisão adequado.
fonte
Concordo com os sentimentos acima e digo que, sim, o controle de versão é útil.
Vantagens;
Em termos de conjuntos de ferramentas, eu uso o Git , juntamente com o StatEt e o Eclipse, que funcionam bem, embora você certamente não precise usar o Eclipse. Existem alguns plugins Git para Eclipse , mas geralmente uso as opções de linha de comando.
fonte
Um controle de versão para desenvolvimento solo (de qualquer tipo) é realmente interessante para:
Se você não se encontrar executando um desses dois recursos básicos de controle de versão, uma simples ferramenta de backup pode ser tudo o que você precisa.
Se você precisar desses recursos, também receberá backup (
git bundle
por exemplo)fonte
Também faço trabalhos de script solo e acho que isso mantém as coisas mais simples, em vez de torná-las mais complexas. O backup é integrado ao fluxo de trabalho de codificação e não requer um conjunto separado de procedimentos do sistema de arquivos. O tempo necessário para aprender o básico de qualquer sistema de controle de versão seria definitivamente um tempo bem gasto.
fonte
O Dropbox possui um controle de versão "ppor man" que leva você a parte do caminho por pouco esforço e com muitos benefícios extras.
fonte