Processi organizzati per la pulizia dei dati


34

Dalla mia limitata conoscenza della scienza dei dati con R, mi sono reso conto che la pulizia dei dati errati è una parte molto importante della preparazione dei dati per l'analisi.

Esistono best practice o processi per la pulizia dei dati prima dell'elaborazione? In tal caso, esistono strumenti automatizzati o semi-automatici che implementano alcune di queste migliori pratiche?


1
probabilmente è una buona idea chiarire un po ', cosa intendi con dati di pulizia , sembra un po' confuso per la mia opinione
MolbOrg

2
Spiegare ulteriormente cosa significano i dati di pulizia sarebbe utile. Nel contesto in cui lavoro, la pulizia non ha nulla a che fare con la formattazione - chiamerei semplicemente analisi / importazione - Ma piuttosto significherebbe parlare dei dati utente rumorosi e verificarne la coerenza. Le tecniche utilizzate sono specifiche del set di dati, dalle semplici regole statistiche, agli algoritmi fuzzy, specialmente quando i dati sono scarsi.
AdrianBR,

Risposte:


21

R contiene alcune normali funzioni per la manipolazione dei dati, che possono essere utilizzati per la pulizia dei dati, nella sua base di pacchetto ( gsub, transformecc), così come i vari pacchetti di terze parti, come stringr , reshape / reshape2 , e plyr / dplyr . Esempi e migliori pratiche d'uso di questi pacchetti e delle loro funzioni sono descritti nel seguente documento: http://vita.had.co.nz/papers/tidy-data.pdf .

Inoltre, offre alcuni pacchetti R specificamente focalizzati sulla pulizia dei dati e la trasformazione:

Un approccio completo e coerente alla pulizia dei dati in R, inclusi esempi e uso di editruli e pacchetti deducibili , nonché una descrizione del flusso di lavoro ( quadro ) della pulizia dei dati in R, è presentato nel seguente documento, che consiglio vivamente: http : //cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf .


2
Vorrei anche aggiungere dplyr, che è una riformulazione ottimizzata di alcuni plyrstrumenti e data.tableche è un approccio completamente diverso alla manipolazione dei dati. Entrambi di Hadley Wickham.
Shadowtalker

@ssdecontrol: sono d'accordo - ho aggiornato la risposta. Hadley è l'autore del dplyrpacchetto, ma non data.tablequello.
Aleksandr Blekh,

16

Dal mio punto di vista, questa domanda è adatta per una risposta in due passaggi. La prima parte, chiamiamola preprocessing soft , potrebbe essere presa come l'uso di diversi algoritmi di data mining per preelaborare i dati in modo tale da renderli idonei per ulteriori analisi. Si noti che questa potrebbe essere l'analisi stessa, nel caso in cui l'obiettivo sia abbastanza semplice da essere affrontato in un singolo colpo.

La seconda parte, la dura preelaborazione , in realtà viene prima di qualsiasi altro processo, e può essere presa come l'uso di semplici strumenti o script per ripulire i dati, selezionando contenuti specifici da elaborare. A questo problema, POSIX ci fornisce una serie meravigliosa di strumenti magici, che possono essere usati per comporre script di preelaborazione concisi e molto potenti.

Ad esempio, per le persone che si occupano di dati provenienti da siti Web sociali (Twitter, Facebook, ...), il recupero dei dati di solito produce file con un formato molto specifico, anche se non sempre ben strutturati, poiché potrebbero contenere campi mancanti, e quindi . In questi casi, un semplice awkscript potrebbe ripulire i dati, producendo un file di input valido per l'elaborazione successiva. Dal set di magia, si può anche notare grep, sed, cut, join, paste, sort, e tutta una moltitudine di altri strumenti.

Nel caso semplice il file di origine ha troppi problemi, potrebbe anche essere necessario produrre un insieme di metodi per ripulire i dati. In questi casi, di solito è meglio usare linguaggi di script (diversi da quelli di shell), come Python, Ruby e Perl. Ciò consente alla creazione di API di selezionare dati specifici in modo molto semplice e riutilizzabile. Tali API sono talvolta rese pubbliche dai loro scrittori, come IMDbPY , Stack Exchange API e molti altri.

