Controllo R e versione per l'analista di dati solista


155

Molti analisti di dati che rispetto usano il controllo della versione. Per esempio:

Tuttavia, sto valutando se varrebbe la pena adottare un sistema di controllo della versione come git.

Una breve panoramica: sono uno scienziato sociale che utilizza R per analizzare i dati per pubblicazioni di ricerca. Al momento non produco pacchetti R. Il mio codice R per un progetto in genere include alcune migliaia di righe di codice per l'immissione, la pulizia, la manipolazione, l'analisi e la generazione di dati. Le pubblicazioni sono in genere scritte utilizzando LaTeX.

Per quanto riguarda il controllo della versione, ho letto molti vantaggi, ma sembrano essere meno rilevanti per l'analista di dati solisti.

  • Backup: ho già un sistema di backup in atto.
  • Forking e riavvolgimento: non ho mai sentito la necessità di farlo, ma posso vedere come potrebbe essere utile (ad esempio, stai preparando più articoli di giornale in base allo stesso set di dati; stai preparando un rapporto che viene aggiornato mensilmente, ecc. )
  • Collaborazione: il più delle volte analizzo i dati da solo, quindi non ottengo i vantaggi della collaborazione del controllo delle versioni.

Ci sono anche diversi costi potenziali associati all'adozione del controllo versione:

  • Tempo di valutare e apprendere un sistema di controllo della versione
  • Un possibile aumento della complessità rispetto al mio attuale sistema di gestione dei file

Tuttavia, ho ancora la sensazione che mi manchi qualcosa. Le guide generali sul controllo delle versioni sembrano essere rivolte più agli informatici che agli analisti di dati.

Pertanto, in particolare in relazione agli analisti di dati in circostanze simili a quelle sopra elencate:

  1. Il controllo della versione vale lo sforzo?
  2. Quali sono i principali pro e contro dell'adozione del controllo versione?
  3. Qual è una buona strategia per iniziare con il controllo della versione per l'analisi dei dati con R (ad esempio, esempi, idee per il flusso di lavoro, software, collegamenti alle guide)?


@Marek Quel post è utile. Grazie molto. Mi piacerebbe ancora sapere quali problemi specifici, se presenti, riguardano l'analisi dei dati, la R e la ricerca scritta.
Jeromy Anglim,

La risposta alla tua prima domanda è "sì", ovviamente. Ma quale tipo / dimensione dei dati di solito gestisci. La maggior parte dei sistemi CVS ha difficoltà a memorizzare i dati binari.
Eduardo Leoni,

3
Potresti anche voler dare un'occhiata a questo: stackoverflow.com/questions/2286831/…
Shane

@Eduardo Lavoro con una combinazione di file di testo normale (ad es. Delimitati da tabulazioni, larghezza fissa) e binari (database, SPSS, Excel, ecc.). I dati variano: esempi tipici da 100 righe x 500 colonne a 10.000 x 20 a 2.000.000 x 20.
Jeromy Anglim

Risposte:


89

Ritengo che la risposta alla tua domanda sia un clamoroso sì: i vantaggi della gestione dei tuoi file con un sistema di controllo della versione superano di gran lunga i costi dell'implementazione di tale sistema.

Proverò a rispondere in dettaglio ad alcuni dei punti che hai sollevato:

  • Backup: ho già un sistema di backup in atto.

Sì, e anch'io I. Tuttavia, ci sono alcune domande da considerare sull'opportunità di fare affidamento su un sistema di backup per scopi generali per tenere traccia in modo adeguato dei file importanti e attivi relativi al proprio lavoro. Per quanto riguarda le prestazioni:

  • A quale intervallo il tuo sistema di backup esegue snapshot?
  • Quanto tempo ci vuole per creare un'istantanea?
  • Deve creare un'immagine dell'intero disco rigido quando si scatta un'istantanea o si potrebbe facilmente dire di eseguire il backup di due file che hanno appena ricevuto aggiornamenti critici?
  • Il tuo sistema di backup può mostrarti, con precisione millimetrica, cosa è cambiato nei tuoi file di testo da un backup all'altro?

