Передумови: Я є вченим з даних в стартапі в Остіні, і я родом зі школи (фізика). Я використовую 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, щоб робити те, що ви хочете, а потім:
- Запишіть сценарії в R та запустіть їх з Python, використовуючи модуль підпроцесу, або
- Встановіть модуль RPy.
Використовуйте Python для того, в чому Python хороший, і заповніть прогалини одним із перерахованих вище. Це мій звичайний робочий процес --- я зазвичай використовую R для складання речей, а Python - для важкого підйому.
Отже, підсумовуючи: через наголос Python на читанні (пошук у Google для "Pythonic"), наявності хороших, безкоштовних ідентифікаторів IDE, тому, що це в сімействі мов С, тим більше можливостей, що ви зможете використовувати велику користь Набір навичок та всебічний кращий стиль документації мови, я б запропонував зробити Python вашим переходом і покладатися на R лише у разі необхідності.
Гаразд, це (на сьогоднішній день) моя найпопулярніша відповідь коли-небудь на стеці, і це навіть не №1 :) Я сподіваюся, що це допомогло декільком людям на цьому шляху.
У будь-якому випадку я прийшов до наступного висновку через кілька років у цій галузі:
Це, мабуть, неправильне запитання.
Питання "чи слід вивчити цю конкретну технологію" - це погане питання. Чому?
- Змінюється технологія. Завжди доведеться вивчати іншу технологію. Якщо ви переходите до роботи в Twitter, вони запускають Scala. Деякі місця - магазини Python. Деякі місця байдуже. Вас не приймають на роботу, тому що ви знаєте чи не знаєте якоїсь конкретної техніки - якщо ви не можете навчитися новій техніці, вас можуть (і повинні) звільнити. Це як, якщо виходить новий трубний гайковий ключ, а ви сантехнік, і ви не можете зрозуміти, як працює новий гайковий ключ, ви, мабуть, досить паршивий сантехнік.
- З огляду на вибір "Чи я вивчаю цю технологію" чи "Чи витрачаю більше часу на вирішення реальних проблем", завжди слід вибирати останню, без винятку.
Як науковець, ваша робота - вирішити проблеми . Ця єдина мудрість майже завжди втрачається на кожній конференції чи зустрічах, на які ви йдете - кожна розмова про "великі дані", яку я коли-небудь бачив, була зосереджена на техніці, а не на вирішенні проблем. Дійсне вирішення проблеми зазвичай відкладається на кілька слайдів наприкінці:
[Talk title = "Глибоке навчання при Cool New Startup"] ... [45 хвилин діаграм і техно-бабелів, під час яких я зонуюсь і перевіряю свій телефон] ... І після впровадження нашого кластера Hadoop та [Ben Ben out out знову] ми можемо виконати нашу глибоку навчальну рутину, [прокинься: ось чому я прийшов!], деталі якої є власником. Питання?
Це створює погане враження, що поле стосується технологій, і це просто не так. Якщо ви справді добрі у Scala, або Python, або R, але ви справді погано вирішуєте проблеми, ви зробите неприємний науковець .
Пако Натан був в Остіні кілька місяців тому на щоденній конференції "великих даних" і сказав щось на кшталт "Хімія не пробірки". Це в значній мірі підсумовує це - наука даних не про Scala, або Hadoop, або Spark, або що-небудь інше-tech-du-jour спливає. Зрештою, я хочу найняти людей, які думають, а не людей, які вміють використовувати Stack Overflow для вивчення наборів інструментів.
Так само, якщо ви йдете на співбесіду, а вони не наймають вас тільки тому, що ви не знаєте якоїсь мови програмування, то ця компанія смокче . Вони не розуміють, що означає «науковець даних», і, мабуть, вам краще, якби це не вийшло.
Нарешті, якщо ваші здібності до вирішення проблем є незначними (будьте чесні до себе), або ви дійсно просто насолоджуєтеся технічною стороною речей, або навчання техніці - це те, що ви справді любите (знову ж таки, будьте чесними), тоді навчитеся багато техніки. Ви завжди зможете знайти ролі типу "інженер даних", які відповідають вашому набору навичок. Це не погано, інженери даних змащують колеса і дають можливість вам виконувати свою роботу науковцем. (Різниця схожа на архітектора програмного забезпечення проти команди розробників.)