R проти Python для аналізу даних [закрито]


60

Я займаюся програмуванням близько року і мене дуже цікавлять аналіз даних та машинне навчання. Я беру участь в кількох онлайн-курсах і читаю пару книжок.

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

- Я мушу зазначити, що я використовую C # у школі, але я знайомий з Python шляхом самостійного вивчення.


Ось, можливо, цікаве посилання: coursera.org/course/compdata
Giorgio

Відповіді:


39

Я використовую як Python (для аналізу даних курсу, включаючи numpy і scipy), так і R поряд. Однак я використовую R виключно для аналізу даних та Python для більш загальних завдань програмування (наприклад, управління робочим процесом комп'ютерної моделі).

Щодо основних операцій, скажімо, операції над масивами та сортування, R та Python + numpy дуже порівнянні. Саме в дуже великій бібліотеці статистичних функцій R має перевагу. До того ж, matplotlib здається не таким хорошим, як ggplot2, але я не так багато використовував matplotlib. Крім того, я б сфокусувався спочатку на одній мові та став би хорошим у специфіці цієї мови. Ви, здається, перш за все зацікавлені в аналізі даних, а не в інженерії програмного забезпечення. Я б вибрав R і дотримувався цього. Однак, я думаю, що вибір для Python + numpy + scipy + scikit - це однозначно і відмінний вибір, я просто відчуваю, що R просто трохи чудовий.

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

Відмова: Зауважте, що я важкий користувач R, тому моя думка може бути упередженою, хоча я намагався максимально об'єктивно відповісти. Крім того, я широко не використовував Python + numpy, хоча знаю колекціонерів, які роблять у ньому весь свій аналіз даних.

ps: Це посилання може бути цікавим: http://seanjtaylor.com/post/39573264781/the-statistics-software-signal

pps: або цитата з цієї публікації :

Я використовую R і Python для всіх моїх досліджень (з Rcpp або Cython у міру необхідності), але я скоріше уникаю писати на C або C ++, якщо я можу цього уникнути. R - чудова мова, багато в чому завдяки неймовірній спільноті користувачів. Його створили статистики, а це означає, що аналіз даних лежить в самому серці мови; Я вважаю, що це є головною особливістю мови та великою причиною, чому вона незабаром її не замінить. Python, як правило, є кращою загальною мовою, особливо якщо врахувати його поєднання функціонального програмування з орієнтацією на об'єкт. У поєднанні з Scipy / Numpy, Pandas та statsmodels це забезпечує потужне поєднання. Але Python все ще не вистачає серйозної спільноти статистиків / математиків.


3
Кажучи, що R сильніший за Python, ти маєш на увазі Python + numpy / blaze + scipy , чи звичайний Python?
9000

5
Я маю на увазі Python + numpy так, інакше вибір був би ще простішим. Я думаю, що з точки зору основних операцій, скажімо, операції над масивами та сортування, R та Python + numpy дуже порівнянні. Саме в дуже великій бібліотеці статистичних функцій R має перевагу. До того ж, matplotlib здається не таким хорошим, як ggplot2, але я не так багато використовував matplotlib.
Пол Хіемстра

Однак, я думаю, що вибір для Python + numpy + scipy + scikit - це однозначно і відмінний вибір, я просто відчуваю, що R просто трохи чудовий.
Пол Хіемстра

@PaulHiemstra - Ви додасте кілька приємних моментів у своїх коментарях, які, ймовірно, поліпшать вашу відповідь - якщо питання буде відкрито заново і у вас є така можливість.
пс

@psr Я редагував у своїх коментарях, мабуть, не потрібно, щоб питання було відкритим, якщо я хочу його редагувати (можливо, лише я можу його редагувати ...).
Пол Хіемстра

36

Передумови: Я є вченим з даних в стартапі в Остіні, і я родом зі школи (фізика). Я використовую Python щодня для аналізу даних, але використовую R трохи. Я також використовую C # /. NET та Java (майже щодня), я використовував C ++ сильно в школі.

Я думаю, що головна проблема використання Python для числових даних (понад R) - це розмір спільноти користувачів. Оскільки мова існує вічно, багато людей зробили те, що ви, ймовірно, хочете зробити. Це означає, що, зіткнувшись з важкою проблемою, ви можете просто завантажити пакунок і приступити до роботи. І R "просто працює": ви даєте йому набір даних, і він знає, яка підсумкова статистика корисна. Ви даєте це деяким результатам, і він знає, які сюжети ви хочете. Усі загальні сюжети, які ви хочете зробити, є, навіть деякі досить езотеричні, які вам доведеться шукати у Вікіпедії. Як приємно, як scipy / numpy / pandas / statsmodels / тощо. призначені для Python, вони не знаходяться на рівні стандартної бібліотеки R.

Основна перевага Python над R полягає в тому, що це справжня мова програмування в сім'ї C. Він масштабується легко, тому можливо, що все, що є у вашій пісочниці, може бути використане у виробництві. У Python запікається Об'єктна орієнтація, на відміну від R, де він відчуває себе як думка (тому що вона є). Є й інші речі, які Python теж чудово робить: нарізання різьби та паралельна обробка є досить простою, і я не впевнений, чи так це в Р. І вивчення Python дає вам також потужний інструмент для створення сценаріїв. Також є справді хороші (безкоштовні) IDE для Python, набагато кращі, якщо ви готові платити (менше 100 доларів), і я не впевнений, що це стосується R - єдиний R IDE, про який я знаю, це R Studio, що досить добре, але не так добре, як PyDev + Eclipse, на мій досвід.

Додаю це як тріскуче: оскільки ти ще в школі, ти повинен подумати про роботу. Ви знайдете більше оголошень на роботі для висококваліфікованих розробників Python, ніж для висококваліфікованих розробників R. В Остіні робочі місця для Django devs - це начебто падіння з неба. Якщо ви добре знаєте R, є кілька місць, де ви зможете скористатися цією майстерністю (наприклад, Revolution Analytics), але багато магазинів, здається, використовують Python. Навіть у галузі аналізу даних / наукових даних все більше людей, схоже, звертаються до Python.

І не варто недооцінювати, що ви можете працювати з / для людей, які лише знають (кажуть) Java. Ці люди зможуть читати ваш код Python досить легко. Це не обов'язково буде, якщо ви робите всю свою роботу в Р. (Це виходить із досвіду.)

Нарешті, це може здатися поверхневим, але я думаю, що документація Python та конвенції про іменування (яких, як виявляється, релігійно дотримуються), є набагато приємнішими, ніж утилітарний R doc. Це буде гаряче обговорено, я впевнений, але акцент у Python - це читабельність. Це означає, що аргументи до функцій Python мають імена, які ви можете прочитати, і це щось означає. У R імена аргументів часто усічені --- Я вважав це менш правдивим у Python. Це може здатися педантичним, але це змушує мене писати такі речі, як "xlab", коли ви можете так само легко назвати аргумент "x_label" (лише один приклад) --- це має величезний ефект, коли ви намагаєтеся навчитися вивчати новий модуль / пакет API. Читання R doc - це як читання чоловічих сторінок Linux --- якщо саме так пливе ваш човен, то більше сил для вас.

Враховуючи це, я пропоную наступне (що також є моїм типовим робочим процесом): оскільки ви знаєте Python, використовуйте це як свій перший інструмент. Якщо вам не вистачає Python, навчіться достатньо R, щоб робити те, що ви хочете, а потім:

  1. Запишіть сценарії в R та запустіть їх з Python, використовуючи модуль підпроцесу, або
  2. Встановіть модуль RPy.

Використовуйте Python для того, в чому Python хороший, і заповніть прогалини одним із перерахованих вище. Це мій звичайний робочий процес --- я зазвичай використовую R для складання речей, а Python - для важкого підйому.

Отже, підсумовуючи: через наголос Python на читанні (пошук у Google для "Pythonic"), наявності хороших, безкоштовних ідентифікаторів IDE, тому, що це в сімействі мов С, тим більше можливостей, що ви зможете використовувати велику користь Набір навичок та всебічний кращий стиль документації мови, я б запропонував зробити Python вашим переходом і покладатися на R лише у разі необхідності.


Гаразд, це (на сьогоднішній день) моя найпопулярніша відповідь коли-небудь на стеці, і це навіть не №1 :) Я сподіваюся, що це допомогло декільком людям на цьому шляху.

