Похоже, что во многих руководствах или руководствах описательная часть R и python сосуществуют как дополнительные компоненты процесса анализа. Однако на мой неподготовленный взгляд кажется, что оба языка делают одно и то же.
Поэтому мой вопрос: существуют ли действительно специализированные ниши для двух языков или это просто личное предпочтение - использовать один или другой?
Ответы:
Они дополняют друг друга. Это правда, что оба могут делать одно и то же, но это можно сказать о большинстве языков. У каждого есть свои сильные и слабые стороны. Общая точка зрения заключается в том, что Python лучше всего подходит для сбора и подготовки данных, а также для текстового анализа. R считается лучшим для анализа данных, так как это в первую очередь статистический язык.
В R есть шведский стол с пакетами для всего, что только можно придумать, но его основным элементом является статистический анализ - от простого хи-квадрат до факторного анализа и моделей угроз - это просто и надежно. Некоторые из самых больших имен в статистике создают пакеты R, и у него есть живое сообщество, которое поможет вам в любой ситуации.
ggplot2
является стандартом в визуализации данных (графики и т. д.). R - векторизованный язык, созданный для эффективного прохождения данных. Он также хранит все данные в ОЗУ, которое является обоюдоострым мечом - он быстро работает с небольшими наборами данных (хотя некоторые могут поспорить со мной), но он не может хорошо обрабатывать большие данные (хотя у него есть пакеты, чтобы обойти это такой какff
).Python значительно проще в изучении, чем R - особенно для тех, кто имеет опыт программирования. R просто ... странно. Python отлично справляется с поиском данных и является языком, который можно использовать для веб-поиска (причем с удивительным
beautifulsoup
). Python известен своей силой в разборе строк и манипулировании текстом.pandas
это отличная библиотека для манипулирования данными, слияния, преобразования и т. д., и она быстра (и, вероятно, вдохновлена R).Python великолепен, когда вам нужно немного программировать. Это не удивительно, поскольку это язык общего назначения. R, однако, со всеми его расширениями был построен статистиками для статистиков. Таким образом, хотя Python может быть проще, лучше и быстрее во многих приложениях, R станет платформой для статистического анализа.
источник
data.table
пакет в R специально предназначен для эффективной работы с большими наборами данных, а также для тонкой связи с распределенной обработкой.data.table
; Я также рад сказать,rvest
что это ОТЛИЧНЫЙ инструмент для обработки большинства задач по очистке, и его намного легче запустить и запустить, чемbeautifulsoup
Я попытаюсь сформулировать ответ, касающийся основных моментов, в которых эти два языка вступают в игру для науки о данных / статистики / анализа данных и тому подобного, как человек, который использует оба.
Рабочий процесс в анализе данных обычно состоит из следующих шагов:
Получение данных
99% времени, процесс извлечения данных сводится к тому, запрашивая какую - то базу данных SQL или Impala: как Python и R имеют конкретных клиентов или библиотеки , которые делают работу в кратчайшие сроки и одинаково хорошо (
RImpala
,RmySQL
для R иMySQLdb
для Python работать плавно, добавить не особо). Когда дело доходит до чтения внешних файлов .csv,data.table
пакет для R предоставляет функцию,fread
которая мгновенно считывает огромные и сложные файлы .csv с любой настраиваемой опцией синтаксического анализа и преобразует результат непосредственно во фреймы данных с именами столбцов и номерами строк.Организация фреймов данных
Мы хотим, чтобы данные были сохранены в какой-то таблице, чтобы мы могли легко получить доступ к любой отдельной записи, строке или столбцу.
R пакет
data.table
обеспечивает непревзойденные способы ярлыка, переименовывать, удалять и получить доступ к данным. Стандартный синтаксис очень похож на SQL, какdt[i, j, fun_by]
, где это должно бытьdt[where_condition, select_column, grouped_by (or the like)]
; Там же, как и вj
предложении, могут быть добавлены пользовательские пользовательские функции , так что вы можете совершенно свободно манипулировать данными и применять любую сложную или необычную функцию к группам или подмножествам (например, взять i-ю строку, k-ю). элемент и суммируйте его с (k-2) -ым элементом (i-1) -ой строки тогда и только тогда, когда стандартное отклонение всего столбца будет таким, как оно есть, сгруппированным по последнему столбцу в целом). Посмотрите на тесты и на этот другой удивительный вопрос о SO, Сортировка, удаление и переименование столбцов и строк выполняют то, что они должны делать, а стандартные векторизованные методы Rapply, sapply, lapply, ifelse
выполняют векторизованные операции над столбцами и фреймами данных в целом, не просматривая каждый элемент (помните, что всякий раз, когда вы используете циклы в R, делаю это неправильно).Оружие Python - это
pandas
библиотека. Наконец, он предоставляет структуруpd.DataFrame
(которой нет в стандартном Python по неизвестной мне причине), которая обрабатывает данные такими, какие они есть, а именно кадрами данных (вместо некоторыхnumpy array, numpy list, numpy matrix
или чего-то еще). Операции, такие как группирование, переименование, сортировка и т. П., Могут быть легко достигнуты, и здесь пользователь также может применить любую пользовательскую функцию к сгруппированному набору данных или подмножеству фрейма, используя Pythonapply
илиlambda
. Мне лично не нравится грамматикаdf[df.iloc(...)]
для доступа к записям, но это всего лишь личный вкус и никаких проблем. Тесты для операций группировки по-прежнему немного хуже, чем у R,data.table
но если вы не хотите сэкономить 0,02 секунды для компиляции, большой разницы в производительности нет.Струны
R способ лечения строк заключается в использовании
stringr
пакет , который позволяет любой текст манипуляции, анаграмма, регулярное выражение, завершающие пробелы или подобное с легкостью. Его также можно использовать в сочетании с библиотеками JSON, которые распаковывают словари JSON и выводят список их элементов, так что у вас есть окончательный фрейм данных, в котором имена столбцов и элементы являются такими, какими они должны быть, без каких-либо символов, отличных от UTF8, или пробелов там.Python's Pandas
.str.
выполняет ту же работу, играя с регулярными выражениями, трейлингом или иным образом, так же хорошо, как его конкурент, поэтому даже здесь нет большой разницы во вкусе.Применение моделей
Вот где, на мой взгляд, возникают различия между двумя языками.
римеет на сегодняшний день непревзойденный набор библиотек, которые позволяют пользователю по существу делать все, что он хочет, в одну-две строки кода. Стандартные функциональные или полиномиальные регрессии выполняются в виде одной строки и дают выходные данные, коэффициенты которых легко читаются, сопровождаются соответствующими им доверительными интервалами и распределением p-значений. Аналогично для кластеризации, а также для моделей случайных лесов, также для дендограмм, анализа главных компонентов, разложения по сингулярным значениям, подбора логистики и многого другого. Вывод для каждого из вышеперечисленных, скорее всего, идет с определенным классом построения, который генерирует визуализации того, что вы только что сделали, с цветами и пузырьками для коэффициентов и параметров. Тесты гипотез, статистические тесты, Шапиро,
Python пытается идти в ногу с
SciPy
иscikit-learn
. Большая часть стандартного анализа и моделей также доступны, но они немного длиннее для написания кода и менее интуитивно понятны (на мой взгляд). Более сложные механизмы отсутствуют, хотя некоторые из них можно проследить до некоторых комбинаций уже существующих библиотек. Одна вещь, которую я предпочитаю делать в Python, а не в R, - это анализ текста с использованием би-граммов, триграмм и более высоких порядков.Представлять результаты
Оба языка имеют прекрасные инструменты построения графиков,
ggplot2
прежде всего R и соответствующий эквивалент Python. На самом деле не так уж много, чтобы конкурировать, они делают свою работу в целости и сохранности, хотя я считаю, что если вы представляете результаты, вам, возможно, придется использовать другие инструменты - там есть причудливые красочные инструменты дизайна, и ни Python, ни R не предназначены для того, чтобы удивить аудитория с модным красно-зеленым перетаскиванием. В последнее время R опубликовала множество улучшений своихshiny app
функций, которые в основном позволяют создавать интерактивные результаты . Я никогда не хотел изучать это, но я знаю, что это там, и люди используют это хорошо.Примечание
В качестве дополнительного примечания я хотел бы подчеркнуть, что основное различие между этими двумя языками заключается в том, что Python является языком программирования общего назначения, созданным и предназначенным для информатики, переносимости, развертывания и т. Д. И т. Д. Он удивителен тем, что он делает, и его легко узнать; нет никого, кто не любит питона. Но это язык программирования для программирования.
рс другой стороны, был изобретен математиками, физиками, статистиками и специалистами по данным и для них. Если вы пришли из этого фона, все имеет смысл, потому что он идеально отражает и воспроизводит понятия, используемые в статистике и математике. Но если вместо этого вы пришли из области компьютерных наук и хотите имитировать Java или C в R, вы будете разочарованы; у него нет «объектов» в стандартном смысле (ну, он есть, но не то, что обычно думают, что они ...), у него нет классов в стандартном смысле (ну, у него есть, но не то, что обычно думает, что они ...), у него нет «указателей» или всех других структур информатики - но только потому, что они им не нужны. Последний по порядку, но не по значимости: документацию и пакеты легко создавать и читать (если вы используете Rstudio); существует большое и страстное сообщество, и Google буквально за пять секунд "как сделать вставку-случайную проблему в R", чья первая запись перенаправляет вас на решение проблемы (сделанное кем-то другим) с соответствующим кодом , моментально.
Большинство промышленных компаний имеют свою инфраструктуру, построенную на Python (или дружественной к Python среде), которая позволяет легко интегрировать код Python (
import myAnalysis
где угодно, и вы в основном сделали). Однако любая современная технология, сервер или платформа легко запускает фоновый R-код без каких-либо проблем.источник
Python - это общий язык программирования, поэтому он полезен для выполнения многих других задач в дополнение к анализу данных. Например, если мы хотим автоматизировать выполнение нашей модели на производственном сервере, то Python - действительно хороший выбор. Другие примеры включают подключение к оборудованию / датчикам для чтения данных, взаимодействие с базами данных (реляционные или неструктурированные данные, такие как JSON), анализ данных, сетевое программирование (TCP / IP), графический интерфейс пользователя, взаимодействие с оболочкой и т. Д. (Ну, Зачем ученому, работающему с данными, хотеть выполнять так много таких задач, которые имеют мало общего с прогностическими моделями? Я думаю, что у людей разные определения Что такое ученый, работающий с данными?В некоторых организациях анализ данных и проведение описательного анализа с помощью панели мониторинга достаточно хороши для бизнеса, а данные недостаточно зрелы для выполнения прогнозных моделей. С другой стороны, во многих небольших компаниях люди могут ожидать, что ученые, занимающиеся данными, займутся разработкой программного обеспечения. Знание Python сделает вас независимым от других разработчиков программного обеспечения.)
R имеет много статистических пакетов, которые намного лучше, чем python или MATLAB. Используя R, можно реально мыслить на уровне модели, а не на уровне детализации реализации. Это огромное преимущество при разработке статистических моделей. Например, многие люди вручную внедряют нейронные сети в python; выполнение такой работы может не помочь понять, почему нейронные сети работают, а просто следовать рецепту, чтобы дублировать работу других, чтобы проверить, работает ли она. Если мы работаем в R, мы можем легко сосредоточиться на математике за моделью, а не на деталях реализации.
Во многих случаях люди используют их вместе. Построение программного обеспечения легко в Python, а построение моделей лучше в R. Если мы хотим представить модель в производстве, но не на бумаге, нам могут понадобиться оба варианта. Если в вашей компании много инженеров-программистов, вам может потребоваться больше R. А если в вашей компании много ученых-исследователей, вам может понадобиться больше python.
источник
scikit-learn
? scikit-learn.org/stableПрограммисты всех мастей недооценивают, насколько выбор языка является культурным . Веб-разработчики, такие как Node.js. Ученым нравится Питон. Как инженер-программист полиглота, который в равной степени может справиться с текучестью Javascript и жесткостью Java, я понял, что нет никакой внутренней причины, по которой эти языки плохи в работе друг друга - просто огромное количество пакетов, документации, сообществ, книг, и т.д., окружающих их.
(По внутренним причинам один случайный язык лучше, чем какой-либо другой, см. Предстоящие комментарии к этому ответу.)
Мой личный прогноз заключается в том, что Python - это путь в будущее, потому что он может делать все, что может R, или, точнее, достаточно того, что R может сделать, что специальные программисты работают над заполнением пробелов, и является гораздо лучшим языком разработки программного обеспечения. Программная инженерия - это дисциплина, которая занимается:
Плюс, откровенно говоря, Python легче учиться.
Ученые и статистики поймут, что они являются заинтересованными сторонами в хорошей практике разработки программного обеспечения, а не независимой и беспристрастной профессией. Просто мое мнение, но статьи, доказывающие хрупкость академического кодекса, поддержат это.
Этот ответ полностью соответствует моему мнению, но вы задали очень самоуверенный вопрос, и, поскольку он был хорошо принят, я чувствовал, что вы заслуживаете в ответ непритязательного, достаточно обоснованного (я надеюсь!) Мнения. Существует серьезный аргумент в пользу Python по поводу R, и я бы упустил попытку опубликовать беспартийный ответ, когда реальность сама может быть партизанской.
источник
Я пользователь R, но я думаю, что Python - это будущее (я не думаю, что это синтаксис)
Python - это будущее
Преимущество Python состоит в том, что другие люди уже упоминали о гораздо более широкой поддержке и, для программистов, более логичном синтаксисе.
Кроме того, возможность, с помощью которой вы можете преобразовать результаты анализа в производственную систему, гораздо проще.
Возможно, это из-за того, что Python является универсальным, а R - нет, но даже я поднимаю брови, когда вижу производимый R-конвейер.
Но не только это, даже для продвинутых приложений Python быстро догоняет (Scikit-learn, PyBrain, Tensorflow и т. Д.), И хотя R по-прежнему является языком общения в академических кругах по внедрению статистических методов, Python добился огромных успехов в профессиональном секторе благодаря Появление передовых специализированных библиотек.
Но R - не плохо.
Многие люди, похоже, любят прыгать в «R с плохим синтаксисом».
Я хотел бы предложить синтаксис R, чтобы быть хорошим!
Функции назначения, отложенная оценка, нестандартная оценка и формулы являются огромными преимуществами при использовании R.
Это просто экономит столько времени, что вам не нужно беспокоиться об экранировании имен переменных, на которые есть ссылки в вашем резюме, или о том, как построить логику того, что моделируется на основе чего или просматривая имена с помощью,
names()
а затем присваивая новые имена, добавляя<- c("A", "B", "C")
.Когда люди жалуются на странный синтаксис R, они рассматривают его как язык программирования, а не как инструмент для обработки данных.
Как кто-то из R и любящий dplyr, я нахожу синтаксис панд немного неуклюжим по сравнению.
Да, это немного более гибко, но для большинства задач вам требуется гораздо больше нажатий клавиш для выполнения простой команды, чем в R, которые просто используются для удовлетворения синтаксического анализатора Python, а не для выражения вашей идеи.
Подводя итоги
Конечно, разумно знать и то, и другое, и в то время как Python делает это, выбор дизайна R для конкретного домена просто упрощает его для специальной работы. Огромный недостаток R заключается в том, что трудно покинуть его домен, что вам, в основном, необходимо сделать, как только вы попытаетесь реализовать свои выводы на устойчивой основе.
источник
Если вы смотрите на R как на статистический инструмент, а не на язык программирования, это действительно здорово. Он обладает гораздо большей гибкостью, чем Stata или SPSS, но также может делать все, что может. Я изучал Stata во время учебы в колледже, и на R было достаточно легко смотреть, потому что у меня уже была перспектива статистического инструмента, а не опыт чистого языка программирования, который могли бы иметь другие.
Я думаю, что разочарование в R начинает играть, когда программисты пытаются учиться и понимать R; но это отличный инструмент для тех, кто приходит в R через статистический фон.
Python великолепен, если вы уже отличный программист; но для меня как для новичка в программировании и статистике только после окончания колледжа R был гораздо лучшим выбором. Это действительно просто предпочтение, которое соответствует вашему набору навыков и интересует больше.
источник
Добавление к некоторым из предыдущих ответов:
По моему опыту, нет ничего проще, чем использовать dplyr + tidyr, ggplot и Rmarkdown от R для получения необработанных данных и представления результатов. Python предлагает много, и я использую его все больше и больше, но мне, безусловно, нравится, как пакеты Хэдли связываются вместе.
источник
Python широко применяется за пределами науки, поэтому вы извлекаете из этого пользу. Как указывает «Angry Guide to R», R был разработан сообществом, в котором были первоочередные разработчики программного обеспечения.
Я бы сказал, что сегодня R обладает двумя основными преимуществами: некоторые действительно зрелые узкоспециализированные пакеты в некоторых областях и современный воспроизводимый исследовательский пакет knitr.
Кажется, Python лучше подходит для всего остального.
Это мнение конечно, так как почти все в этой теме. Я немного удивлен, что эта нить еще жива.
источник
Как описано в других ответах, Python является хорошим языком программирования общего назначения, в то время как R имеет серьезные недостатки в качестве языка программирования, но имеет более богатый набор библиотек анализа данных. В последние годы Python догоняет R с разработкой зрелых библиотек анализа данных, таких как scikit-learn, тогда как R никогда не будет исправлен. На практике я использую Python (на самом деле, Hy ) почти для всего и обращаюсь к R только для относительно эзотерических методов, таких как квантильная регрессия (реализация которых в statsmodels Python, похоже, нарушена). Есть несколько способов вызова R из Python; PypeR достаточно прост, чтобы я мог работать в таких агрессивных средах, как сервер Windows.
Изменить : Я призываю всех, кто хотел бы обсудить это дальше, поговорить с авторами связанного эссе, а не комментировать этот ответ.
источник