2013-03-27 11 views
6

Come posso utilizzare i pacchetti R zoo o xts con set di dati molto grandi? (100 GB) So che ci sono alcuni pacchetti come bigrf, ff, bigmemory che possono gestire questo problema, ma devi usare il loro set limitato di comandi, non hanno le funzioni di zoo o xts e io no sapere come fare zoo o xts per usarli. Come posso usarlo?Come utilizzare zoo o xts con grandi dati?

Ho visto che ci sono anche alcune altre cose, legate ai database, come sqldf e hadoopstreaming, RHadoop, o qualche altro usato da Revolution R. Che cosa consigli ?, nessun altro?

Voglio solo aggreare serie, pulire ed eseguire alcune cointegrazioni e grafici. Non vorrei avere bisogno di codificare e implementare nuove funzioni per ogni comando di cui ho bisogno, usando ogni volta piccole parti di dati.

Aggiunto: Sono su Windows

+0

Questa non è una domanda di finanza quantitativa. Sto inviando questo a Stack Overflow. – chrisaycock

+0

@skan Puoi dare un'occhiata al pacchetto 'mmap' che è stato creato da Jeff Ryan (autore di xts) –

+0

Vedi anche questo post http://r.789695.n4.nabble.com/xts-timeseries-as-shared -memory-objects-with-bigmemory-package-tp3385186p3385252.html –

risposta

2

Ho avuto un problema simile (anche se ero solo giocando con 9-10 GB). La mia esperienza è che non è possibile che R possa gestire così tanti dati da solo, specialmente dal momento che il set di dati sembra contenere dati di serie temporali.

Se il set di dati contiene un sacco di zeri, si può essere in grado di gestirlo con matrici sparse - vedere pacchetto Matrix (http://cran.r-project.org/web/packages/Matrix/index.html); questo manuale può anche tornare utile (http://www.johnmyleswhite.com/notebook/2011/10/31/using-sparse-matrices-in-r/)

ho usato PostgreSQL - il pacchetto R rilevante è RPostgreSQL (http://cran.r-project.org/web/packages/RPostgreSQL/index.html). Ti permette di interrogare il tuo database PostgreSQL; usa la sintassi SQL. I dati vengono scaricati in R come un dataframe. Può essere lento (a seconda della complessità della query), ma è robusto e può essere utile per l'aggregazione dei dati.

Inconveniente: è necessario caricare prima i dati nel database. I tuoi dati grezzi devono essere puliti e salvati in un formato leggibile (txt/csv). Questo è probabilmente il problema più grande se i tuoi dati non sono già in un formato ragionevole. Eppure, il caricamento dei dati "ben educati" nel DB è facile (vedi http://www.postgresql.org/docs/8.2/static/sql-copy.html e How to import CSV file data into a PostgreSQL table?)

mi consiglia di utilizzare PostgreSQL o qualsiasi altro database relazionale per il vostro compito. Non ho provato Hadoop, ma l'utilizzo di CouchDB mi ha quasi fatto girare intorno alla curva. Attenersi al buon vecchio SQL

+0

Grazie.Se qualcuno è ancora interessato ci sono altri modi: Revoscaler potrebbe essere un'opzione, quindi è necessario aggiungere più funzioni. Usare Hadoop con RHadoop potrebbe essere un'opzione, sebbene Hadoop Mapreduce sia piuttosto complicato. – skan

+0

L'opzione matrice sparsa suona bene, Skif, ma solo per alcuni casi. Come posso utilizzare il database (ad esempio SQLite) ed eseguire un'aggregazione temporale senza caricare tutto sulla memoria? Dovrei usare i join SQL invece delle funzioni di R? – skan

+0

Sì, usare i join SQL e altri SQL sarebbe l'opzione migliore. Forse ti ho confuso: puoi estrarre i dati dal tuo PostgreSQL in R un bit alla volta. Non è necessario scaricare tutto in R in una volta sola. Supponiamo che tu abbia dati di serie temporali. Una cosa che puoi provare è caricare i dati in R un periodo di tempo alla volta e aggregarli in questo modo. L'alternativa è fare tutta l'aggregazione tramite query SQL. Ho usato la prima opzione quando ho lavorato, ma anche la seconda opzione dovrebbe essere fattibile – Skif

Problemi correlati