Опции анализа неосновных данных


18

Я профессионально использую SAS около 5 лет. Он установлен на моем ноутбуке, и мне часто приходится анализировать наборы данных с 1000-2000 переменных и сотнями тысяч наблюдений.

Я искал альтернативы SAS, которые позволили бы мне проводить анализ наборов данных аналогичного размера. Мне любопытно, что другие люди используют для таких ситуаций, как это. Это, конечно, не «большие данные» в том виде, в каком они используются сегодня. Мои наборы данных не настолько малы, чтобы хранить их в памяти. Мне нужно решение, которое может применять алгоритмы к данным, хранящимся на жестком диске. Это то, что я исследовал безрезультатно:

  1. R - BigMemory может создавать матрицы, хранящиеся вне памяти, но элементы должны быть в том же режиме. Я работаю с данными, которые почти на 50/50 разделены между символами и цифрами. Пакет FF становится ближе к тому, что мне нужно, но я не совсем понимаю, какие процедуры совместимы с ним. Я думаю, что поддержка несколько ограничена.
  2. Панды - Я был очень взволнован по поводу Pythonic альтернативы R. Однако, он также должен хранить все данные в памяти.
  3. Revolution R - этот показывает много обещаний. У меня есть копия на моем домашнем компьютере (бесплатная, если вы зарегистрируетесь в Kaggle), и я еще не опробовал ее как жизнеспособную альтернативу SAS. Комментарии к Revolution R как альтернативе SAS высоко ценятся.

Благодарность

ОБНОВЛЕНИЕ 1

Редактирование, чтобы добавить, что я ищу реальные, практические решения, которые люди успешно использовали. По большей части SAS позволяет мне просматривать большие файлы, не беспокоясь об ограничениях памяти. Однако SAS реализован, они выяснили, как сделать управление памятью прозрачным для пользователя. Но я с тяжелым сердцем использовал SAS для своей работы (я должен) и ЛЮБЛЮ альтернативу FOSS, которая позволяет мне работать с «большими» данными, не задумываясь о том, где эти данные расположены. конкретное время (в памяти или на диске).

Самые близкие вещи, с которыми я столкнулся, - это пакет FF от R и кое-что на горизонте для Python под названием Blaze . И все же эти проблемы существуют уже много лет, так что же делают аналитики в это время? Как они решают эти проблемы с ограничениями памяти? Большинство предлагаемых решений:

  • Получите больше оперативной памяти - это не очень хорошее решение, IMO. Легко найти набор данных, который может превышать объем оперативной памяти, но при этом помещаться на жесткий диск. Кроме того, рабочий процесс должен учитывать все структуры, которые создаются во время анализа поисковых данных.
  • Подмножество данных - это хорошо для разведки, но не для финализации результатов и отчетности. В конце концов, любые процессы, разработанные в подмножестве, должны будут применяться ко всему набору данных (в любом случае, в моем случае).
  • Разделение данных - это то, что я хотел бы узнать больше от людей, которые фактически реализуют этот рабочий процесс. Как это сделать? Какими инструментами? Может ли это быть сделано прозрачным для пользователя способом? (то есть, создайте некоторую структуру данных на диске, и структура будет заботиться о разбивке на части).

1
Более новые версии Stata на 64-битных компьютерах не имеют проблем с наборами данных такого размера (потому что 5 ГБ легко помещаются в ОЗУ в наши дни), но есть ли у вас интерес к коммерческим альтернативам SAS или вы ищете только FOSS?
whuber

1
Да, решения FOSS - это то, что я ищу. Я согласен, что набор данных может уместиться в 5 гигабайт оперативной памяти, но он также должен обрабатывать операции и дополнительные структуры данных, которые создаются во время предварительного анализа данных. Сопоставьте это с коммерческими ноутбуками, оснащенными скудными 4 ГБ оперативной памяти, и накладные расходы, потребляемые ОС, и ошибки памяти обнаруживаются довольно быстро.
Zelazny7

2
@ Zelazny7: Добавление еще 4Gigs на ноутбук должно быть довольно дешевым в наши дни. :)
curious_cat