E, soprattutto:

  • In quante posizioni vengono salvati i backup? Sono nella stessa posizione fisica del tuo computer?
  • Quanto è facile ripristinare una determinata versione di un singolo file dal sistema di backup?

Ad esempio, avere un Mac e utilizzare Time Machine per eseguire il backup su un altro disco rigido nel mio computer. Time Machine è ottimo per recuperare il file dispari o ripristinare il mio sistema in caso di problemi. Tuttavia, semplicemente non ha quello che serve per fidarsi del mio importante lavoro:

  • Durante il backup, Time Machine deve immaginare l'intero disco rigido che richiede una notevole quantità di tempo. Se continuo a funzionare, non vi è alcuna garanzia che il mio file venga acquisito nello stato in cui era quando ho avviato il backup. Potrei anche raggiungere un altro punto che vorrei salvare prima che finisca il primo backup.

  • Il disco rigido su cui sono salvati i backup di Time Machine si trova nella mia macchina, questo rende i miei dati vulnerabili a furti, incendi e altre catastrofi.

Con un sistema di controllo della versione come Git, posso avviare un backup di file specifici senza ulteriori sforzi che richiedere un salvataggio in un editor di testo e il file viene ripreso e archiviato istantaneamente. Inoltre, Git è distribuito in modo che ogni computer su cui lavoro abbia una copia completa del repository.

Ciò equivale a far riflettere il mio lavoro su quattro diversi computer: a dir poco un atto divino potrebbe distruggere i miei file e dati, a quel punto probabilmente non mi importerebbe troppo.

  • Forking e riavvolgimento: non ho mai sentito la necessità di farlo, ma posso vedere come potrebbe essere utile (ad esempio, stai preparando più articoli di giornale in base allo stesso set di dati; stai preparando un rapporto che viene aggiornato mensilmente, ecc. )

Come solista, non mi sbaglio neanche tanto. Tuttavia, il tempo che ho risparmiato avendo la possibilità di riavvolgere da solo ha ripagato il mio investimento nell'apprendimento di un sistema di controllo della versione molte, molte volte. Dici di non aver mai sentito la necessità di farlo, ma il riavvolgimento di qualsiasi file nel tuo attuale sistema di backup è stato davvero un'opzione indolore e fattibile?

A volte il rapporto sembrava solo migliore 45 minuti, un'ora o due giorni fa.

  • Collaborazione: il più delle volte analizzo i dati da solo, quindi non ottengo i vantaggi della collaborazione del controllo delle versioni.

Sì, ma impareresti uno strumento che potrebbe rivelarsi indispensabile se finissi per collaborare con altri a un progetto.

  • Tempo di valutare e apprendere un sistema di controllo della versione

Non preoccuparti troppo di questo. I sistemi di controllo della versione sono come i linguaggi di programmazione: hanno alcuni concetti chiave che devono essere appresi e il resto è solo zucchero sintattico. Fondamentalmente, il primo sistema di controllo della versione che impari richiederà di investire più tempo, il passaggio a un altro richiede solo l'apprendimento di come il nuovo sistema esprima i concetti chiave.

Scegli un sistema popolare e provalo!

  • Un possibile aumento della complessità rispetto al mio attuale sistema di gestione dei file

Hai una cartella, diciamo Projectsche contiene tutte le cartelle e i file relativi alle tue attività di analisi dei dati? In tal caso, lo schiaffo del controllo della versione aumenterà esattamente la complessità del file system 0. Se i tuoi progetti sono sparsi sul tuo computer, allora dovresti centralizzarli prima di applicare il controllo della versione e questo finirà per ridurre la complessità della gestione dei tuoi file, ecco perché abbiamo una Documentscartella dopo tutto.

  1. Il controllo della versione vale lo sforzo?

Sì! Ti dà un enorme pulsante di annullamento e ti consente di trasferire facilmente il lavoro da una macchina all'altra senza preoccuparti di cose come perdere l'unità USB.

2 Quali sono i principali pro e contro dell'adozione del controllo versione?

L'unica cosa che mi viene in mente è un leggero aumento delle dimensioni del file, ma i moderni sistemi di controllo della versione possono fare cose assolutamente sorprendenti con la compressione e il salvataggio selettivo, quindi questo è praticamente un punto controverso.