Quindi, rispondendo alla domanda: ci sono delle migliori pratiche? Di solito dipende dal tuo compito. Se hai sempre a che fare con lo stesso formato di dati, di solito è meglio scrivere uno script organizzato per elaborarlo in anticipo; mentre, se hai solo bisogno di una pulizia semplice e veloce su alcuni set di dati, conta su strumenti POSIX per script di shell concisi che faranno l'intero lavoro molto più velocemente di uno script Python o giù di lì. Poiché la pulizia dipende sia dal set di dati che dai tuoi scopi, è difficile avere tutto già fatto. Tuttavia, ci sono molte API che ti mettono a metà del problema.


hm - ottieni dati, formatta dati (awk sed grep stuff), rimuovi il rumore come primo passo, quindi vai più in profondità. quindi non è difficile la preelaborazione all'inizio, se usi i tuoi
therms

@MolbOrg Sì, questo è ciò che intendevo. Ho chiamato hard preprocessing il lato di scripting e soft preprocessing l'uso di algoritmi di data mining che generalmente riducono la dimensione del problema (pulisce il database). Ho anche notato che la seconda parte, la pre-elaborazione, in realtà viene prima di qualsiasi altro processo . Se non è molto chiaro con tali termini, prenderei volentieri in considerazione altri suggerimenti per migliorare la risposta.
Rubens,

1
ah sì, non ha prestato sufficiente attenzione, preelaborazione dei dati grezzi . Atm testato - sì, perl oneliner è 3 volte più lento di grep) per stringhe da 3,5kk in 300 MB, per perl ci sono voluti 1,1 sec, per grep 0,31 sec. Ho visto l'articolo in cui i punti per cui regexp è lento, molto più lento di quanto potrebbe essere in pratica, (sospetto che lo sia anche per grep) http://swtch.com/~rsc/regexp/regexp1.html
MolbOrg

@MolbOrg Bel riferimento! AFAIK, greputilizza regex POSIX di base per impostazione predefinita e consente regex POSIX esteso quando eseguito come grep -E, e per PCRE quando eseguito come grep -P.
Rubens,

1
Questo è un ottimo post. R è eccellente per la manipolazione dei dati, ma può essere piuttosto ingombrante con la pulizia dei dati a causa della sua sintassi dettagliata per la manipolazione delle stringhe e dell'aderenza piuttosto rigida a elenchi e matrici per strutture di dati.
Shadowtalker,

11

Uno dei motivi per cui la pulizia dei dati raramente è completamente automatizzata è che c'è così tanto giudizio necessario per definire cosa significa "pulito" dato il tuo problema, i metodi e gli obiettivi particolari.

Può essere semplice come imputare i valori per eventuali dati mancanti, oppure potrebbe essere tanto complesso quanto diagnosticare errori di immissione dei dati o errori di trasformazione dei dati da precedenti processi automatizzati (ad es. Codifica, censura, trasformazione). In questi ultimi due casi, i dati sembrano buoni dall'aspetto esteriore ma sono davvero errati. Tale diagnosi spesso richiede analisi e ispezioni manuali e anche informazioni fuori banda come informazioni sulle fonti di dati e sui metodi utilizzati.

Inoltre, alcuni metodi di analisi dei dati funzionano meglio quando i dati errati o mancanti vengono lasciati vuoti (o N / A) anziché imputati o dati un valore predefinito. Questo è vero quando ci sono rappresentazioni esplicite di incertezza e ignoranza, come le funzioni di Dempster-Shafer Belief.

Infine, è utile disporre di diagnostica e metriche specifiche per il processo di pulizia. Mancano o errano i valori distribuiti casualmente o sono concentrati in alcun modo che potrebbe influenzare il risultato dell'analisi. È utile testare gli effetti di strategie o algoritmi di pulizia alternativi per vedere se incidono sui risultati finali.

