Серед Matlab та Python, яка мова хороша для статистичного аналізу?


17

Серед Matlab та Python, яка мова корисна для загального статистичного аналізу даних? Які плюси і мінуси, крім доступності, для кожного?


2
Це має бути вікі спільноти, ІМО.
Шейн

Чи хотіли б ви пояснити, чому ви також не могли подивитися на R?
Дірк Еддельбуеттель

@DirK: Я навряд чи чув Р. Крім того, я хотів вивчити мову програмування, як Python, а потім знову теж не думаю, що R десь близький до python, IMO. Я сподіваюся, що він відповість на ваше запитання.

2
Трохи погляньте тут і на StackOverflow з точки зору того, що люди рекомендують для статистичного аналізу та програмування . Багато хто з нас відчуває, що немає реальної альтернативи Р. Але так само, як краса, це в очах глядача, тож удача.
Дірк Еддельбюттель

Що стосується геостатистики (в якій я робив докторську ступінь), я вважаю, що R дуже добре обладнаний (див. Gstat, geoR тощо). Принаймні, я не знаю такого повного висвітлення геостатистичних прийомів у пітоні. І чому R "ніде недалеко від пітона"? Я використовував і те, і для геостатів я вважаю, що R досить чітко перевершує.
Пол Хіемстра

Відповіді:


29

Як користувач Diehard Matlab за останні 10+ років, рекомендую вивчити Python. Коли ви будете достатньо кваліфіковані з мовою, коли ви працюєте на мові, яку ви вивчаєте, вам здасться, що ви недостатньо продуктивні, і ви перейдете до використання найкращої мови за замовчуванням. Принаймні, я б запропонував вам спробувати стати однаковою мірою на кількох мовах (я б також запропонував R).

Що мені подобається в Matlab:

  • Я досвідчений у цьому.
  • Це лінгва франка серед чисельних аналітиків.
  • інструмент профілювання дуже хороший. Це єдина причина, що я використовую Matlab замість октави.
  • Існує безкоштовний клон, октава, який добре відповідає референтній реалізації.

Що мені не подобається в Matlab:

  • Не існує гарної системи управління сторонніми (безкоштовними чи іншими) пакетами та сценаріями. Mathworks контролює «центральний обмін файлами», а установка додаткових пакетів здається дуже незграбною, нічим не чудовою системою, яку має R. Крім того, Mathworks не стимулює покращувати цю ситуацію, оскільки вони заробляють гроші на продажу наборів інструментів, які конкурують з безкоштовними пакетами;
  • Ліцензії на паралельні обчислення в Matlab шалено дорогі;
  • Значна частина m-коду, включаючи багато функцій інструментарію та деякі вбудовані, були розроблені таким чином, щоб вони були правильними за рахунок ефективності та / або зручності використання. Найяскравішим прикладом цього є medianфункція Matlab , яка виконує своєрідні дані, а потім приймає середнє значення . Це був неправильний алгоритм з 70-х.
  • збереження графіків до файлу є хитрим у кращому випадку в Matlab.
  • Я не знайшов, щоб мій досвід користувача покращився за останні 5 років (коли я почав використовувати Matlab замість октави), хоча Mathworks продовжує додавати дзвіночки. Це вказує на те, що я не є їхнім цільовим клієнтом, скоріше вони прагнуть розширити частку ринку, погіршивши ситуацію для споживачів енергії.
  • Зараз у Matlab є 2 способи зробити об’єктно-орієнтоване програмування, що в кращому випадку заплутано. Спадковий код із використанням старого стилю зберігатиметься деякий час.
  • Інтерфейс Matlab написаний на Java, що має неприємні уявлення про управління пам'яттю.

+1, хороші бали. З цього приводу: "неприємні ідеї щодо управління пам'яттю" .. цікаво, чи можете ви детально розробити?
сер

1
моя пам’ять кудись іде ; мій досвід роботи з Java поза межами використання Matlab вказує на те, що він є вірогідним винуватцем, і запуск, -nojvmсхоже, допомагає ...
shabbychef

