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.
Если вам понравилась эта статья, не забудьте оставить аплодисменты :-)