Я попытаюсь сформулировать ответ, касающийся основных моментов, в которых эти два языка вступают в игру для науки о данных / статистики / анализа данных и тому подобного, как человек, который использует оба.
Рабочий процесс в анализе данных обычно состоит из следующих шагов:
- Извлечение данных из какого-либо источника (скорее всего, базы данных SQL / noSQL или файлов .csv).
- Разбор данных в приемлемом и разумном формате (фрейм данных), чтобы можно было выполнять операции и думать об этом.
- Применение некоторых функций к данным (группировка, удаление, объединение, переименование).
- Применение некоторой модели к данным (регрессия, кластеризация, нейронная сеть или любая другая более или менее сложная теория).
- Развертывание / представление ваших результатов более или менее технической аудитории.
Получение данных
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, Сортировка, удаление и переименование столбцов и строк выполняют то, что они должны делать, а стандартные векторизованные методы R apply, sapply, lapply, ifelse
выполняют векторизованные операции над столбцами и фреймами данных в целом, не просматривая каждый элемент (помните, что всякий раз, когда вы используете циклы в R, делаю это неправильно).
Оружие Python - это pandas
библиотека. Наконец, он предоставляет структуру pd.DataFrame
(которой нет в стандартном Python по неизвестной мне причине), которая обрабатывает данные такими, какие они есть, а именно кадрами данных (вместо некоторых numpy array, numpy list, numpy matrix
или чего-то еще). Операции, такие как группирование, переименование, сортировка и т. П., Могут быть легко достигнуты, и здесь пользователь также может применить любую пользовательскую функцию к сгруппированному набору данных или подмножеству фрейма, используя Python apply
или 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-код без каких-либо проблем.