У будь-якому випадку я прийшов до наступного висновку через кілька років у цій галузі:

Це, мабуть, неправильне запитання.

Питання "чи слід вивчити цю конкретну технологію" - це погане питання. Чому?

  1. Змінюється технологія. Завжди доведеться вивчати іншу технологію. Якщо ви переходите до роботи в Twitter, вони запускають Scala. Деякі місця - магазини Python. Деякі місця байдуже. Вас не приймають на роботу, тому що ви знаєте чи не знаєте якоїсь конкретної техніки - якщо ви не можете навчитися новій техніці, вас можуть (і повинні) звільнити. Це як, якщо виходить новий трубний гайковий ключ, а ви сантехнік, і ви не можете зрозуміти, як працює новий гайковий ключ, ви, мабуть, досить паршивий сантехнік.
  2. З огляду на вибір "Чи я вивчаю цю технологію" чи "Чи витрачаю більше часу на вирішення реальних проблем", завжди слід вибирати останню, без винятку.

Як науковець, ваша робота - вирішити проблеми . Ця єдина мудрість майже завжди втрачається на кожній конференції чи зустрічах, на які ви йдете - кожна розмова про "великі дані", яку я коли-небудь бачив, була зосереджена на техніці, а не на вирішенні проблем. Дійсне вирішення проблеми зазвичай відкладається на кілька слайдів наприкінці:

