R против Python - споры продолжаются. Между тем, мы пытаемся пойти по среднему пути и создать скрипт Python, имитирующий удобные функции в стиле R, для простого и удобного сбора статистики!

Вступление

Python против R - одна из величайших современных битв науки о данных и машинного обучения. Нет сомнений в том, что за последние годы оба они приобрели огромные возможности и стали лучшими языками программирования для анализа данных, прогнозной аналитики и машинного обучения. Фактически, в недавней статье от IEEE, Python обогнал C ++ как лучший язык программирования 2018 года, а R прочно занял свое место в десятке лучших.

Однако между этими двумя принципами есть несколько принципиальных различий. R разрабатывался в первую очередь как инструмент для статистического анализа и быстрого прототипирования задачи анализа данных. Python, с другой стороны, был разработан как современный объектно-ориентированный язык общего назначения в том же духе, что и C ++ или Java, но с более простой кривой обучения и более гибким поведением. Следовательно, R продолжает оставаться чрезвычайно популярным среди статистиков, количественных биологов, физиков и экономистов, в то время как Python постепенно превратился в лучший язык для повседневного написания сценариев, автоматизации, серверной веб-разработки, аналитики и общего фреймворки машинного обучения с обширной базой поддержки и работой сообщества разработчиков с открытым исходным кодом.

Имитация функционального программирования в среде Python?

Функциональная природа программирования R предоставляет пользователям чрезвычайно простой и компактный интерфейс для быстрых вычислений вероятностей и важной описательной / логической статистики для задачи анализа данных. Например, было бы здорово ответить на следующий вопрос с помощью всего лишь одного компактного вызова функции?

Как рассчитать среднее / медианное значение / режим вектора данных?

Как рассчитать кумулятивную вероятность некоторого события, соответствующего нормальному распределению? как насчет распределения Пуассона?

Как рассчитать межквартильный диапазон ряда точек данных?

Как сгенерировать несколько случайных чисел по t-распределению Стьюдента?

Среда программирования R позволяет вам это делать.

С другой стороны, возможность написания сценариев Python позволяет аналитику использовать эту статистику в широком спектре аналитических конвейеров с безграничной изощренностью и творчеством.

Чтобы объединить преимущества обоих миров, нужна простая библиотека-оболочка на основе Python, которая содержит наиболее часто используемые функции, относящиеся к распределению вероятностей и описательной статистике, определенной в R-стиле, поэтому что пользователи могут вызывать эти функции очень быстро, не обращаясь к нужным статистическим библиотекам Python и выясняя весь список методов и аргументов.

Скрипт-оболочка Python для наиболее удобных R-функций

Я написал сценарий Python для определения наиболее удобных и широко используемых R-функций в простом статистическом анализе - на Python. После импорта этого скрипта вы сможете естественным образом использовать эти R-функции, как в среде программирования R.

Цель этого сценария - предоставить простые подпрограммы Python, имитирующие статистические функции R-стиля, для быстрого вычисления оценок плотности / точек, кумулятивных распределений, квантилей и генерации случайных переменных для различных важных распределений вероятностей.

Чтобы сохранить дух стиля R, иерархия классов не использовалась, и в этом файле определены только необработанные функции, чтобы пользователь мог импортировать этот скрипт Python и использовать все функции, когда они ему / ей нужны, с помощью одного вызова имени.

Обратите внимание: я использую слово имитировать. Ни при каких обстоятельствах я не претендую на подражание истинной парадигме функционального программирования R, которая состоит из глубокой настройки среды и сложных взаимосвязей между этими средами и объектами. Этот сценарий просто позволяет мне (и, надеюсь, бесчисленному количеству других пользователей Python) быстро запустить программу Python или записную книжку Jupyter, импортировать сценарий и в кратчайшие сроки начать выполнять простую описательную статистику. Это цель, ни больше, ни меньше.

Или вы могли писать код на R в своей аспирантуре и только начинали изучать и использовать Python для анализа данных. Вы будете счастливы увидеть и использовать одни и те же хорошо известные функции в своем блокноте Jupyter так же, как вы использовали в среде R.

Какой бы ни была причина, это весело :-)

