Подтвердить что ты не робот

Большой процесс обработки данных и анализ в R

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

Недавно я собрал данные из Твиттера Streaming API и в настоящее время сырой JSON сидит в текстовом файле 10 ГБ. Я знаю, что были большие успехи в адаптации R для обработки больших данных, так как бы вы справились с этой проблемой? Вот лишь несколько задач, которые я ищу:

  • Чтение и обработка данных в фрейме данных
  • Основной описательный анализ, включая интеллектуальную обработку текста (частые термины и т.д.).
  • Черчение

Можно ли использовать R полностью для этого, или мне нужно будет написать некоторый Python для синтаксического анализа данных и бросить их в базу данных, чтобы сделать случайные выборки достаточно маленькими, чтобы вписаться в R.

Просто оцените любые советы или указатели, которые вы можете предоставить. Опять же, я не буду обижаться, если вы будете описывать решения на уровне 3-го класса.

Спасибо заранее.

4b9b3361

Ответ 1

Если вам нужно работать со всем 10GB файлом за один раз, то я второй @Chase укажу на получение большего, возможно, облачного компьютера.

(API потоковой передачи Twitter возвращает довольно богатый объект: один 140-символьный твит может весить пару килобайт данных. Вы можете уменьшить накладные расходы памяти, если вы предварительно обрабатываете данные вне R, чтобы извлечь только тот контент, который вам нужен, как имя автора и текст твита.)

С другой стороны, если ваш анализ поддается сегментированию данных - например, вы хотите сначала сгруппировать твиты по автору, дате/времени и т.д. - вы могли бы рассмотреть использование Hadoop для управления R.

Конечно, Hadoop повлечет за собой некоторые накладные расходы (как настройка кластеров, так и обучение базовой модели MapReduce); но если вы планируете много работать с большими данными, вы, вероятно, захотите использовать Hadoop в своем инструменте.

Несколько указателей:

  • пример в главе 7 книги Parallel R показывает, как настроить R и Hadoop для крупномасштабного анализа твитов. В примере используется пакет RHIPE, но эти понятия применимы к любой работе Hadoop/MapReduce.

  • вы также можете получить кластер Hadoop через AWS/EC2. Проверять, выписываться Эластичный MapReduce для кластера по требованию или использовать Whirr если вам нужно больше контролировать развертывание Hadoop.

Ответ 2

Там появился новый пакет под названием colbycol, который позволяет читать только переменные, которые вы хотите получить из огромных текстовых файлов:

http://colbycol.r-forge.r-project.org/

Функция

read.table остается основной функцией импорта данных в R. Это функция неэффективна по памяти, и, по некоторым оценкам, она требует в три раза больше объема памяти, чем размер набора данных для того, чтобы для чтения в R.

Причиной такой неэффективности является то, что R хранит данные. память как столбцы (data.frame - это не более, чем список равной длины векторы), тогда как текстовые файлы состоят из строк записей. Поэтому R read.table необходимо читать целые строки, обрабатывать их индивидуально взломать токены и перенести эти токены на столбцы структуры данных.

Подход ColByCol эффективен с точки зрения памяти. Используя Java-код, tt читает вводить текстовый файл и выводить его в несколько текстовых файлов, каждый из которых содержит отдельный столбец исходного набора данных. Затем эти файлы считывается индивидуально в R, что позволяет избежать узкого места памяти R.

Подход работает лучше всего для больших файлов, разделенных на множество столбцов, особенно когда эти столбцы могут быть преобразованы в память эффективно типы и структуры данных: R-представление чисел (в некоторых случаев), а символьные векторы с повторными уровнями через факторы занимают гораздо меньше места, чем их характерное представление.

Пакет ColByCol успешно используется для чтения наборов данных с несколькими GB на ноутбуке на 2 ГБ.

Ответ 3

10 ГБ JSON довольно неэффективны для хранения и аналитических целей. Вы можете использовать RJSONIO, чтобы читать его эффективно. Затем я создам файл с отображением памяти. Вы можете использовать bigmemory (мой любимый), чтобы создавать различные типы матриц (символ, числовые и т.д.) Или хранить все в одном месте, например. используя версии HDF5 или SQL-esque (например, RSQlite).

Чем интереснее будет количество строк данных и количество столбцов.

Как и для другой инфраструктуры, например. EC2, который полезен, но подготовка файла с отображением памяти на 10 ГБ действительно не требует большой инфраструктуры. Я подозреваю, что вы работаете с несколькими десятками миллионов строк и несколькими столбцами (за пределами фактического текста Tweet). Это легко обрабатывается на ноутбуке с эффективным использованием файлов с отображением памяти. Выполнение сложной статистики потребует либо большего количества аппаратного обеспечения, более умного использования знакомых пакетов, и/или экспериментирования с некоторыми незнакомыми пакетами. Я бы посоветовал последовать более конкретному вопросу, когда вы достигнете этого этапа. Первым этапом такой работы является просто нормализация, хранение и извлечение данных. Мой ответ для этого прост: файлы с отображением памяти.

Ответ 4

Чтобы прочитать фрагменты файла JSON, вы можете использовать функцию scan(). Взгляните на аргументы skip и nlines. Я не уверен, сколько производительности вы получите против использования базы данных.