Как использовать зоопарк или xts с большими данными?

Как я могу использовать зоопарк пакетов R или xts с очень большими наборами данных? (100 ГБ) Я знаю, что есть некоторые пакеты, такие как bigrf, ff, bigmemory, которые могут решить эту проблему, но вы должны использовать их ограниченный набор команд, у них нет функций зоопарка или xts, и я не знаю как сделать зоопарк или xts для их использования. Как я могу его использовать?

Я видел, что есть и некоторые другие вещи, связанные с базами данных, такие как sqldf и hadoopstreaming, RHadoop или что-то другое, используемое Revolution R. Что вы посоветуете? Любое другое?

Я просто хочу агрегировать ряды, очистить и выполнить некоторые коинтеграции и графики. Мне бы не хотелось кодировать и реализовывать новые функции для каждой команды, которая мне нужна, каждый раз используя небольшие фрагменты данных.

Добавлено: я на Windows


person skan    schedule 27.03.2013    source источник
comment
Это не вопрос количественных финансов. Я отправляю это в Stack Overflow.   -  person chrisaycock    schedule 27.03.2013
comment
@skan Вы можете взглянуть на пакет mmap, созданный Джеффом Райаном (автором xts)   -  person CHP    schedule 27.03.2013
comment
Также см. этот пост ">r.789695.n4.nabble.com/   -  person CHP    schedule 27.03.2013
comment
Но я использую R для Windows, а nmap работает в Linux. Тогда вы думаете, что я не могу использовать такие пакеты, как ff, revoscaler или RHipe с зоопарком или выполнять коинтеграцию или вейвлет-анализ?   -  person skan    schedule 27.03.2013
comment
Пакет mmap работает в Windows. Вы хоть пакет смотрели?   -  person Joshua Ulrich    schedule 27.03.2013
comment
Да, я сделал. И я читал, что это типичная функция Unix. В Википедии написано, что есть что-то подобное для Windows под названием MapViewOfFile, но только для 32-битной версии. В любом случае Mapviewoffile выглядит не программой, а какой-то командой для API, связанной с управлением внутренней памятью.   -  person skan    schedule 28.03.2013
comment
Пакет mmap использует mmap для unix-подобных файлов и MapViewOfFile для Windows. Вам не нужно знать ничего из этого, чтобы использовать пакет, поэтому я спросил, действительно ли вы смотрели (т.е. пробовали) пакет. Есть виньетка с примерами, и у Джеффа есть несколько презентаций, гуляющих по сети.   -  person Joshua Ulrich    schedule 02.04.2013


Ответы (1)


У меня была похожая проблема (хотя я играл только с 9-10 ГБ). По моему опыту, R не может обрабатывать столько данных самостоятельно, тем более что ваш набор данных содержит данные временных рядов.

Если ваш набор данных содержит много нулей, вы можете справиться с ним, используя разреженные матрицы — см. пакет Matrix ( http://cran.r-project.org/web/пакеты/Matrix/index.html ); это руководство также может пригодиться ( //www.johnmyleswhite.com/notebook/2011/10/31/using-sparse-matrices-in-r/ )

Я использовал PostgreSQL — соответствующий пакет R — RPostgreSQL ( http://cran.r-project.org/web/packages/RPostgreSQL/index.html). Это позволяет вам запрашивать вашу базу данных PostgreSQL; он использует синтаксис SQL. Данные загружаются в R в виде фрейма данных. Он может быть медленным (в зависимости от сложности вашего запроса), но он надежен и может быть удобен для агрегирования данных.

Недостаток: сначала вам нужно будет загрузить данные в базу данных. Ваши необработанные данные должны быть чистыми и сохранены в удобном для чтения формате (txt/csv). Это, вероятно, будет самой большой проблемой, если ваши данные еще не в разумном формате. Тем не менее загружать «хорошие» данные в БД легко (см. http://www.postgresql.org/docs/8.2/static/sql-copy.html и Как импортировать данные файла CSV в таблицу PostgreSQL? )

Я бы рекомендовал использовать PostgreSQL или любую другую реляционную базу данных для вашей задачи. Я не пробовал Hadoop, но использование CouchDB почти свело меня с ума. Придерживайтесь старого доброго SQL

person Skif    schedule 24.09.2013
comment
Спасибо. Если кто-то все еще заинтересован, есть несколько других способов: Revoscaler может быть вариантом, хотя ему нужно добавить больше функций. Использование Hadoop с RHadoop может быть вариантом, хотя Hadoop Mapreduce довольно сложен. - person skan; 24.09.2013
comment
Вариант с разреженной матрицей звучит неплохо, Скиф, но только в некоторых случаях. Как я могу использовать базу данных (например, SQLite) и выполнять агрегацию времени, не загружая все в память? Нужно ли мне использовать соединения SQL вместо функций R? - person skan; 24.09.2013
comment
Да, использование соединений SQL и других SQL было бы лучшим вариантом. Возможно, я вас запутал — вы можете извлекать данные из вашего PostgreSQL в R по одному биту за раз. Нет необходимости загружать все в R за один раз. Скажем, у вас есть данные временного ряда. Одна вещь, которую вы можете попробовать, — это загружать данные в R по одному периоду времени и агрегировать таким образом. Альтернативой является выполнение всей агрегации с помощью SQL-запросов. Я использовал первый вариант, когда работал, но второй вариант тоже должен быть выполним. - person Skif; 25.09.2013