Справочная информация: я специалист по данным в стартапе в Остине, и я учусь в аспирантуре (физика). Я использую Python для анализа данных, но немного использую R. Я также использую C # / .NET и Java (почти ежедневно), я интенсивно использовал C ++ в аспирантуре.
Я думаю, что главная проблема с использованием Python для чисел (более R) - размер сообщества пользователей. Поскольку язык существует вечно, многие люди делают то, что вы, вероятно, захотите делать. Это означает, что, столкнувшись с трудной проблемой, вы можете просто скачать пакет и приступить к работе. И R «просто работает»: вы даете ему набор данных, и он знает, какие сводные статистические данные полезны. Вы даете ему некоторые результаты, и он знает, какие участки вы хотите. Все общие сюжеты, которые вы хотели бы сделать, есть, даже некоторые довольно эзотерические, которые вам придется посмотреть в Википедии. Как хорошо, как scipy / numpy / pandas / statsmodels / и т. Д. для Python, они не на уровне стандартной библиотеки R.
Основное преимущество Python перед R состоит в том, что это настоящий язык программирования в семействе C. Он легко масштабируется, поэтому вполне возможно, что все, что у вас есть в песочнице, может быть использовано в производстве. В Python встроена объектная ориентация, в отличие от R, где он ощущается как запоздалая мысль (потому что это так). Есть и другие вещи, которые Python делает хорошо: многопоточность и параллельная обработка довольно просты, и я не уверен, так ли это в R. А изучение Python также дает вам мощный инструмент написания сценариев. Есть также действительно хорошие (бесплатные) IDE для Python, гораздо лучшие, если вы готовы заплатить (менее 100 долларов), и я не уверен, что это относится к R - единственная R IDE, о которой я знаю, это R Studio, которая довольно хороша, но не так хороша, как PyDev + Eclipse, по моему опыту.
Я добавлю это как кикер: поскольку вы еще учитесь в школе, вы должны подумать о работе. Вы найдете больше вакансий для высококвалифицированных разработчиков Python, чем для высококвалифицированных разработчиков R. В Остине рабочие места для разработчиков Django как бы падают с неба. Если вы действительно хорошо знаете R, есть несколько мест, где вы сможете использовать этот навык (например, Revolution Analytics), но многие магазины, похоже, используют Python. Даже в области анализа данных / науки о данных все больше людей обращаются к Python.
И не стоит недооценивать, что вы можете работать с / для людей, которые знают (скажем) только Java. Эти люди смогут легко прочитать ваш код на Python. Это не обязательно будет иметь место, если вы выполняете всю свою работу в R. (Это происходит из опыта.)
Наконец, это может звучать поверхностно, но я думаю, что документация 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 делает упор на удобочитаемость (поиск в «Pythonic»), наличие хороших бесплатных IDE, тот факт, что он входит в семейство языков C, вы получаете большую выгоду набор навыков и всеохватывающий стиль документации этого языка, я бы посоветовал сделать Python идеальным вариантом и полагаться на R только в случае необходимости.
Хорошо, это (безусловно) мой самый популярный ответ на стек-сайте, и он даже не № 1 :) Я надеюсь, что это помогло нескольким людям на этом пути.
Во всяком случае, я пришел к следующему выводу после нескольких лет в этой области:
Возможно, это неправильный вопрос.
Задавать вопрос «Должен ли я изучить эту технологию» - плохой вопрос. Почему?
- Технологические изменения. Вам всегда придется изучать другую технологию. Если вы работаете в Twitter, они запускают Scala. В некоторых местах есть магазины Python. В некоторых местах все равно. Вас не будут нанимать, потому что вы знаете или не знаете какую-то конкретную технологию - если вы не можете изучить новую технологию, вы можете (и должны быть) уволены. Это похоже на то, что если выходит новый трубный гаечный ключ, и вы сантехник, и вы не можете понять, как работает новый трубный гаечный ключ, вы, вероятно, довольно паршивый сантехник.
- Учитывая выбор «Я изучаю эту технологию» или «Я трачу больше времени на решение реальных проблем», вы всегда должны выбирать последнее без исключения.
Как специалист по данным, ваша задача - решать проблемы . Этот кусочек мудрости почти всегда теряется на каждой конференции или встрече, на которую вы ходите - все разговоры о «больших данных», которые я когда-либо видел, были сосредоточены на технологиях, а не на решении проблем. Фактическое решение проблемы обычно сводится к нескольким слайдам в конце:
[Talk title = "Глубокое обучение в Cool New Startup"] ... [45 минут диаграмм и технобелев, в течение которых я отключаюсь и проверяю свой телефон] ... И после внедрения нашего кластера Hadoop и [Бен отключает зоны снова] мы можем выполнить нашу рутину глубокого обучения, [проснись: вот почему я пришел!] детали которой являются собственностью. Вопросов?
Это создает плохое впечатление о том, что поле связано с технологиями, и это просто неправда. Если вы действительно хороши в Scala, Python или R, но действительно плохо решаете проблемы, вы станете паршивым исследователем данных .
Пако Натан был в Остине несколько месяцев назад на однодневной конференции «Большие данные» и сказал что-то вроде «Химия - это не пробирки». Это в значительной степени подводит итог: наука о данных - это не Scala, Hadoop, Spark и все, что всплывают другие технологии. В конце концов, я хочу нанять людей, которые думают, а не людей, которые умеют использовать Stack Overflow для изучения наборов инструментов.
Аналогично, если вы идете на собеседование, а вас не нанимают только потому, что вы не знаете какой-либо язык программирования, то эта компания отстой . Они не понимают, что означает «ученый данных», и, вероятно, для вас будет лучше, если это не сработает.
Наконец, если ваши способности решать проблемы незначительны (будьте честны с самим собой), или вы действительно просто наслаждаетесь технологической стороной вещей, или изучение технологий - это то, что вы действительно любите (опять же, будьте честными), тогда изучите много технологий. Вы всегда сможете найти роли типа «инженер данных», которые соответствуют вашему набору навыков. Это не плохо, инженеры по обработке данных смазывают колеса и позволяют вам выполнять свою работу в качестве ученого по обработке данных. (Разница между архитектором программного обеспечения и командой разработчиков.)