[Talk title = "Глибоке навчання при Cool New Startup"] ... [45 хвилин діаграм і техно-бабелів, під час яких я зонуюсь і перевіряю свій телефон] ... І після впровадження нашого кластера Hadoop та [Ben Ben out out знову] ми можемо виконати нашу глибоку навчальну рутину, [прокинься: ось чому я прийшов!], деталі якої є власником. Питання?

Це створює погане враження, що поле стосується технологій, і це просто не так. Якщо ви справді добрі у Scala, або Python, або R, але ви справді погано вирішуєте проблеми, ви зробите неприємний науковець .

Пако Натан був в Остіні кілька місяців тому на щоденній конференції "великих даних" і сказав щось на кшталт "Хімія не пробірки". Це в значній мірі підсумовує це - наука даних не про Scala, або Hadoop, або Spark, або що-небудь інше-tech-du-jour спливає. Зрештою, я хочу найняти людей, які думають, а не людей, які вміють використовувати Stack Overflow для вивчення наборів інструментів.

Так само, якщо ви йдете на співбесіду, а вони не наймають вас тільки тому, що ви не знаєте якоїсь мови програмування, то ця компанія смокче . Вони не розуміють, що означає «науковець даних», і, мабуть, вам краще, якби це не вийшло.

Нарешті, якщо ваші здібності до вирішення проблем є незначними (будьте чесні до себе), або ви дійсно просто насолоджуєтеся технічною стороною речей, або навчання техніці - це те, що ви справді любите (знову ж таки, будьте чесними), тоді навчитеся багато техніки. Ви завжди зможете знайти ролі типу "інженер даних", які відповідають вашому набору навичок. Це не погано, інженери даних змащують колеса і дають можливість вам виконувати свою роботу науковцем. (Різниця схожа на архітектора програмного забезпечення проти команди розробників.)


3
Я, однак, скажу, що якби я працював на торговому майданчику, а головний трейдер прийшов до мене з csv опціонних цін і хотів, щоб я прилаштував їх до лінійного розподілу і відкинув середнє та стандартне відхилення, Я навіть не вважав би Python. Я думаю, що це як три рядки коду, щоб зробити це в Р.
BenDundee

12

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

Очевидно, що між машинним навчанням та статистикою існує велике перекриття. Але перекриття - це не тотожність. Машинне навчання використовує ідеї від CS, які я, наприклад, не хотів би реалізувати в Р. Впевнений, ви можете обчислити мінімальну розтягнуту дереву в Р. Це може виглядати як некрасивий безлад. Люди машинного навчання припускають, що у вас є легкий доступ до хеш-таблиць, двійкових дерев пошуку тощо. На мій погляд, простіше впроваджувати алгоритм статистики заново, коли це потрібно, ніж намагатися перетворити те, що в основному є специфічною для домену мовою, загальною мовою програмування.

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

Я здогадуюсь, я спершу поглянув би на деякі статті та побачив, якою мовою вони розміщують код. Якщо це не в R, тоді не використовуйте його.


1
Дуже дякую. Мене, безумовно, більше цікавить сторона ML.
The_Cthulhu_Kid