3
Другой вариант - хранить данные в базе данных (SQL или иным образом). Часто для анализа требуется только подмножество данных (переменные 1:10, но не 1: 1000), которые помещаются в памяти. Если подмножество все еще больше, чем память, анализ можно выполнить порциями (загружать данные из базы данных 1000 наблюдений за раз, соответствующим образом сопоставлять результаты вместе в конце).
Jthetzel

1
Обязательно ознакомьтесь с вопросами о больших данных в SO, а также с обзором задач высокопроизводительных вычислений в CRAN для дальнейших обсуждений, если вы этого еще не сделали.
Jthetzel

Ответы:


3

если вы используете 500 000 записей x 2000 переменных, я бы потратил немного больше денег на оперативную память для вашего ноутбука, и с этим покончено. если у вас есть 16 ГБ, вы, вероятно, можете прочитать набор данных, который вы описываете, непосредственно в R. и в этот момент вы сможете сделать гораздо больше - и очень быстро ... но вы говорите, что это не вариант, поэтому:

посмотрите на пакеты на основе SQL для R. Они позволяют вам подключаться к внешним базам данных и получать доступ к этим таблицам через SQL. Так как SQL довольно универсален (а R является открытым исходным кодом), ваш код не будет потерян, если вы поменяете работу или потеряете доступ к SAS. проще всего настроить внешнюю базу данных, RSQLiteно, безусловно, самая быстрая MonetDB.R( тесты скорости )

вероятно, есть несколько хороших решений вашей заявленной проблемы, я думаю, что почти все они связаны с R;)


2

Возможно, дело не столько в приложениях / проблемах, к которым вы стремитесь, и в их характеристиках, но больше в алгоритмах и вариантах, которые вы используете. Конкретнее, для обработки больших данных появилось много вариантов, основанных на стохастическом градиентном спуске популярных алгоритмов, таких как SVM, которые способны справиться с этим.

Scikit предлагает поддержку некоторых из этих алгоритмов (SVM, kNN, kmeans, ...). Я думаю, что этот хороший график поможет вам быстро понять, если Scikit имеет смысл для вас вообще.

надеюсь, это поможет

ПРИМЕЧАНИЕ: далее следует ответ на комментарий от zelazny7

Теперь я вас понял. То, что вы ищете, это панды . Взгляните на раздел переговоров. Существует презентация, в которой сравнивается рабочий процесс Panda и рабочий процесс Panda. Panda позволяет импортировать данные в разных форматах и ​​обрабатывать файлы bgu посредством интеграции таблиц HDF5 . Кроме того, вы можете подключить интерфейс Scikit.


Благодарность! Алгоритмы определенно должны работать on-lineили обрабатывать фрагменты данных, считываемых в память и записываемых обратно на диск. Scikit великолепен, и это на самом деле то, что я ЛЮБЛЮ использовать, но какие инструменты / рабочие процессы / подходы существуют для очень необходимых этапов исследования, анализа и подготовки данных перед применением этих алгоритмов? Эти языки могут справиться с этими шагами, но я действительно ищу фактический пример от кого-то, кто имеет дело с этими проблемами из памяти.
Zelazny7

Я отредактировал свой ответ тем, что вы ищете (или я так верю!)
jpmuc

2

Кажется, вы уже знакомы с SAS, и ваши наборы данных достаточно малы, чтобы поместиться в ОЗУ, но, возможно, вы не можете разместить достаточно ОЗУ в своем ноутбуке. Если вы не против придерживаться SAS, как насчет того, чтобы просто подключиться к SAS, работающему удаленно на компьютере с большим количеством оперативной памяти? Я понятия не имею, как это работает, но эти ссылки могут помочь вам начать.

Есть и другие веские причины использовать Pandas или R, но я не думаю, что вам нужно беспокоиться об ограничении памяти. Если вы не можете разместить достаточно памяти на своем ноутбуке, запустите экземпляр Python или R в другом месте и подключитесь к SSH, iPython Notebook или RStudio.


1

Graphchi превосходен и может работать с огромными наборами данных. Работать с ней немного больно, но она может обрабатывать графические и неграфические данные.


1

