Какой из языков Matlab и Python хорош для статистического анализа?


17

Какой из языков Matlab и Python хорош для общего статистического анализа данных? Каковы плюсы и минусы, кроме доступности, для каждого?


2
Это должно быть сообщество вики, ИМО.
Шейн

Не могли бы вы объяснить, почему вы не можете посмотреть на R?
Дирк Эддельбюттель

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

2
Познакомьтесь немного здесь и в StackOverflow с точки зрения того, что люди рекомендуют для статистического анализа и программирования . Многие из нас считают, что реальной альтернативы Р. нет, но, как и красота, это в глазах смотрящего, так что удачи.
Дирк Эддельбюттель

С точки зрения геостатистики (в которой я получил докторскую степень), я думаю, что R очень хорошо оборудован (см. Gstat, geoR и т. Д.). По крайней мере, я не знаю такого полного охвата геостатистических методов в python. И почему R "далеко не близко к питону"? Я использовал оба, и для геостатов я чувствую, что R довольно явно превосходит.
Пол Химстра

Ответы:


29

Как несгибаемый пользователь Matlab за последние 10 с лишним лет, я рекомендую вам изучить Python. Если вы достаточно хорошо владеете языком, когда вы работаете на языке, который вы изучаете, вам покажется, что вы недостаточно продуктивны, и вы вернетесь к использованию вашего лучшего языка по умолчанию. По крайней мере, я бы посоветовал вам попытаться стать одинаково хорошо владеющим несколькими языками (я бы также предложил R).

Что мне нравится в Matlab:

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

Что мне не нравится в Matlab:

  • Не существует хорошей системы для управления сторонними (бесплатными или иными) пакетами и сценариями. Mathworks контролирует «центральный обмен файлами», и установка пакетов надстроек кажется очень неуклюжей, совсем не похожей на превосходную систему, которую имеет R. Кроме того, у Mathworks нет стимулов для улучшения этой ситуации, потому что они зарабатывают деньги на продаже наборов инструментов, которые конкурируют с бесплатными пакетами;
  • Лицензии на параллельные вычисления в Matlab безумно дороги;
  • Большая часть m-кода, включая многие функции панели инструментов и некоторые встроенные функции, были разработаны, чтобы быть очевидно правильными, за счет эффективности и / или удобства использования. Наиболее ярким примером этого является medianфункция Matlab , которая выполняет сортировку данных, а затем принимает среднее значение . Это был неправильный алгоритм с 70-х годов.
  • сохранение графиков в файл в лучшем случае изворотливо в Matlab.
  • Я не обнаружил, что мой пользовательский опыт улучшился за последние 5 лет (когда я начал использовать Matlab вместо октавы), хотя Mathworks продолжает добавлять колокольчики и свистки. Это указывает на то, что я не являюсь их целевым клиентом, скорее они стремятся расширить свою долю на рынке, ухудшив положение для опытных пользователей.
  • Теперь есть два способа сделать объектно-ориентированное программирование в Matlab, что в лучшем случае сбивает с толку. Устаревший код, использующий старый стиль, будет сохраняться в течение некоторого времени.
  • Интерфейс Matlab написан на Java, в котором есть неприятные идеи об управлении памятью.

+1, хорошие очки. По этому поводу: «неприятные идеи об управлении памятью» .. интересно, вы можете уточнить?
АРС

1
моя память куда-то уходит ; мой опыт работы с Java за пределами использования Matlab показывает, что это вероятный виновник, и участие в нем, -nojvmпохоже, поможет ...
shabbychef

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

1
@mbq: shuffleможет быть в наборе инструментов, это не фондовый matlab. вряд ли может быть хуже встроенного, randpermкоторый возвращает индекс сортировки случайного вектора. Опять же, это, вероятно, неправильный алгоритм (я только что узнал о перестановке Кнута-Фишера-Йейтса здесь на stats.SE) ..
shabbychef

