2011-09-20 8 views
24

Uso R per l'analisi dei dati e sono molto soddisfatto. La pulizia dei dati potrebbe essere un po 'più facile, comunque. Sto pensando di imparare un'altra lingua adatta a questo compito. Nello specifico, sto cercando uno strumento da utilizzare per prendere dati grezzi, rimuovere variabili o osservazioni non necessarie e formattarlo per un caricamento facile in R. I contenuti sarebbero principalmente dati numerici e di stringa, a differenza del testo su più righe.Python o awk/sed per la pulizia dei dati

Sto considerando la combinazione awk/sed contro Python. (Riconosco che Perl sarebbe un'altra opzione, ma, se dovessi imparare un altro linguaggio completo, Python sembra essere una scelta migliore, più estensibile.)

Il vantaggio di sed/awk è che sarebbe più veloce per imparare. Lo svantaggio è che questa combinazione non è così estensibile come Python. In effetti, potrei immaginare un po 'di "strisciamento della missione" se avessi imparato Python, il che andrebbe bene, ma non il mio obiettivo.

L'altra considerazione che ho avuto è l'applicazione a set di dati di grandi dimensioni. A quanto ho capito, awk/sed funziona line-by-line, mentre Python in genere recupera tutti i dati in memoria. Questo potrebbe essere un altro vantaggio per sed/awk.

Ci sono altri problemi che mi mancano? Qualunque consiglio che tu possa offrire sarebbe apprezzato. (Ho incluso il tag R per gli utenti R di offrire le loro raccomandazioni di pulizia.)

+0

per "pulizia", ​​intendi il clipping di valori anomali o il ripristino della coerenza o qualcos'altro? con "dati" intendi numeri o stringhe, o semplicemente testo? per me questo obiettivo della domanda attuale è troppo generico. – nye17

+0

@ nye17, scusa per l'ambiguità. Ho aggiunto un po 'più di dettagli. – Charlie

+2

Io uso principalmente python per me stesso, ma se si trattasse esclusivamente di manipolazione di set di dati basati su testo, servendo come interfaccia dati per R, suggerirei fortemente perl, data la sua potente espressione regolare e flessibilità nell'affrontare il testo. – nye17

risposta

15

non rovinare la vostra avventura, ma direi di no ed è il motivo per cui qui:

  • R è Vectorised dove sed/awk non sono
  • R ha già sia Perl espressioni regolari e le espressioni regolari estese
  • R possono più facilmente fare ricorso a procedure statistiche (diciamo, imputazione) se ne avete bisogno
  • R può visualizzare, riassumere, ...

e, più importantemente: sai già R.

Detto questo, naturalmente sed/awk è ottimo per i programmi di piccole dimensioni o anche one-liner e Python è un linguaggio raffinato. Ma vorrei prendere in considerazione anche l'uso di R.

+4

Non penso che stia valutando di abbandonare R, ma piuttosto di integrarlo. – Karl

3

Consiglierei di investire a lungo termine con un linguaggio appropriato per l'elaborazione di file di dati, come Python o Perl o Ruby, rispetto alla soluzione sed/awk a breve termine. Penso che tutti gli analisti di dati necessitino di almeno tre lingue; Uso C per calcoli pesanti, perl per l'elaborazione di file di dati e R per analisi e grafici interattivi.

Ho imparato perl prima che Python fosse diventato popolare. Ho sentito grandi cose sul rubino quindi potresti provare a farlo.

Per ognuno di questi è possibile lavorare con file riga per riga; python non ha bisogno di leggere il file completo in anticipo.

+2

Certo, con l'avvertenza che "C++ potrebbe essere un C migliore di C" e allo stesso modo, i fan di Python sostengono che è meglio di Perl.Ma come regola generale, conoscere "R, * a * linguaggio di scripting e * linguaggio compilato portatile moderno *" è una buona ricetta. –

+0

@DirkEddelbuettel In effetti, sono bloccato alla fine degli anni '90, in termini di programmazione; Temo che gli studenti mi vedranno come vedo i programmatori di Fortran. – Karl

1

Vorrei raccomandare "awk" per questo tipo di elaborazione.

Presumibilmente stai solo cercando/rifiutando osservazioni non valide in semplici file di testo.

awk è velocissimo in questo compito ed è molto semplice da programmare.

Se è necessario fare qualcosa di più complesso, allora è possibile.

Python è anche una possibilità se non ti dispiace il successo in termini di prestazioni. La libreria "rpy" può essere utilizzata per integrare strettamente i componenti python e R.

10

Io uso regolarmente Python e Perl. Conosco abbastanza bene e una volta ho usato molto l'awk. Ho usato R in attacchi e sprazzi. Perl è il migliore del gruppo per la funzione e la velocità di trasformazione dei dati.

  • Perl può fare essenzialmente tutto ciò che sed e awk possono fare, ma molto di più. (In effetti, a2p e s2p, che vengono con perl, convertono gli script awk e sed in Perl.)
  • Perl è incluso con la maggior parte dei sistemi Linux/Unix. Quando non era così, c'erano buone ragioni per imparare sed e awk. Quella ragione è morta da molto tempo.
  • Perl dispone di un ricco set di moduli che forniscono molta più energia di quella che si può ottenere da awk o sed. Ad esempio, questi moduli abilitano le one-liners che invertono le sequenze del DNA, elaborano statistiche, analizzano i file CSV o calcolano MD5. (vedi http://cpan.org/ per i pacchetti)
  • Perl è essenzialmente terso come sed e awk. Per le persone come me (e, io sospetto, te), trasformare rapidamente i dati sulla riga di comando è un grande vantaggio. Python è troppo prolisso per un uso efficiente della riga di comando.

Sono onestamente incapace di pensare perché si dovrebbe imparare sed e awk su Perl.

Per la cronaca, non sono "un ragazzo Perl". Mi piace come un coltellino svizzero, non come religione.

+2

+1 per un confronto continuo da una buona base di codice. – nye17

+0

+1 per Perl. Sebbene Python possa essere più leggibile, Perl lo batte in qualsiasi momento in termini di velocità e compattezza. E le opzioni da linea di comando sono davvero una benedizione. –

+0

L'argomento 'ogni sistema Unix ha argomento Perl' si applica ancora di più a sed e awk, e questi due sono più facili da ottenere se hai bisogno (rabbrividire) di lavorare su Windoze. E ci riporta al mio 'uso giusto R' come Charlie avrebbe chiaramente R su Windows. Scrivevo molti filtri di dati in Perl, ma passavo interamente a R. –

1

Sono d'accordo con Dirk. Ho pensato alla stessa cosa e ho usato anche altre lingue. Ma alla fine sono stato nuovamente sorpreso di ciò che gli utenti più esperti fanno con R. Pacchetti come ddply o plyr potrebbero essere molto interessanti per te. Detto SQL mi ha aiutato con giocoleria dati spesso

6

Suggerirei sed/awk insieme alla ricchezza degli altri strumenti a linea di comando disponibile su piattaforme UNIX allo stesso modo: comm, TR, ordinare, tagliare, unire, grep, e ha incorporato funzionalità di shell come il looping e quant'altro. Non hai davvero bisogno di imparare un altro linguaggio di programmazione dato che R può gestire la manipolazione dei dati e se non meglio degli altri linguaggi di scripting popolari.

+0

Jeff ha ottenuto un buon punto: quando sono incollati insieme ai tubi, gli strumenti a linea di comando come quelli menzionati consentono di affettare e tagliare i dati in modo molto rapido e potente. Perl completa (piuttosto che soppiantare) molti di questi strumenti. Consultare il manuale GNU coreutils all'indirizzo http://www.gnu.org/s/coreutils/manual/html_node/index.html per un riepilogo. – Reece

+0

E, meglio ancora, R può giocare con le stesse pipe se si utilizza il favoloso file 'r' del pacchetto Littler di Jeff e Dirk. Quindi torna ad usare R :) –

+0

Il richiedente non ha specificato una piattaforma, ma questo potrebbe non essere un buon approccio per la maggioranza della popolazione che lavora su Windows. Il trasferimento di strumenti Unix all'ambiente Windows non è stato senza problemi. – user287424