1
Лише незначне доповнення: я впевнений, що R може це зробити і певним чином, але Python добре відомий своєю здатністю викликати C або компілювати функції в C за допомогою Cython з мінімальними накладними витратами. Таким чином, ви можете отримати швидше з меншими зусиллями, головне значення для перегляду реальних даних. Ще одна (остаточна) екзотична примітка: у Java є кілька справді хороших бібліотек машинного навчання (наприклад, WEKA). Однак, що цікаво, ви можете зателефонувати і цим з Python, використовуючи Jython :-)
Nir Friedman

7

Як старий шкільний (понад 50) науковець, який має та продовжує використовувати низку цих інструментів, я додам свої два центи. Я працював з колегами, які все ще пишуть кожен фрагмент коду у Fortran, від тривіальних разових завдань з аналізу даних до коду, який домінує в деяких суперкомп'ютерах світу. Останні діалекти фортранців (F90, F95, F2003, F2008) - це ІМХО, одні з найкращих розроблених мов, що існують. Десятиліття досвіду роботи з високопродуктивними обчисленнями призвели до досить вражаючого мовного розвитку.

Я використовував Python лише часом і перегляну його (в основному через Sage), але я використовую перевірений часом набір мов, які добре працюють для мене. Fortran, C, Perl, R і Scheme (з tcl для сценарію VMD). Я вважаю, що поєднання R та Fortran і C є дуже зручним. На відміну від інших зауважень, зроблених щодо об'єктної моделі в R, це хороша об'єктна модель для інтерактивної роботи, заснована на концепції CLOS про загальні функції та спосіб відправлення. Працюючи в інтерактивному режимі з новим пакетом, ви часто можете покладатися на такі загальні функції, як "друк" та "змова", щоб зробити щось продуктивне.

API для Fortran і C дуже простий у використанні. Якщо ви звикли працювати у Fortran та C для моделювання та аналізу даних, це великий плюс. Можливість динамічно генерувати R-код і оцінювати його, хоча і не так чисто, як макросистеми в Lisp і C, дуже корисна при опрацюванні динамічних наборів даних.

Деякі обмеження R для реальних даних включають виклик за значенням підходу. Хоча існують CS причини для виклику за значенням, програмування в реальному світі з великими числовими даними вимагає певної форми виклику за посиланням (зверніть увагу на важливість загальних блоків Fortran у попередньому коді або даних модуля в більш новому коді). Підхід, прийнятий PDL (мова даних Perl), є особливо елегантним у цьому плані. (Pdls по суті є викликом за посиланням, якщо ви не вимагаєте копії. Посилання на sub-pdl є підрозділом батьківського pdl у синтаксисі набагато чистішого, ніж надають Fortran або C).

Добре вивчити багато мов. Python є, безумовно, важливою мовою, але R також у своїй галузі. Але коли гума справді повинна відповідати дорозі в науці Fortran і C (а для деяких C ++) буде важко витіснити.


1

Ключовою особливістю R є те, що це бібліотека пакетів, наскільки це мова програмування. Кожен автор програми має в принципі доступ до того, що є в кожному іншому пакеті. Це різко зменшує потребу в переосмисленні, передокументуванні, повторному навчанні. Це стосується як авторів пакунків, так і користувачів. Зрозуміло, ця інфраструктура коштує дорого. Автори упаковки повинні відповідати стандартам, які стають все більш вибагливими з плином часу. Дещо з цього може переплисти те, з чим стикаються користувачі.

У Python, як я розумію, немає системи управління пакетами. Не існує еквівалента всеосяжної мережі архівів R ( http://cran.r-project.org ) і немає прямого еквівалента переглядів R завдання ( http://cran.csiro.au/web/views/ ). Таким чином, це в тій мірі, що не стосується R, інструмент для програмістів, які працюють значно більше, ніж самостійно, а не як частина комунітарних зусиль, щоб наростити те, що вже є.

Для аналізу даних та машинного навчання, попитом, безумовно, дуже важливо розвиватись та використовувати здібності, які вже є. Для більш загальних завдань програмування Python цілком може мати переваги. Чи будете ви робити цей вид роботи достатньо, щоб виправдати зусилля, пов'язані з вивченням Python?


3
У Python є система управління пакетами під назвою pip. Він не є частиною стандартної бібліотеки, але він поставляється зі стандартним Python, починаючи з Python 3.4, який вийде у наступному місяці (березень 2014 року).
Коді Пірсолл

2
Еквівалент Python всеосяжної мережі R Archive - це PyPI: pypi.python.org/pypi
Вілфред Х'юз
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.