2013-03-27 11 views
6

Jak korzystać z pakietów R zoo lub xts z bardzo dużymi zbiorami danych? (100 GB) Wiem, że są pewne pakiety, takie jak bigrf, ff, bigmemory, które mogą poradzić sobie z tym problemem, ale musisz użyć ich ograniczonego zestawu poleceń, nie mają one funkcji zoo ani xts, a ja nie wiedzieć, jak zrobić zoo lub xts, aby z nich korzystać. Jak mogę z niego korzystać?Jak korzystać z zoo lub xts z dużymi danymi?

Widziałem, że są też inne rzeczy związane z bazami danych, takie jak sqldf i hadoopstreaming, RHadoop lub inne używane przez Revolution R. Co radzisz ?, jakakolwiek inna?

Chcę tylko pogłębić serie, oczyścić i wykonać kilka kointegracji i działek. Nie chciałbym potrzebować kodu i implementować nowych funkcji dla każdego potrzebnego polecenia, za każdym razem używając małych fragmentów danych.

Dodano: Jestem na Windows

+0

To nie jest pytanie o ilościowe finanse. Wysyłam to do Stack Overflow. – chrisaycock

+0

@skan Możesz rzucić okiem na pakiet 'mmap', który został stworzony przez Jeffa Ryana (autora xts) –

+0

Zobacz także ten post http://r.789695.n4.nabble.com/xts-timeseries-as-shared -memory-objects-with-bigmemory-package-tp3385186p3385252.html –

Odpowiedz

2

miałem podobny problem (choć grałem tylko z 9-10 GBS). Moje doświadczenie jest takie, że nie ma możliwości, aby R mogło obsłużyć tak dużo danych na własną, zwłaszcza, że ​​twój zestaw danych wydaje się zawierać dane szeregów czasowych.

Jeśli zbiór danych zawiera dużo zer, może być w stanie obsługiwać go za pomocą macierzy rzadkich - patrz Matrix pakiet (http://cran.r-project.org/web/packages/Matrix/index.html); ta instrukcja może również pochodzić poręczny (http://www.johnmyleswhite.com/notebook/2011/10/31/using-sparse-matrices-in-r/)

użyłem PostgreSQL - odpowiedni pakiet R jest RPostgreSQL (http://cran.r-project.org/web/packages/RPostgreSQL/index.html). Pozwala na zapytanie do bazy danych PostgreSQL; używa składni SQL. Dane są pobierane do R jako ramka danych. Może być powolny (w zależności od złożoności zapytania), ale jest solidny i może być przydatny do agregacji danych.

Wadą: Najpierw należy załadować dane do bazy danych. Twoje surowe dane muszą być czyste i zapisane w jakimś czytelnym formacie (txt/csv). Prawdopodobnie jest to największy problem, jeśli dane nie są już w sensownym formacie. Jeszcze przesłaniem „grzeczne” dane do DB jest prosta (patrz http://www.postgresql.org/docs/8.2/static/sql-copy.html i How to import CSV file data into a PostgreSQL table?)

Polecam przy użyciu PostgreSQL lub jakiekolwiek inne relacyjnej bazy danych dla zadania. Nie próbowałem Hadoop, ale używanie CouchDB prawie doprowadziło mnie do zakrętu. Trzymaj się starego dobrego SQL

+0

Dzięki.Jeśli ktokolwiek nadal jest zainteresowany, istnieją inne sposoby: Revoscaler może być opcją, ale musi dodać więcej funkcji. Używanie Hadoop z RHadoopem może być opcją, chociaż Hadoop Mapreduce jest dość skomplikowany. – skan

+0

Opcja macierzy rzadkiej brzmi dobrze, Skif, ale tylko w niektórych przypadkach. Jak mogę korzystać z bazy danych (na przykład SQLite) i wykonywać agregację czasu bez ładowania wszystkiego w pamięci? Czy zamiast funkcji R musiałbym używać sprzężeń SQL? – skan

+0

Tak, używając SQL i innych SQL byłoby najlepszą opcją. Być może cię zdezorientowałem - możesz wyodrębnić dane z twojego PostgreSQL na R jeden bit za jednym razem. Nie trzeba pobierać wszystkiego do R za jednym razem. Powiedz, że masz dane szeregów czasowych. Jedną rzeczą, którą możesz spróbować, jest ładowanie danych do R jednorazowo i agregowanie w ten sposób. Alternatywą jest wykonanie całej agregacji za pomocą zapytań SQL. Użyłem pierwszej opcji, kiedy pracowałem, ale druga opcja powinna być wykonalna – Skif

Powiązane problemy