3 Qual è una buona strategia per iniziare con il controllo della versione per l'analisi dei dati con R (ad esempio, esempi, idee per il flusso di lavoro, software, collegamenti alle guide)?

Mantieni i file che generano dati o rapporti sotto il controllo della versione, sii selettivo. Se stai usando qualcosa del genere Sweave, archivia i tuoi .Rnwfile e non i .texfile che vengono prodotti da loro. Conservare i dati non elaborati se sarebbe una nuova acquisizione. Se possibile, scrivi e archivia uno script che acquisisce i tuoi dati e un altro che li pulisce o li modifica anziché archiviare le modifiche ai dati non elaborati.

Per quanto riguarda l'apprendimento di un sistema di controllo della versione, consiglio vivamente Git e questa guida .

Questi siti Web offrono anche alcuni suggerimenti e trucchi per eseguire azioni specifiche con Git:


1
+1 per la risposta a "Un possibile aumento della complessità rispetto al mio attuale sistema di gestione dei file". Il controllo versione ridurrà potenzialmente il livello di complessità se gli elementi inseriti nel controllo versione insieme a un livello granulare di controllo sui punti di istantanea nel processo di backup (Fornisci anche una descrizione che è molto utile per il ripristino non per data ma per funzionalità o modifica ).
Christopher Hackett,

23

Ho lavorato per nove anni in un negozio di analisi e ho introdotto l'idea di controllo delle versioni per i nostri progetti di analisi in quel negozio. Sono un grande sostenitore del controllo delle versioni, ovviamente. Vorrei tuttavia sottolineare i seguenti punti.

  1. Il controllo della versione potrebbe non essere appropriato se si stanno effettuando analisi per un possibile utilizzo in tribunale. Non sembra che questo valga per te, ma avrebbe reso i nostri clienti molto nervosi nel sapere che ogni versione di ogni sceneggiatura che avevamo mai prodotto era potenzialmente rilevabile. Abbiamo usato il controllo di versione per i moduli di codice che sono stati riutilizzati in più impegni, ma per tale motivo non abbiamo usato il controllo di versione per codice specifico dell'incarico.
  2. Abbiamo riscontrato che il vantaggio maggiore del controllo della versione derivava dalla memorizzazione di moduli di codice predefiniti che sono stati riutilizzati in più progetti. Ad esempio, potresti avere un particolare modo preferito di elaborare alcuni estratti di Censimento PUMS. Organizza questo codice in una directory e inseriscilo nel tuo VCS. Puoi quindi verificarlo in ogni nuovo progetto ogni volta che ne hai bisogno. Può anche essere utile creare rami specifici di un determinato codice per un determinato progetto, se si sta eseguendo un'elaborazione speciale di un determinato set di dati comune per quel progetto. Quindi, quando hai finito con quel progetto, decidi quanto del tuo codice speciale ricollegare al ramo principale.
  3. Non mettere i dati elaborati nel controllo versione. Solo codice. Il nostro obiettivo era sempre di avere un set completo di script in modo da poter eliminare tutti i nostri dati elaborati internamente, premere un pulsante e far rigenerare da zero ogni numero per il report. Questo è l'unico modo per essere sicuri di non avere vecchi bug che vivono misteriosamente nei tuoi dati.
  4. Per assicurarsi che i risultati siano davvero completamente riproducibili, non è sufficiente solo conservare il codice in un VCS. È fondamentale tenere attentamente traccia di quale versione di quali moduli sono stati utilizzati per creare un determinato deliverable.
  5. Per quanto riguarda il software, ho avuto buona fortuna con Subversion. È facile da configurare e amministrare. Riconosco il fascino dei nuovi VCS distribuiti, come git e mercurial, ma non sono sicuro che ci siano dei forti vantaggi se lavori da solo. D'altra parte, non conosco alcun aspetto negativo nell'usarli, non ho ancora lavorato con loro in un ambiente di analisi.

18

Per completezza, ho pensato di fornire un aggiornamento sulla mia adozione del controllo della versione.

Ho trovato molto utile il controllo della versione per i progetti di analisi dei dati personali.