Простые примеры

Для начала просто импортируйте скрипт и начните работать со списками чисел, как если бы они были векторами данных в R.

from R_functions import *
lst=[20,12,16,32,27,65,44,45,22,18]
<more code, more statistics...>

Например, вы хотите рассчитать сводку Пять чисел Таки из вектора точек данных. Вы просто вызываете одну простую функцию fivenum и передаете вектор. Он вернет пятизначную сводку в массиве Numpy.

lst=[20,12,16,32,27,65,44,45,22,18]
fivenum(lst)
> array([12. , 18.5, 24.5, 41. , 65. ])

Или вы хотите узнать ответ на следующий вопрос.

Предположим, что машина производит 10 готовой продукции в час в среднем со стандартным отклонением 2. Схема выпуска соответствует почти нормальному распределению. Какова вероятность того, что машина выдаст не менее 7, но не более 12 единиц в следующий час?

По сути, ответ таков:

Вы можете получить ответ с помощью всего одной строчки кода, используя pnorm

pnorm(12,10,2)-pnorm(7,10,2)
> 0.7745375447996848

Или следующее,

Предположим, у вас есть заряженная монета с вероятностью 60% поворачивать голову каждый раз, когда вы ее подбрасываете. Вы играете в игру из 10 бросков. Как построить и обозначить шансы на все возможное количество выигрышей (от 0 до 10) с этой монетой?

Вы можете получить красивую гистограмму с помощью всего нескольких строк кода и одной функции dbinom

probs=[]
import matplotlib.pyplot as plt
for i in range(11):
    probs.append(dbinom(i,10,0.6))
plt.bar(range(11),height=probs)
plt.grid(True)
plt.show()

Простой интерфейс для расчета вероятностей

R предлагает чрезвычайно упрощенный и интуитивно понятный интерфейс для быстрого расчета на основе основных распределений вероятностей. Интерфейс выглядит так…

  • d {distirbution} - выдает значение функции плотности в точке x.
  • p {distirbution} - дает совокупное значение в точке x
  • q {distirbution} - выдает значение функции квантиля с вероятностью p.
  • r {distirbution} - генерирует одну или несколько случайных переменных.

В нашей реализации мы придерживаемся этого интерфейса и связанного списка аргументов, чтобы вы могли выполнять эти функции точно так же, как в среде R.

Реализованные в настоящее время функции

В настоящее время в скрипте реализованы следующие функции R-стиля для быстрого вызова.

  • Среднее, медиана, дисперсия, стандартное отклонение
  • Пятизначная сводка Таки, IQR
  • Ковариация матрицы или двух векторов
  • Плотность, кумулятивная вероятность, функция квантиля и случайные переменные для следующих распределений - нормального, равномерного, биномиального, Пуассона, F, Стьюдента, хи-квадрат, бета и гамма.

Работа в процессе…

Очевидно, это работа, и я планирую добавить в этот скрипт несколько более удобных R-функций. Например, в R одна строка команды lm может дать вам обычную модель, подобранную по методу наименьших квадратов, для набора числовых данных со всей необходимой статистикой вывода (P-значения, стандартная ошибка и т. Д.). Это очень кратко и компактно! С другой стороны, стандартные проблемы линейной регрессии в Python часто решаются с помощью Scikit-learn, для чего требуется немного больше сценариев. Я планирую включить эту функцию подгонки линейной модели с единственной функцией, используя бэкэнд Python statsmodels.

Если вам нравится этот скрипт и вы находите его применение в своей работе, пожалуйста, поставьте звезду / форк моего репозитория GitHub и распространяйте новости.

Если у вас есть какие-либо вопросы или идеи, которыми вы хотите поделиться, свяжитесь с автором по адресу tirthajyoti [AT] gmail.com. Кроме того, вы можете проверить авторские репозитории GitHub на предмет других забавных фрагментов кода на Python, R или MATLAB и ресурсов машинного обучения. Если вы, как и я, увлечены машинным обучением / наукой о данных, пожалуйста, не стесняйтесь добавить меня в LinkedIn или подписаться на меня в Twitter.

Если вам понравилась эта статья, не забудьте оставить аплодисменты :-)