Мій улюблений приклад дивних вбудованих кодів MATLAB - перетасовка, яка впорядковує дані з упорядкованими поверненнями, сортуючи щойно створений випадковий вектор.

1
@mbq: shuffleможе бути в інструментальній панелі, не є запасом matlab. навряд чи може бути гіршим за вбудований, randpermякий повертає індекс сортування випадкового вектора. Знову ж, це, мабуть, неправильний алгоритм (я щойно дізнався про переміщення Knuth-Fisher-Yates тут на статистиці.SE) ..
shabbychef

1
@mbq: інша хороша частина randpermполягає в тому, що на нього впливає висівання randn, тоді як mex'ed версія Knuth-Fisher-Yates, можливо, не може отримати доступ до насіння Randn "всередині", і чиста .m версія перетасування, ймовірно, бути занадто повільним.
shabbychef

11

Дозволяє розбити її на три області (у верхній частині моєї голови), де програмування відповідає статистиці: обробка даних, числові процедури (оптимізація та таке) та статистичні бібліотеки (моделювання тощо).

По-перше, найбільша різниця полягає в тому, що Python - це мова програмування загального призначення. Matlab чудовий, якщо ваш світ приблизно ізоморфний числовому масиву fortran. Після того, як ви почнете займатися питаннями пошуку даних та пов'язаними з ними проблемами, Python перекреслює Matlab. Наприклад, дивіться книгу Грега Вілсона: Зниження даних: вирішення проблем щоденного користування Java, Python тощо .

По-друге, Matlab дійсно блищить числовою роботою. Багато дослідницької спільноти використовує це, і якщо ви шукаєте, скажімо, якийсь алгоритм, пов'язаний з документом у стисненому зондуванні, ви набагато більше шансів знайти реалізацію в Matlab. З іншого боку, Matlab є свого роду PHP наукових обчислень - він прагне мати функцію для всього, що знаходиться під сонцем. Естетика та архітектура, що випливають із цього, здивують, якщо ви чувак з мовою програмування, але в утилітарному плані це буде виконано. Багато з цього стало менш привабливим із зростанням Numpy / Scipy, ви так само ймовірні, що ви знайдете бібліотеки оптимізації та машинного навчання, доступні для Python. На будь-якій мові взаємозв’язок із C приблизно так само простий.