Ho adottato git come strumento di controllo della versione principale. Ho iniziato a usare Egit in Eclipse con StatET. Ora in genere utilizzo l'interfaccia della riga di comando, sebbene l'integrazione con RStudio sia abbastanza buona.

Ho scritto un blog sulla mia esperienza di configurazione con il controllo della versione dal punto di vista dei progetti di analisi dei dati.

Come indicato nel post, ho scoperto che l'adozione del controllo della versione ha avuto molti vantaggi secondari nel modo in cui penso ai progetti di analisi dei dati, tra cui chiarire:

  • la distinzione tra file sorgente e derivato
  • la natura delle dipendenze:
    • dipendenze tra elementi di codice
    • dipendenze tra file all'interno di un progetto
    • e dipendenze con file e programmi esterni al repository
  • la natura di un repository e le modalità di suddivisione dei repository
  • la natura del commit e della documentazione delle modifiche e delle tappe del progetto

2
Ho iniziato anche con l'interfaccia a riga di comando (ed è buono a sapersi) ma sono anche passato principalmente all'uso di RStudio per le mie esigenze di R / git. Fornisce la maggior parte delle cose che voglio, ma a volte ho bisogno di aprire un terminale per fare alcune cose che non sono direttamente integrate nell'interfaccia.
Dason,

17

Faccio ricerche economiche usando R e LaTeX e metto sempre il mio lavoro sotto controllo della versione. È come avere undo illimitato. Prova Bazaar, è uno dei più semplici da imparare e usare e se sei su Windows ha un'interfaccia utente grafica (TortoiseBZR).

Sì, ci sono ulteriori vantaggi nel controllo delle versioni quando si lavora con altri, ma anche su progetti solisti ha molto senso.


9

In questo momento, probabilmente pensi al tuo lavoro come allo sviluppo di codice che farà quello che vuoi che faccia. Dopo aver adottato un sistema di controllo delle revisioni, penserai al tuo lavoro di scrivere l'eredità nel repository e apportare brillanti modifiche incrementali ad esso. È molto meglio.


7

Consiglierei comunque il controllo della versione per un atto solista come te perché avere una rete di sicurezza per catturare errori può essere una grande cosa.

Ho lavorato come sviluppatore Java solista e utilizzo ancora il controllo del codice sorgente. Se controllo continuamente le cose non posso perdere più di un'ora di lavoro se qualcosa va storto. Posso sperimentare e refactor senza preoccuparmi, perché se va storto posso sempre tornare alla mia ultima versione funzionante.

Se questo è il tuo caso, ti consiglierei di usare il controllo del codice sorgente. Non è difficile da imparare.


7

Devi usare un software di controllo della versione, altrimenti la tua analisi non sarà perfettamente riproducibile.

Se vuoi pubblicare i tuoi risultati da qualche parte, dovresti sempre essere in grado di ricostruire lo stato dei tuoi script nel momento in cui li hai prodotti. Diciamo che uno dei revisori scopre un errore in uno dei tuoi script: come faresti a sapere quali risultati vengono effettuati e quali no?

In questo senso, un sistema di backup non è sufficiente perché probabilmente viene eseguito solo una volta al giorno e non applica etichette ai diversi backup, quindi non si sa a quali versioni corrispondono i risultati. E imparare un vcs è più semplice di quello che pensi, se imparare come aggiungere un file e come eseguire le modifiche è già sufficiente.


1
Fai una discussione forte. Tuttavia, penso che la ricerca riproducibile sia possibile senza un sistema formale di controllo della versione. È solo meno elegante e meno flessibile. Provo a scrivere il codice R usando i principi della programmazione alfabetica in modo che l'output R sia automaticamente integrato nel documento finale. I file associati a questo prodotto finale possono quindi essere salvati.
Jeromy Anglim,

che ti aiuta a riapplicare l'intera analisi sui tuoi dati, ma non ti dice quali dei tuoi precedenti risultati sono stati influenzati dall'errore.
dalloliogm,

6

Il controllo della versione vale lo sforzo?

un grande SÌ.

Quali sono i principali pro e contro dell'adozione del controllo versione?