1
@mbq: другая хорошая сторона в randpermтом, что на него влияет randnзасевание, в то время как мексиканская версия Knuth-Fisher-Yates, возможно, не может получить доступ к семейству randn «изнутри», и чистая .m версия shuffle, вероятно, будет быть слишком медленным
Шаббычеф

11

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

Первое, самое большое отличие в том, что Python - это язык программирования общего назначения. Matlab великолепен, если ваш мир примерно изоморфен числовому массиву на Фортране. Как только вы начинаете заниматься манипулированием данными и связанными с этим проблемами, Python затмевает Matlab. Например, см. Книгу Грега Уилсона: Обработка данных : решение повседневных проблем с использованием Java, Python и других .

Во-вторых, Matlab действительно сияет числовой работой. Многие сообщества исследователей использует его , и если вы ищете говорят, некий алгоритм относится к работе в сжатом зондированию, вы гораздо больше шансов найти реализацию в Matlab. С другой стороны, Matlab - это своего рода PHP научных вычислений - он стремится иметь функцию для всего, что находится под солнцем. Получающаяся эстетика и архитектура сводят с ума, если вы фанат языка программирования, но с практической точки зрения, он выполняет свою работу. Многое из этого стало менее актуальным с появлением Numpy / Scipy, вы также можете найти библиотеки оптимизации и машинного обучения для Python. Взаимодействие с C примерно так же легко на любом языке.

Что касается доступности статистических библиотек для моделирования и тому подобного, то и того, и другого в некоторой степени не хватает по сравнению с чем-то вроде R. : Python , как статистика Workbench . Что касается 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 не поощряет какой-либо принцип дизайна.
  • Я опытный пользователь. Мне нравятся терминалы. Я ненавижу графический интерфейс - ненавижу это. И когда они добавили ленту в стиле "windows", я еще больше ее ненавидел. В основном их настройки GUI и ужасное управление памятью нажали мою последнюю кнопку, и я решил уйти. Использование -nodesktopопции полезно в большинстве случаев, но имеет свои проблемы.
  • Множество возможностей для разработки функций (с использованием ОО или функционального дизайна), но ни одна из них не кажется правильной, большинство считает, что работает. Я не получаю удовлетворения от разработки хороших функций в Matlab
  • Сообщество большое, но нелегко поделиться и найти хороший код. Обмен файлами не так уж и велик.

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

  • Clojure: красивый функциональный язык. Моей причиной использования Clojure была его способность писать сценарии на Java. Большая часть нашей "большой" базы кода находится на Java, так что это имело большой смысл. В то время большая часть научной обработки была недоступна, и не так уж много было с визуализацией. Но я думаю, что это меняется.
  • Javascript: после просмотра тестов на http://julialang.org/ и, поскольку меня определенно интересовали возможности визуализации D3 , я решил попробовать JavaScript. JavaScript на удивление очень быстрый. Но если вы действительно хотите ненавидеть себя, изучите JavaScript.
  • Python: Python имеет удивительное сообщество и множество отличных проектов. IPython Notebook удивителен по многим причинам (одна из них - простое копирование / вставка рисунков в powerpoint). Такие проекты, как NumPy / SciPy / Scikit-Learn / Pandas, действительно сделали Python увлекательным и простым в использовании. Это так легко использовать на нескольких ядрах или кластерах. Я был действительно счастлив за выключатель.
  • Юлия: Юлия потрясающая. Специально для пользователей Matlab. Это все еще в зачаточном состоянии, поэтому происходит множество изменений. Одним из основных недостатков Python является то, что он не обладает всеми встроенными функциями, которые есть у Matlab. Конечно, NumPy / SciPy предоставляют эту функциональность, но она не является встроенной, и вам нужно принять решение о том, должны ли вы быть чистыми объектами Python или просто объектами. Джулия в основном имеет все, что вы хотели бы, чтобы Python был от Matlab. Я бы подождал, но это лучший вариант для пользователей Matlab в будущем.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.