Я программирую около года, и я действительно заинтересован в анализе данных и машинном обучении. Я принимаю участие в нескольких онлайн-курсах и читаю несколько книг.
Все, что я делаю, использует либо R, либо Python, и я ищу предложения о том, должен ли я концентрироваться на одном языке (и если да, то на каком) или продолжать с обоими; они дополняют друг друга?
- Я должен отметить, что я использую C # в школе, но знаком с Python через самообучение.
python
machine-learning
r
The_Cthulhu_Kid
источник
источник
Ответы:
Я использую оба языка 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: или эта цитата из этого поста :
источник
Справочная информация: я специалист по данным в стартапе в Остине, и я учусь в аспирантуре (физика). Я использую 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, чтобы делать то, что вы хотите, а затем либо:
Используйте Python для того, в чем Python хорош, и заполните пробелы одним из перечисленных выше. Это мой обычный рабочий процесс - я обычно использую R для построения графиков, а Python для тяжелой работы.
Итак, подведем итог: из-за того, что Python делает упор на удобочитаемость (поиск в «Pythonic»), наличие хороших бесплатных IDE, тот факт, что он входит в семейство языков C, вы получаете большую выгоду набор навыков и всеохватывающий стиль документации этого языка, я бы посоветовал сделать Python идеальным вариантом и полагаться на R только в случае необходимости.
Хорошо, это (безусловно) мой самый популярный ответ на стек-сайте, и он даже не № 1 :) Я надеюсь, что это помогло нескольким людям на этом пути.
Во всяком случае, я пришел к следующему выводу после нескольких лет в этой области:
Задавать вопрос «Должен ли я изучить эту технологию» - плохой вопрос. Почему?
Как специалист по данным, ваша задача - решать проблемы . Этот кусочек мудрости почти всегда теряется на каждой конференции или встрече, на которую вы ходите - все разговоры о «больших данных», которые я когда-либо видел, были сосредоточены на технологиях, а не на решении проблем. Фактическое решение проблемы обычно сводится к нескольким слайдам в конце:
Это создает плохое впечатление о том, что поле связано с технологиями, и это просто неправда. Если вы действительно хороши в Scala, Python или R, но действительно плохо решаете проблемы, вы станете паршивым исследователем данных .
Пако Натан был в Остине несколько месяцев назад на однодневной конференции «Большие данные» и сказал что-то вроде «Химия - это не пробирки». Это в значительной степени подводит итог: наука о данных - это не Scala, Hadoop, Spark и все, что всплывают другие технологии. В конце концов, я хочу нанять людей, которые думают, а не людей, которые умеют использовать Stack Overflow для изучения наборов инструментов.
Аналогично, если вы идете на собеседование, а вас не нанимают только потому, что вы не знаете какой-либо язык программирования, то эта компания отстой . Они не понимают, что означает «ученый данных», и, вероятно, для вас будет лучше, если это не сработает.
Наконец, если ваши способности решать проблемы незначительны (будьте честны с самим собой), или вы действительно просто наслаждаетесь технологической стороной вещей, или изучение технологий - это то, что вы действительно любите (опять же, будьте честными), тогда изучите много технологий. Вы всегда сможете найти роли типа «инженер данных», которые соответствуют вашему набору навыков. Это не плохо, инженеры по обработке данных смазывают колеса и позволяют вам выполнять свою работу в качестве ученого по обработке данных. (Разница между архитектором программного обеспечения и командой разработчиков.)
источник
Итак, я прежде всего сделал анализ данных в Matlab, но сделал некоторые в Python (и больше использовал Python для общего назначения), а также я начал немного R. Я собираюсь пойти против структуры и предлагаю вам использовать Python. Причина в том, что вы выполняете анализ данных с точки зрения машинного обучения, а не статистики (где доминирует R) или цифровой обработки сигналов (где доминирует Matlab).
Очевидно, что между машинным обучением и статистикой много общего. Но совпадение не идентичность. Машинное обучение использует идеи из CS, которые я, например, не хотел бы реализовывать в R. Конечно, вы можете вычислить минимальное связующее дерево в R. Хотя это может выглядеть как ужасный беспорядок. Люди, обучающиеся машинному обучению, предполагают, что у вас есть легкий доступ к хеш-таблицам, деревьям двоичного поиска и т. Д. В моем понимании, проще реализовать алгоритм статистики заново, когда это необходимо, чем пытаться вставить то, что в основном является предметно-ориентированным языком, в общий язык программирования.
Побочные преимущества Python для анализа данных также намного выше. В то же время вы выучите настоящий язык программирования, который может обрабатывать скрипты, создавать большие приложения и т. Д. R - действительно нишевой язык сообщества статистики, даже Matlab используется гораздо более широко.
Я полагаю, что сначала я посмотрю на некоторые статьи и выясню, на каком языке они публикуют код. Если это не в R, то не используйте его.
источник
Как ученый старой школы (более 50 лет), который использует и продолжает использовать ряд этих инструментов, я добавлю два своих цента. Я работал с коллегами, которые до сих пор пишут каждый фрагмент кода на Фортране, от тривиальных одноразовых заданий по анализу данных до кода, который доминирует в некоторых суперкомпьютерах мира. Недавние диалекты Фортрана (F90, F95, F2003, F2008) являются ИМХО, одними из лучших разработанных существующих языков. Многолетний опыт работы с высокопроизводительными вычислениями привел к довольно впечатляющему развитию языка.
Время от времени я использовал только Python и буду его пересматривать (в основном из-за Sage), но я использую проверенный временем набор языков, которые хорошо мне подходят. Fortran, C, Perl, R и Scheme (с tcl для сценариев VMD). Я считаю, что комбинация R и Fortran и C очень удобна. В отличие от других комментариев, сделанных относительно объектной модели в R, это хорошая объектная модель для интерактивной работы, основанная на концепции общих функций CLOS и диспетчеризации методов CLOS. Работая в интерактивном режиме с новым пакетом, вы часто можете полагаться на общие функции, такие как «печать» и «печать», чтобы сделать что-то продуктивное.
API для Fortran и C очень прост в использовании. Если вы привыкли работать в Fortran и C для моделирования и анализа данных, это большой плюс. Способность динамически генерировать R-код и оценивать его, хотя и не так чиста, как макросистемы в Lisp и C, очень полезна при работе с динамическими наборами данных.
Некоторые ограничения R для реальных данных включают подход «вызов по значению». Хотя существуют причины CS для вызова по значению, в реальном программировании с большими числовыми данными требуется некоторая форма вызова по ссылке (обратите внимание на важность общих блоков Fortran в более старом коде или данных модуля в более новом коде). Подход, принятый PDL (Perl Data Language), особенно элегантен в этом отношении. (Pdls, по сути, вызывается по ссылке, если только вы не запрашиваете копию. Sub-pdl ссылается на подраздел родительского pdl в более чистом синтаксисе, чем Fortran или C).
Хорошо учить много языков. Python, несомненно, является важным языком, но R также в своей области. Но когда резина действительно должна идти по пути науки, Fortran и C (и C ++ для некоторых) будет трудно заменить.
источник
Ключевой особенностью R является то, что это библиотека пакетов, а также язык программирования. Каждый создатель пакета, в принципе, имеет доступ к тому, что есть в каждом другом пакете. Это резко уменьшает необходимость заново изобретать, переоценивать, переучивать. Это относится как к авторам пакетов, так и к пользователям. Конечно, эта инфраструктура имеет свою цену. Авторы пакетов должны приспосабливаться к стандартам, которые становятся все более привередливыми с течением времени. Отчасти это может перетекать в то, с чем сталкиваются пользователи.
У Python, как я понимаю, нет системы управления пакетами. Не существует эквивалента всеобъемлющей архивной сети R ( http://cran.r-project.org ) и нет прямого эквивалента представлений задач R ( http://cran.csiro.au/web/views/ ). Таким образом, в некоторой степени это не относится к R, инструмент для программистов, работающих в значительной степени самостоятельно, а не как часть коммунальных усилий по созданию того, что уже доступно.
Для анализа данных и машинного обучения спрос, безусловно, в очень большой степени опирается на уже имеющиеся возможности. Для более общих задач программирования Python вполне может иметь свои преимущества. Будете ли вы выполнять эту работу достаточно, чтобы оправдать усилия по изучению Python?
источник