Я недавно сталкивался с SFrames и GraphLab Create, Это библиотеки для Python, предлагающие ту функциональность, которую вы, похоже, ищете с сайта Pypi: «SFrame - это масштабируемый, неосновной массив данных, который позволяет работать с наборами данных, размер которых превышает объем оперативной памяти. в вашей системе. " Так что думайте об этом как о функциональности манипулирования данными и API в Pandas, но сначала не помещайте все данные в память. Насколько я знаю, SFrame - это бесплатный и открытый исходный код. С другой стороны, GraphLab основывается на функциональности SFrame, чтобы предоставить алгоритмы для проведения описательной и прогнозной (машинного обучения) аналитики данных, хранящихся в SFrame. GraphLab Create create не является бесплатным / открытым исходным кодом, но имеет бесплатную демонстрационную лицензию. В любом случае, в зависимости от того, насколько сложными должны быть ваши алгоритмы, SFrame может подойти вам.


-1

Рассматривали ли вы «Настоящий», не интерпретированный язык, как Фортран?

Похоже, что предложения пока либо очень зависят от поставщика, либо интерпретируются. Интерпретированные методы печально известны плохими приложениями, интенсивно использующими память. MatLab может быть гораздо более высокого уровня языка, чем "C", но оптимизация обработки памяти в C может заставить его обрабатывать в 100 раз быстрее наборы данных, которые в миллионы раз больше.

И "R", и "Python" - это замечательные, высокоуровневые, технически насыщенные и широко используемые языки. Они также интерпретируются.

Вы можете рассмотреть один из экземпляров R-on-Hadoop. (Rhipe, другие). Это имеет то преимущество, что может переводить R (высокий уровень, простой в программировании) в инструкции MapReduce / Hadoop. Hadoop может создать интересный многопроцессорный кластер для бедняков.

http://www.datadr.org/ <- (ссылка)

Fortran разрабатывался десятилетиями. Он имеет очень эффективную обработку памяти и компиляцию. Он также имеет несколько библиотек более высокого уровня, поэтому он может выполнять очень технически сложные операции довольно просто. Я мог бы сделать игрушечный CFD в MatLab, но для чего-то реалистичного и самокодированного, я бы использовал Fortran для обработки "большого железа" и что-то вроде MatLab или R для представления / обобщения данных. Никто не делает коммерческое программное обеспечение CFD, чей «движок» интерпретируется, а не компилируется. Некоторые поставщики имеют свой CFD для получения денег, закодированный в C или Fortran. SAS изначально был написан на C ( ссылка ).

Фортран и Рипе доступны. MatLab стоит денег, и если бы моя работа не платила за это, я бы сейчас использовал R или Python.

ОБНОВЛЕНИЕ:
Моя точка зрения была "скомпилирована". Python имеет Cython, который может буквально выполнять тот же (фундаментальный) код ~ в 1000 раз быстрее. Это означает, что вы можете иметь данные, которые в ~ 1000 раз больше, и обрабатывать их практически одновременно. Привести Cython в порядок может быть непростой задачей, но такие инструменты, как « Sage », хорошо с этим справляются. Rcpp якобы имеет подобное, но я лично не знаю, что он также хорошо развит.

Если вы подумаете об этом, основы почти всего, что вы используете в научных вычислениях, даже в интерпретируемых языках, скомпилированы на Fortran или скомпилированы в C. BLAS - это BLAS; Вы не заново изобретаете код каждый раз, когда делаете EDA . Ваш интерпретируемый язык вызывает эти библиотеки, хотя и очень неэффективно, когда он работает.

Кроме того, вы можете посмотреть на JMP . Он имеет очень простой в использовании интерфейс и отлично подходит для очень наглядного анализа данных ( EDA ).


2
Как вы исследуете данные на скомпилированном языке, таком как фортран? Для меня привлекательность интерпретируемых языков - это REPL, который обеспечивает богатый самоанализ и позволяет мне быстро понять, с чем я имею дело, а также поиграть с новыми библиотечными функциями, с которыми я, возможно, не знаком.
Zelazny7

1
Rcpp очень хорошо разработан (просто посмотрите обратное использование в CRAN), но не очень сравним с Cython. Если у вас есть какая-то определенная функция, да, вы можете взять ввод R, обработать его в Cpp и вернуть данные в R. Но вы не будете в ближайшее время компилировать целый скрипт R в Cpp.
russellpierce
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.