pro: puoi tenere traccia di ciò che hai fatto prima. Particolarmente utile per il lattice, in quanto potrebbe essere necessario un vecchio paragrafo che è stato eliminato da te! Quando il computer si arresta in modo anomalo o se ne lavori su uno nuovo, i tuoi dati tornano al volo.

contro: devi fare alcune impostazioni.

Qual è una buona strategia per iniziare con il controllo della versione per l'analisi dei dati con R (ad esempio, esempi, idee per il flusso di lavoro, software, collegamenti alle guide)?

Inizia a usarlo. Uso tartaruga SVN su Windows come strumento client e il mio dipartimento ha un server svn, ho messo tutto il mio codice e i miei dati (sì, ci metti anche i tuoi dati lì!) Lì.


6

Fai un passo indietro e scopri i vantaggi della scrittura di pacchetti R! Dici di avere progetti con diverse migliaia di righe di codice, eppure questi non sono strutturati o documentati come lo è il codice del pacchetto? Ottieni grandi vittorie con la conformità agli ideali del pacchetto, compresa la documentazione per ogni funzione, i test per molti dei soliti errori difficili da rilevare, la possibilità di scrivere suite di test personalizzate ecc.

Se non hai la disciplina per produrre un pacchetto, non sono sicuro che hai la disciplina per fare il controllo di revisione adeguato.


3
È tutto un viaggio, in particolare quando si proviene da un ambiente non IT. Ora sto usando Git, ed è fantastico. Sto anche iniziando a dilettarmi con l'infrastruttura del pacchetto R. Per quanto riguarda le migliaia di righe di codice, ciò spesso deriva da grandi quantità di elaborazioni di dati idiosincratici e dalla creazione di grafici e ipotesi guidati da ipotesi. Mentre l'esperienza rende più facile vedere le astrazioni, trovo che una certa quantità di codice idiosincratico sia solo una parte di ciò che significa analizzare set di dati psicologici. Penso che questo aiuti a spiegare la popolarità del pacchetto ProjectTemplate e Sweave.
Jeromy Anglim,

5

Concordo con i sentimenti precedenti e direi che Sì, il controllo della versione è utile.

vantaggi;

  • mantieni la tua ricerca registrata e sottoposta a backup, (tagging)
  • ti consente di provare diverse idee e tornare indietro se non funzionano (ramificazione)
  • Puoi condividere il tuo lavoro con altre persone e loro possono condividere le loro modifiche con te (so che non l'hai specificato, ma è fantastico)
  • La maggior parte dei sistemi di controllo versione semplifica la creazione di un pacchetto compresso per tutti i file sotto controllo a un certo punto, ad esempio nel momento in cui invii un articolo per la pubblicazione, ciò può essere d'aiuto quando altri riesaminano i tuoi articoli. (puoi farlo manualmente, ma perché inventare questi processi quando il controllo versione lo fa)

In termini di set di strumenti, io uso Git , insieme a StatEt ed Eclipse che funziona bene, anche se certamente non devi usare Eclipse. Esistono alcuni plugin Git per Eclipse , ma generalmente utilizzo le opzioni della riga di comando.


Uso StatET ed Eclipse per R; quindi forse proverò prima Git.
Jeromy Anglim,

4

Una versione Control per lo sviluppo solista (di qualsiasi tipo) è davvero interessante per:

  • esplorare la storia e confrontare il lavoro attuale con gli impegni passati
  • diramazione e tentativo di versioni diverse per lo stesso set di file

Se non ti vedi fare una di quelle due funzioni di controllo della versione di base, un semplice strumento di backup potrebbe essere tutto ciò di cui hai bisogno.
Se hai bisogno di quelle funzionalità, otterrai anche il backup (con git bundlead esempio)


4

Faccio anche il lavoro di scripting da solista e trovo che mantenga le cose più semplici, piuttosto che renderle più complesse. Il backup è integrato nel flusso di lavoro di codifica e non richiede un set separato di procedure del file system. Il tempo necessario per apprendere le basi di qualsiasi sistema di controllo della versione sarebbe sicuramente tempo ben speso.


4

Dropbox ha un controllo della versione di "ppor man" che ti fa prendere parte alla strada lì per un piccolo sforzo con molti vantaggi extra.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.