Щодо наявності статистичних бібліотек для моделювання тощо, то обох дещо бракує в порівнянні з чимось на кшталт Р. (Хоча я підозрюю, що обидва будуть задовольняти потреби 80% людей, які роблять статистичну роботу.) Для сторони Python це питання. : Python як обробка статистики . Що стосується Matlab, я знаю, що існує інструментарій статистики, але я дозволю комусь більш обізнаному заповнити пробіли (мій досвід роботи з Matlab обмежений числовою роботою, не пов'язаною зі статистикою).


Панелі інструментів статистики в Matlab досить веселі. Чи є щось подібне для R, де, наприклад, ви можете швидко спробувати купу різних функцій (регресій)?
Алекс Р.

6

Я також був завзятим користувачем Matlab протягом більше 10 років. Протягом багатьох років у мене не було причин працювати поза набором інструментів, який я створив для своєї роботи. Хоча для функції інструментів було створено багато функцій, мені часто потрібно було створити алгоритми для швидкого аналізу повороту. Оскільки ці алгоритми часто використовують матричну математику, Matlab був ідеальним кандидатом на мою роботу. Окрім мого набору інструментів Matlab, інші мої групи активно працювали на Java, оскільки була чітка сумісність між мовами. Протягом багатьох років я був повністю задоволений Matlab, але близько 3 років тому я вирішив почати повільний перехід від Matlab і радо сказати, що не відкрив його вже близько року. Ось причина мого переїзду:

  • Я працюю з онлайновими та офлайн-обчислювальними системами, система ліцензування завжди була головним болем. Завжди здавалося, що коли нам найбільше потрібен Matlab, термін дії ліцензії закінчується або раптом виникнуть проблеми. Це завжди був головний біль. Крім того, якщо нам коли-небудь потрібно було ділитися кодом, а інша сторона не мала ліцензій на ті самі набори інструментів, це створило головний біль. Це не безкоштовно
  • Мені часто потрібно створювати презентації. Навіть незважаючи на те, що Matlab надає широкі інструменти для створення фігур, що робить його дуже потужним для створення алгоритму, але зберегти фігуру таким чином, щоб її можна було вставити у презентацію та виглядати красиво - це не проста задача. Мені часто доводилося вставляти файл EPS в Adobe illustrator, щоб видалити все сміття, виправити шрифти та очистити рядки. Існує кілька інструментів, які допоможуть у цьому при обміні файлами (export_fig.m).
  • Я часто отримую код Matlab від інших. Коли це відбувається, я майже завжди переписую це, оскільки: їх API не сумісний з моїми даними, їх код не має сенсу, він повільний, він не видає те, що мені потрібно, ... В основному люди, які розвиваються в Matlab, не інженери програмного забезпечення, а Matlab не заохочує будь-який тип принципу проектування.
  • Я користувач живлення. Мені подобаються термінали. Я ненавиджу GUI - ненавиджу. І коли вони додали стрічку в стилі "windows", я ненавидів її ще трохи. В основному їх підключення до GUI та жахливе управління пам’яттю натиснули мою останню кнопку, і я вирішив піти. Використання-nodesktop варіанту добре сьогодні, але в ньому є проблеми.
  • Багато можливостей для проектування функцій (за допомогою OO або функціонального дизайну), але жодна не відчуває правильно, більшість людей відчуває себе прихильністю. Я не отримую задоволення від проектування хороших функцій в Matlab
  • Спільнота велика, але не просто поділитися та знайти хороший код. Обмін файлами не так вже й великий.

Це лише кілька моїх численних захоплень Matlab. Це один яскравий атрибут: легко, дуже просто написати код швидко (якщо не потворно). Я все-таки залишив його, і мої пошуки провели мене через Clojure-> JavaScript-> Python <-> Julia; так, я був всюди.

  • Clojure: прекрасна функціональна мова. Моєю причиною використання Clojure була його здатність скриптувати Java. Дуже багато нашої «великої» бази коду є на Яві, тому це мало багато сенсу. У той час чимало наукових опрацьовувань було малодоступним, а також не багато з візуалізацією. Але я думаю, що це змінюється.
  • Javascript: побачивши еталони на http://julialang.org/ , і оскільки мене напевно зацікавила можливість візуалізації D3 , я вирішив спробувати JavaScript. JavaScript напрочуд дуже швидкий. Але якщо ви дійсно хочете ненавидіти себе, вивчіть JavaScript.
  • Python: Python має дивовижну спільноту та має багато чудових проектів. Ноутбук IPython дивовижний з багатьох причин (одна з них - це проста копія / минуле фігур в Powerpoint). Такі проекти, як NumPy / SciPy / Scikit-Learn / Pandas, справді зробили Python цікавим та простим у використанні. Це так просто використовувати на декількох ядрах або кластерах. Я був дуже радий переходу.
  • Джулія: Джулія дивовижна. Спеціально для користувачів Matlab. Це ще в дитинстві, тому багато змін відбувається. Одним з головних недоліків Python є те, що він не має всіх вбудованих функціоналів, якими володіє Matlab. Впевнені, що NumPy / SciPy приносять цю функціональність, але вона не є вбудованою, і вам потрібно приймати рішення щодо того, чи бути це чистими об'єктами python або numpy-об'єктами. У Джулії в основному є все, що б ви хотіли, щоб Пітон прийшов від Матлаба. Я б зачекав, але це найкращий варіант для користувачів Matlab у майбутньому.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.