Date queste preoccupazioni, sono molto sospettoso di qualsiasi metodo o processo che tratta la pulizia dei dati in modo superficiale, sprezzante o completamente automatizzato. Ci sono molti diavoli nascosti in quei dettagli e vale la pena prestare loro una seria attenzione.


1
Come commento a margine: penso che individuare dati errati causati da qualche problema più avanti nella pipeline sia un'abilità d'oro. Molte volte mi sono chiesto perché la mia analisi abbia prodotto risultati strani e quando ho guardato la pipeline ho trovato un qualche tipo di errore. Ad esempio: mi chiedevo perché tutti i miei dati fossero fortemente distorti rispetto ai prezzi elevati - MODO del mio modello mentale. Quando ho chiesto in giro, ho scoperto che alcuni subappaltatori hanno frainteso il briefing e fornito i dati per i gruppi ad alto reddito, mentre volevamo dati contrastanti ...
Christian Sauer,

Sì! Gli errori nei dati sono spesso segni di problemi di processo. Sapere dove sono stati introdotti gli errori nel processo e anche il meccanismo aiuterà molto nel processo di pulizia. Ma è ancora meglio risolvere i problemi di processo in modo che producano dati puliti (o più puliti).
MrMeritology,

5

Informazioni sulla pulizia automatica: in realtà non è possibile pulire automaticamente i dati, poiché il numero di errori e la definizione di un errore dipendono spesso dai dati. Ad esempio: la tua colonna "Entrate" potrebbe contenere valori negativi, che sono un errore: devi fare qualcosa per i casi. D'altra parte una colonna "risparmi mensili" potrebbe ragionevolmente contenere valori negativi.

Tali errori dipendono fortemente dal dominio - quindi, per trovarli, devi avere una conoscenza del dominio, qualcosa in cui gli umani eccellono, i processi automatizzati non tanto.

Dove puoi e dovresti automatizzare è progetti ripetuti. Ad esempio un rapporto che deve essere prodotto mensilmente. Se si rilevano errori, è necessario posizionare un processo automatizzato che può individuare questo tipo di errori nei mesi successivi, liberando il tempo.


5

Penso che non esista una tecnica universale per "ripulire" i dati prima di fare ricerche reali. D'altra parte, sto mirando a fare quante più ricerche riproducibili possibile. Effettuando ricerche riproducibili, se hai utilizzato tecniche di pulizia con bug o con parametri / ipotesi scarse, potrebbero essere individuate da altri.

C'è un bel pacchetto R Knitr che aiuta molto nella ricerca riproducibile.

Naturalmente, non tutte le ricerche potrebbero essere completamente riprodotte (ad esempio dati di Twitter in tempo reale), ma almeno è possibile documentare facilmente le fasi di pulizia, formulazione e preelaborazione.

Puoi controllare la mia valutazione preparata per il corso di Ricerca riproducibile a Coursera .


3

OpenRefine (precedentemente Google Refine) è un ottimo strumento in cui è possibile eseguire in modo interattivo la pulizia e le trasformazioni dei dati. Il tuo output finale può essere esportato in una varietà di formati standard (json, csv) o in qualsiasi formato personalizzato (es: wiki).

I duplicati esatti possono essere gestiti in OpenRefine ordinando + usando la funzione "blank down". Inoltre ha una funzione di clustering approssimativa di stringa (fuzzy) in cui è possibile raggruppare duplicati simili come nomi o indirizzi di società. Questa caratteristica da sola la rende fantastica.


1
Questo è uno strumento fantastico e poco segnalato.
thanks_in_advance,

2

C'è un intero corso dedicato a questo a Coursera. Potresti voler esaminare le tecniche che menzionano e la parte importante è sapere quando usare cosa.

https://www.coursera.org/learn/data-cleaning

È sempre meglio farlo manualmente invece di automatizzare poiché ogni set di dati ha i suoi problemi e problemi e non tutti i passaggi sono applicabili a tutti i set di dati.

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.