Варіанти аналізу основних даних


18

Я використовую SAS професійно вже близько 5 років. У мене він встановлений на моєму ноутбуці і часто доводиться аналізувати набори даних за допомогою 1000-2000 змінних і сотень тисяч спостережень.

Я шукав альтернативи SAS, які дозволяють мені проводити аналізи на схожих наборах даних. Мені цікаво, що інші люди використовують у таких ситуаціях. Це, звичайно, не є "великими даними" у способі, який використовується сьогодні. Також мої набори даних недостатньо малі, щоб зберігати в пам'яті. Мені потрібно рішення, яке може застосовувати алгоритми до даних, що зберігаються на жорсткому диску. Це те, що я досліджував безрезультатно:

  1. R - BigMemory може створювати матриці, що зберігаються з пам'яті, але елементи повинні бути в одному режимі. Я працюю з даними, які майже на 50/50 розбиваються між символами та числовими. Пакет FF наближається до того, що мені потрібно, але я не зовсім розумію, які процедури сумісні з ним. Я думаю, що підтримка дещо обмежена.
  2. Панди - Я був дуже схвильований пітонічною альтернативою Р. Однак він теж повинен зберігати всі дані в пам'яті.
  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: Додавання ще 4 гіга до ноутбука має бути досить дешевим у ці дні. :)
curious_cat

3
Інший варіант - збереження даних у базі даних (SQL чи іншим способом). Часто для аналізу потрібен буде лише підмножина даних (змінні 1:10, але не 1: 1000), які вмістяться в пам'яті. Якщо підмножина все-таки більша за об'єм пам'яті, аналіз можна проводити фрагментами (завантажуйте дані з бази даних 1000 спостережень одночасно, відповідним чином збирайте результати разом в кінці).
jthetzel

1
Обов'язково перегляньте питання щодо великих даних щодо SO, а також високоефективну обчислювальну задачу на CRAN для подальшої дискусії, якщо ви ще цього не зробили.
jthetzel

Відповіді:


3

якщо ви максимізуєте 500000 записів x 2 000 змінних, я витратив би трохи більше грошей на оперативну пам’ять для вашого ноутбука, і я б з цим зробив. якщо у вас є 16 Гб, ви, ймовірно, можете читати набір даних, який ви описуєте, безпосередньо в R. і в цей момент ви зможете зробити набагато більше - і дуже швидко .. але ви кажете, що це не варіант, так що:

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

Мабуть, є кілька хороших рішень вашої заявленої проблеми, я гадаю, що майже всі вони включають R;)


2

Можливо, справа не стільки в застосуванні / проблемах, яких ви прагнете, так і в їх характеристиках, а більше в алгоритмах і варіантах, які ви використовуєте. Більш конкретно, для обробки великих даних з'явилося багато варіантів, заснованих на стохастичному градієнтному походженні популярних алгоритмів, таких як SVM, які здатні впоратися з цим.

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

Сподіваюся, що це допомагає

ПРИМІТКА: далі йде відповідь на коментар zelazny7

Тепер я тебе зрозумів. Що ви шукаєте, це панди . Погляньте на розділ переговорів. Існує презентація, що порівнює робочий процес Панди та короткий зміст панди. 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, щоб забезпечити алгоритми для описової та прогностичної (машинного навчання) аналітики даних, що зберігаються у SFrames. GraphLab Create create не є вільним / відкритим кодом, але має безкоштовну демо-ліцензію. У будь-якому випадку, залежно від того, наскільки складними будуть ваші алгоритми, SFrame може вистачити для вас.


-1

Ви вважали "справжньою", не інтерпретованою мовою, як Фортран?

Здається, що пропозиції поки що залежать від постачальника або інтерпретуються. Інтерпретовані методи, як відомо, погано впливають на інтенсивні програми. MatLab може бути набагато вищим рівнем мови, ніж "C", але оптимізація обробки пам'яті в C може змусити її обробляти в 100 разів швидші набори даних, що в мільйони разів більше.

І "R", і "Python" - це чудові, високоякісні, технічно багаті та високо використовувані мови. Їх також інтерпретують.

Ви можете розглянути один із екземплярів R-on-Hadoop. (Rhipe, інші) Це перевага - можливість перекладати R (високий рівень, легко програмувати) в інструкції MapReduce / Hadoop. Hadoop може створити цікавий багатопроцесорний кластер для бідних людей.

http://www.datadr.org/ <- (посилання Rhipe)

Фортран розробляється десятиліттями. Він має дуже ефективну обробку пам'яті та компіляцію. Він також має кілька бібліотек вищого рівня, тому він може робити дуже складні технічно операції досить просто. Я міг би зробити іграшку CFD в MatLab, але для чогось реалістичного та самокодируваного я би використав Fortran для обробки "великого заліза" і щось на зразок MatLab або R для подання / підбиття даних. Ніхто не робить комерційне програмне забезпечення CFD, чий "двигун" інтерпретується замість компільованого. Кілька постачальників мають свій кодекс CFD, кодований в C або Fortran. SAS спочатку був написаний на С ( посилання ).

Фортран і Ріпе доступні. MatLab коштує грошей, і якби моя робота не платила за це, я б зараз використовував R або Python.

ОНОВЛЕННЯ:
Мій пункт був "складений". У Python є цитон, який може буквально швидше запускати той же (основний) код ~ 1000x. Це означає, що ви можете мати дані на 1000 разів більше і обробляти їх майже в один і той же час. Налаштування Cython працювати чистою може бути складним завданням, але такі інструменти, як " Sage ", добре переносять його. Rcpp нібито має подібне, але я особисто не знаю, що він так добре розвинений.

Якщо ви подумаєте над цим, основи майже всього, що ви працюєте в наукових обчисленнях, навіть в інтерпретованих мовах, складено Fortran або складено C. BLAS - BLAS; ви не переосмислюєте код щоразу, коли робите EDA . Ваша інтерпретована мова називає ці бібліотеки, хоча і дуже неефективно, коли вона працює.

Як сторону, ви можете подивитися на JMP . Він має дуже простий у використанні інтерфейс і відмінно підходить для дуже візуального аналізу даних ( EDA ).


2
Як ви вивчаєте дані зі складеною мовою, як fortran? Для мене звернення інтерпретованих мов - це REPL, який забезпечує багату самоаналіз і дозволяє мені швидко дізнатися, з чим я маю справу, а також грати з новими функціями бібліотеки, з якими я, можливо, не знайомий.
Zelazny7

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