R python: зачем, когда и как? / Блог компании Open Data Science / Хабр
зачем, когда и как? / Блог компании Open Data Science / Хабр
Наверное, многие из тех, кто занимается анализом данных, когда-нибудь думали о том, возможно ли использовать в работе одновременно R и Python. И если да, то зачем это может быть нужно? В каких случаях будет полезным и эффективным для проектов? Да и как вообще выбрать лучший способ совмещения языков, если гугл выдает примерно 100500 вариантов?
Давайте попробуем разобраться в этих вопросах.
Зачем
- В первую очередь, это возможность использовать преимущества двух наиболее популярных языков программирования для анализа данных на сегодняшний день. Совмещая наиболее мощные и стабильные библиотеки R и Python в некоторых случаях можно повысить эффективность расчетов или избежать изобретения велосипедов для реализации каких-либо статистических моделей.
- Во вторую очередь, это повышение скорости и удобства выполнения проектов, в случае если разные люди в вашей команде (или вы сами) обладают хорошими знаниями разных языков. Здесь может помочь разумная комбинация имеющихся навыков программирования на R и Python.
Попробуем поговорить подробнее о первом пункте. Summary, которое последует ниже, безусловно, субъективно, и его можно дополнять. Оно создано на основе систематизации ключевых статей о преимуществах языков и личного опыта. Но мир, как мы знаем, очень быстро меняется.
Python создавался умными программистами и является языком общего назначения, уже впоследствии — с развитием data science — адаптированным под специфические задачи анализа данных. Отсюда и следуют главные плюсы этого языка. При анализе данных его использование оптимально для:
- Web scraping и crawling (beautifulsoup, Scrapy, и т.д.)
- Эффективной работы с базами данных и приложениями (sqlachemy, и т.д.)
- Реализации классических ML алгоритмов (scikit-learn, pandas, numpy, scipy, и т.д.)
- Задач Computer Vision
Главное в R — это обширная коллекция библиотек. Этот язык, особенно на начальном этапе, развивался по большей части благодаря усилиям статистиков, а не программистов. Статистики очень старались и их достижения сложно оспорить.
Если вдруг вы подумываете о том, чтобы попробовать новую вкусную статмодель, о которой недавно услышали на конференции, прежде чем садиться писать ее с нуля, загуглите сначала R package <INSERT NAME: new great stats model>
. Ваши шансы на успех очень велики! Так, несомненным плюсом R являются возможности продвинутого статистического анализа. В особенности, для ряда специфических областей науки и практики (эконометрика, биоинформатика и др.). На мой взгляд, в R на текущий момент все еще существенно более развит анализ временных рядов.
Другим ключевым и пока неоспоримым преимуществом R над Python является интерактивная графика. Возможности для создания и настройки дашбордов и простых приложений для людей без знаний JS поистине огромны. Не верите — потратьте немного времени на изучение возможностей пары библиотек из списка: htmlwidgets
, flexdashboard
, shiny
, slidify
. Например, изначально, материалы для этой статьи были собраны в виде интерактивной презентации на slidify.
Но как бы статистики ни старались, сильны они не во всем. Такой высокой эффективности управления памятью, как в Python, им достичь не удалось. Вернее, в R хороший и быстроработающий на больших объемах данных код вполне возможен. Но при гораздо больших усилиях и самоконтроле, чем в Python.
Постепенно все различия стираются, и оба языка становятся все более взаимозаменяемы. В Python развиваются возможности визуализации (большим шагом вперед стал seaborn
) и добавляются не всегда работающие эконометрические библиотеки (puFlux
, pymaclab
, и др.), в R — растет эффективность управления памятью и улучшаются возможности обработки данных (data.table
). Вот тут, например, можно посмотреть примеры базовых операций с данными на R и Python. Так что есть ли преимущество в совмещении языков для вашего проекта, решать только вам.
Что касается второго пункта о повышении скорости и удобства выполнения проектов, то здесь речь в основном об организации проекта. К примеру, есть у вас на проект два человека, один из которых больше и сильнее может на R, другой — на Python. При условии, что вы можете обеспечить code review и другой контроль для обоих языков, можно попробовать распределить задачи так, чтобы каждый участник использовал свои лучшие навыки. Конечно, также имеет значение ваш опыт решения конкретных задач на различных языках.
Хотя тут следует уточнить, что речь идет об исследовательских проектах работы с данными. Для продакшен решений важны другие критерии. Совмещение, скорее всего, не будет полезным для устойчивости и масштабируемости расчетов. Так мы плавно и переходим к вопросу о том, когда удобнее совмещать языки.
Когда
С учетом особенностей обоих языков выиграть от совмещения R и Python можно при:
- Исследовательском анализе данных
- Прототипировании
- Реализации проекта/набора задач с широким охватом по различным научно-практическим областям
Приведу примеры для возможного совмещения языков:
- Исследование региональных рынков труда. Подключение к официальному API HH.ru с помощью Python, исследование трендов и зависимостей (
xgboost
,xgboostExplainer
) + визуализация (Markdown-отчеты) с помощью R - Приложение на данных Bloomberg. Подключение к официальному API и обработка данных на Python (
numpy
,pandas
) + вывод результата в dashboard или shiny приложение на R (flexdashboard
,htmlwidgets
) - Анализ данных социальных медиа. Парсинг и ML стек с помощью Python + эконометрика, network analysis, визуализация и сайт — с помощью R
- Модель для прогнозирования спроса на продукцию в отдельных точках. Блок прогноза спроса на товар в единичных локациях c помощью Python (ML алгоритмы) + макроэкономический прогноз с помощью R (модели общего равновесия и структурные var модели)
- Анализ новостного потока. Парсинг на R (
rvest
) + NLP на Python + параметризованный отчет на R (RMarkdown Parameterized Reports
)
Все приведенные примеры — реальные проекты.
Повторюсь, что даже при том, что с момента моего первого выступления о возможностях совмещения R и Python прошло уже 2 года, я все еще не решусь рекомендовать совмещать языки в продакшене. Разве что если это почти 2 отдельных сущности/модели, не критично завязанные друг на друга.
Если есть счастливчики, запилившие R+Python продакшен что-то — поделитесь, пожалуйста, в комментах!
Как
Теперь непосредственно о стульях. Среди подходов к совмещению R и Python можно выделить три основных категории:
- Command line tools. Исполнение скриптов с помощью командной строки + промежуточное хранение файлов на диске (filling air gap)
- Interfacing R and Python. Одновременный запуск процессов R и Python и передача данных между ними в оперативной памяти (in-memory)
- Другие подходы
Рассмотрим подробнее каждый из подходов.
Command line tools
Суть в разделении проекта на отдельные относительно самостоятельные части, выполняемые на R или Python и передаче данных через диск в каком-либо удобном для обоих языков формате.
По синтаксису все предельно просто. Исполнение скриптов с помощью командной строки осуществляется по схеме:
<cmd_to_run> <path_to_script> <any_additional_args>
<cmd_to_run>
— команда для выполнения скрипта R или Python с помощью командной строки <path_to_script>
— директория расположения скрипта <any_additional_args>
— список аргументов на вход скрипту
В таблице ниже более детально показаны схемы выполнения скриптов из командной строки и считывания переданных аргументов. В комментариях указан тип объекта, в который записывается список аргументов.
Command | Python | R |
---|---|---|
Cmd | python path/to/myscript.py arg1 arg2 arg3 | Rscript path/to/myscript.R arg1 arg2 arg3 |
Fetch arguments | # list, 1st el. - file executed | # character vector of args |
Для желающих есть совсем подробные примеры ниже. R script из Python
Для начала сформируем простой R script для определения максимального числа из списка и назовем его max.R
.
# max.R
randomvals <- rnorm(75, 5, 0.5)
par(mfrow = c(1, 2))
hist(randomvals, xlab = 'Some random numbers')
plot(randomvals, xlab = 'Some random numbers', ylab = 'value', pch = 3)
А теперь выполним его на Python, задействовав cmd и передав список чисел для поиска максимального значения.
# calling R from Python
import subprocess
# Define command and arguments
command = 'Rscript'
path3script = 'path/to your script/max.R'
# Variable number of args in a list
args = ['11', '3', '9', '42']
# Build subprocess command
cmd = [command, path3script] + args
# check_output will run the command and store to result
x = subprocess.check_output(cmd, universal_newlines=True)
print('The maximum of the numbers is:', x)
Python script из R
Вначале создадим простой скрипт на Python по разделению текстовой строки на части и назовем его `splitstr.py`.
# splitstr.py
import sys
# Get the arguments passed in
string = sys.argv[1]
pattern = sys.argv[2]
# Perform the splitting
ans = string.split(pattern)
# Join the resulting list of elements into a single newline
# delimited string and print
print('\n'.join(ans))
А теперь выполним его на R, задействовав cmd и передав текстовую строку для удаления нужного паттерна.
# calling Python from R
command = "python"
# Note the single + double quotes in the string (needed if paths have spaces)
path3script ='"path/to your script/splitstr.py"'
# Build up args in a vector
string = "3523462---12413415---4577678---7967956---5456439"
pattern = "---"
args = c(string, pattern)
# Add path to script as first arg
allArgs = c(path3script, args)
output = system2(command, args=allArgs, stdout=TRUE)
print(paste("The Substrings are:\n", output))
Для промежуточного хранения файлов при передаче информации от одного скрипта к другому можно использовать множество форматов — в зависимости от целей и предпочтений. Для работы с каждым из форматов в обоих языках есть библиотеки (и не по одной). Форматы файлов для R и Python
Medium Storage | Python | R |
---|---|---|
Flat files | ||
csv | csv, pandas | readr, data.table |
json | json | jsonlite |
yaml | PyYAML | yaml |
Databases | ||
SQL | sqlalchemy, pandasql, pyodbc | sqlite, RODBS, RMySQL, sqldf, dplyr |
NoSQL | PyMongo | RMongo |
Feather | ||
for data frames | feather | feather |
Numpy | ||
for numpy objects | numpy | RcppCNPy |
Классический формат — это, конечно, flat файлы. Часто csv — это наиболее просто, удобно и надежно. Если хочется структуризации или хранение информации планируется на относительно длительный срок, то, вероятно, оптимальным выбором будет хранение в базах данных (SQL/NoSQL).
Для быстрой передачи numpy
объектов в R и обратно есть быстрая и устойчивая библиотека RCppCNPy
. Пример её использования можно посмотреть тут.
При этом существует также формат feather
, разрабатываемый специально для передачи дата фреймов между R и Python. Изначальная фишка формата — заточенность на R и Python, легкость обработки на обоих языках и очень быстрая запись и чтение. Идея отличная, но с реализацией, как это иногда бывает, есть нюансы. Сами разработчики формата не раз отмечали, что он пока не подходит для долгосрочных решений. При апдейте библиотек для работы с форматом весь процесс может сломаться и потребовать значительных изменений кода.
Но при этом запись и чтение feather в R и Python действительно быстрые. Тест-сравнение по скорости чтения-записи файла на 10 млн строк представлены на рисунке ниже. В обоих случаях feather
значимо опережает по скорости ключевые библиотеки для работы с классическим форматом csv.
Сравнение скорости работы с форматами feather и CSV для R и Python
Файл: data frame, 10 млн. строк. По 10 попыток на каждую библиотеку.
R: CSV чтение/запись через пакеты data.table
и dplyr
. Работа с feather оказалась наиболее быстрой, но обход по скорости data.table
не высокий. При этом есть определенные сложности с настройкой и работой с feather для R. И поддержка вызывает сомнения. Пакет feather
последний раз обновлялся год назад.
Python: CSV чтение/запись с помощью pandas
. Выигрыш feather по скорости оказался значительным, проблем с работой с форматом на Python 3.5 не обнаружилось.
Тут важно отметить, что сравнивать скорость можно только отдельно для R и отдельно для Python. Между языками будет некорректно, потому что весь тест осуществлялся из R — для удобства формирования итогового рисунка.
Подведем итоги
Преимущества
- Простой метод и поэтому часто наиболее быстрый
- Просто увидеть промежуточный результат
- Возможность чтения/записи большинства форматов реализована в обоих языках
Недостатки
- Конструкция быстро становится громоздкой и сложноуправляемой по мере роста числа переходов между языками
- Существенная потеря в скорости записи/чтения файлов при росте объема данных
- Необходимость заранее согласовывать схему взаимодействия между языками и формат промежуточных файлов
Interfacing R and Python
Этот подход заключается в непосредственном запуске одного языка из другого и предусматривает внутреннюю (in-memory) передачу информации.
За время, в которое народ задумывался о совмещении R и Python вместо их противопоставления, было создано достаточно много библиотек. Из них удачных и устойчивых к разным параметрам, включая использование операционной системы Windows, всего две. Но уже их наличие открывает новые горизонты, значительно облегчая процесс совмещения языков.
Для вызова каждого языка через другой ниже представлено по три библиотеки — по убыванию качества.
R from Python
Наиболее популярная, стабильная и устойчивая библиотека — это rpy2
. Работает быстро, имеет хорошее описание как часть официальной документации pandas
, так и на отдельном сайте. Главная фишка — интеграция с pandas
. Ключевым объектом для передачи информации между языками является data frame
. Также декларируется прямая поддержка наиболее популярного пакета для визуализации R ggplot2
. Т.е. пишете код в python, график видите непосредственно в IDE Python. Тема с ggplot2
, правда, барахлит для Windows.
Недостаток у rpy2
, пожалуй, один — необходимость потратить некоторое время на изучение туториалов. Для корректной работы с двумя языками это необходимо, поскольку есть неочевидные нюансы в синтаксисе и сопоставлении типов объектов при передаче. К примеру, при передаче числа из Python на вход в R вы получаете не число, а вектор из одного элемента.
Ключевое преимущество библиотеки pipe
, которая находится на втором месте в таблице ниже, — это скорость. Реализация через пайпы, действительно, в среднем ускоряет работу (на эту тему даже есть статья в JSS), а наличие поддержки работы с pandas объектами в R-Python внушает надежду. Но имеющиеся минусы надежно сдвигают библиотеку на второе место. Ключевой недостаток — это плохая поддержка установки библиотек в R через Python. Если вы хотите воспользоваться какой-либо нестандартной библиотекой в R (а R часто нужен именно для этого), то чтобы она установилась и заработала, нужно последовательно (!!!) загрузить все её dependencies. А для некоторых библиотек их может быть примерно 100500 и маленькая тележка. Второй важный недостаток — неудобная работа с графикой. Построенный график можно посмотреть, только записав его в файл на диске. Третий недостаток — слабая документация. Если случается косяк чуть за границами стандартного набора, решение часто не найдешь ни в документации, ни на stackoverflow.
Библиотека pyrserve
проста в использовании, но и значительно ограничена по функционалу. Например, не поддерживает передачу таблиц. Обновление и поддержка библиотеки разработчиками также оставляет желать лучшего. Версия 0.9.1 является последней из доступных уже более 2 лет.
Библиотеки | Комментарии |
---|---|
rpy2 | — C-level interface — прямая поддержка pandas — поддержка графики (+ggplot2) — слабая поддержка Windows |
pyper | — Python code — use of pipes (в среднем быстрее) — косвенная поддержка pandas — ограниченная поддержка графики — плохая документация |
pyrserve | — Python code — use of pipes (в среднем быстрее) — косвенная поддержка pandas — ограниченная поддержка графики — плохая документация — низкий уровень поддержки проекта |
Python from R
Лучшая библиотека на текущий момент — это официальная разработка RStudio reticulate
. Минусы в ней пока не просматриваются. А вот преимуществ достаточно: активная поддержка, понятная и удобная документация, вывод результатов выполнения скриптов и ошибок сразу в консоль, легкая передача объектов (как и в rpy2
, основной объект — дата фрейм). По поводу активной поддержки приведу пример из личного опыта: средняя скорость ответа на вопрос в stackoverflow и github/issues составляет примерно 1 минуту. Для работы можно как выучить синтаксис по туториалу и затем подключать отдельные python-модули и писать функции. Или же выполнять отдельные куски кода в python через функции py_run
. Они позволяют легко выполнить python-скрипт из R, передав необходимые аргументы и получить объект со всем выходом скрипта.
Второе место по качеству у библиотеки rPython
. Ключевое преимущество — простота синтаксиса. Всего 4 команды и вы мастер использования R и Python. Документация также не отстает: все изложено понятно, просто и доступно. Главный недостаток — кривая реализация передачи data frame. И в R и в Python требуется дополнительный шаг, чтобы переданный объект стал таблицей. Второй важный недостаток — отсутствие вывода результата выполнения функции в консоль. При запуске какой-то python-команды из R непосредственно из R вы не сможете быстро понять, успешно она выполнилась или нет. Даже в документации был хороший пассаж от авторов, что для того, чтобы увидеть результат выполнения python кода нужно зайти в сам python и посмотреть. Работа с пакетом из Windows возможна только через боль, но возможна. Полезные ссылки есть в таблице.
Третье место у библиотеки Rcpp
. На самом деле, это очень хороший вариант. Как правило, то, что реализовано в R с помощью C++ работает устойчиво, качественно и быстро. Но требует времени, чтобы разобраться. Поэтому здесь и указано в конце списка.
Еще вне таблицы можно упомянуть RSPython. Идея была хорошая — единая платформа в обе стороны с единой логикой и синтаксисом — но реализация подкачала. Пакет не поддерживается с 2005 г. Хотя в целом старую версию завести и потыкать палочкой можно.
Для двух наиболее популярных библиотек ниже приведены подробные примеры использования.
Interfacing R from Python: rpy2Для простоты будем использовать скрипт на R, указанный еще в первых примерах — max.R
.
from rpy2.robjects import pandas2ri # loading rpy2
from rpy2.robjects import r
pandas2ri.activate() # activating pandas module
df_iris_py = pandas2ri.ri2py(r['iris']) # from r data frame to pandas
df_iris_r = pandas2ri.py2ri(df_iris_py) # from pandas to r data frame
plotFunc = r("""
library(ggplot2)
function(df){
p <- ggplot(iris, aes(x = Sepal.Length, y = Petal.Length))
+ geom_point(aes(color = Species))
print(p)
ggsave('iris_plot.pdf', plot = p, width = 6.5, height = 5.5)
}
""") # ggplot2 example
gr = importr('grDevices') # necessary to shut the graph off
plotFunc(df_iris_r)
gr.dev_off()
Interfacing Python from R: reticulateДля простоты будем использовать скрипт на Python, указанный еще в первых примерах — splitstr.py
.
library(reticulate)
# aliasing the main module
py <- import_main()
# set parameters for Python directly from R session
py$pattern <- "---"
py$string = "3523462---12413415---4577678---7967956---5456439"
# run splitstr.py from the slide 11
result <- py_run_file('splitstr.py')
# read Python script result in R
result$ans
# [1] "3523462" "12413415" "4577678" "7967956" "5456439"
Подведем итоги
Преимущества
- Гибкий и интерактивный способ
- Быстрая взаимная передача объектов в рамках оперативной памяти
Недостатки
- Необходимость читать туториалы!
- Тонкости в сопоставимости объектов и способах их передачи между языками
- Передача больших объемов данных также может быть затруднительной
- Слабая поддержка Windows
- Нестабильность между версиями библиотек
Другие подходы
В качестве отдельной категории хотелось бы привести еще несколько способов совмещения языков: с помощью специального функционала ноутбуков и отдельных платформ. Обращу внимание, что большинство приведенных ниже ссылок — это практические примеры.
При выборе ноутбуков можно использовать:
- Классический jupyter и синтаксис
R majic
вместе с обсуждавшейся вышеrpy2
. Несложно, в целом, но нужно опять же потратить некоторое время на изучение синтаксиса. Другой вариант: установкаIRKernel
. Но в этом случае получится только запускать кернелы отдельно, передавая файлы через запись на диске. - R Notebook. Достаточно просто установить уже упомянутую библиотеку
reticulate
и далее указывать для каждой ячейки ноутбука язык, на котором вы будете творить. Удобная штука! - Apache Zeppelin. Говорят, достойно и также в использовании удобно.
Был еще замечательный проект Beaker Notebooks, позволявший очень удобно перемещаться между языками в интерфейсе, похожем и на Jupyter и на Zeppelin. Для передачи объектов in-memory авторами была написана отдельная библиотека beaker
. Плюс можно было сразу удобно публиковать результат (в общий доступ). Но почему-то всего этого больше нет, даже старые публикации удалены — разработчики сконцентрировались на проекте BeakerX.
Среди специального софта, дающего возможность совмещать R и Python следует выделить:
- Отличную open-source платформу h3O. Продукт предполагает отдельные библиотеки-коннекторы как для Python, так и для R.
- Возможности SAS
- Cloudera
Расширенный пример
В завершение статьи хотелось бы также разобрать детальный пример решения небольшой исследовательской задачи, в которой удобно использовать R и Python.
Предположим, поставлена задача: сравнить уровни инфляции и темпов экономического роста в странах, реализующих инфляционное таргетирование (или близкий аналог) как режим денежно-кредитной политики с 2013 г. — примерного старта внедрения этого режима в России.
Решить задачу нужно быстро, а как быструю загрузку помним только с Python, обработку и визуализацию — с R.
Поэтому трясущимися руками заводим R Notebook, пишем в верхней ячейке «`python«` и загружаем данные с сайта World Bank. Данные будем передавать через CSV.
Python: загрузка данных с сайта World Bank
import pandas as pd
import wbdata as wd
# define a period of time
start_year = 2013
end_year = 2017
# list of countries under inflation targeting monetary policy regime
countries = ['AM', 'AU', 'AT', 'BE', 'BG', 'BR', 'CA', 'CH', 'CL', 'CO', 'CY', 'CZ', 'DE', 'DK', 'XC', 'ES', 'EE', 'FI', 'FR', 'GB', 'GR', 'HU', 'IN', 'IE', 'IS', 'IL', 'IT', 'JM', 'JP', 'KR', 'LK', 'LT', 'LU', 'LV', 'MA', 'MD', 'MX', 'MT', 'MY', 'NL', 'NO', 'NZ', 'PK', 'PE', 'PH', 'PL', 'PT', 'RO', 'RU', 'SG', 'SK', 'SI', 'SE', 'TH', 'TR', 'US', 'ZA']
# set dictionary for wbdata
inflation = {'FP.CPI.TOTL.ZG': 'CPI_annual', 'NY.GDP.MKTP.KD.ZG': 'GDP_annual'}
# download wb data
df = wd.get_dataframe(inflation, country = countries, data_date = (pd.datetime(start_year, 1, 1), pd.datetime(end_year, 1, 1)))
print(df.head())
df.to_csv('WB_data.csv', index = True)
Далее осуществляется предобработка данных на R: разброс значений инфляции в разных странах (min/max/mean) и средний темп экономического роста (по темпам роста реального ВВП). Изменяем также названия некоторых стран на более короткие — чтобы потом было удобнее сделать визуализацию. R: предобработка данных
library(tidyverse)
library(data.table)
library(DT)
# get df with python results
cpi <- fread('WB_data.csv')
cpi <- cpi %>% group_by(country) %>% summarize(cpi_av = mean(CPI_annual), cpi_max = max(CPI_annual),
cpi_min = min(CPI_annual), gdp_av = mean(GDP_annual)) %>% ungroup
cpi <- cpi %>% mutate(country = replace(country, country %in% c('Czech Republic', 'Korea, Rep.', 'Philippines',
'Russian Federation', 'Singapore', 'Switzerland',
'Thailand', 'United Kingdom', 'United States'),
c('Czech', 'Korea', 'Phil', 'Russia', 'Singap', 'Switz', 'Thai', 'UK', 'US')),
gdp_sign = ifelse(gdp_av > 0, 'Positive', 'Negative'),
gdp_sign = factor(gdp_sign, levels = c('Positive', 'Negative')),
country = fct_reorder(country, gdp_av),
gdp_av = abs(gdp_av),
coord = rep(ceiling(max(cpi_max)) + 2, dim(cpi)[1])
)
print(head(data.frame(cpi)))
Затем можно с помощью небольшого кода и R создать читабельный и приятный график, позволяющий ответить на исходный вопрос о сравнении уровней инфляции и ВВП в странах, применяющих режим инфляционного таргетирования.R: визуализация
library(viridis)
library(scales)
ggplot(cpi, aes(country, y = cpi_av)) +
geom_linerange(aes(x = country, y = cpi_av, ymin = cpi_min, ymax = cpi_max, colour = cpi_av), size = 1.8, alpha = 0.9) +
geom_point(aes(x = country, y = coord, size = gdp_av, shape = gdp_sign), alpha = 0.5) +
scale_size_area(max_size = 8) +
scale_colour_viridis() +
guides(size = guide_legend(title = 'Average annual\nGDP growth, %', title.theme = element_text(size = 7, angle = 0)),
shape = guide_legend(title = 'Sign of\nGDP growth, %', title.theme = element_text(size = 7, angle = 0)),
colour = guide_legend(title = 'Average\nannual CPI, %', title.theme = element_text(size = 7, angle = 0))) +
ylim(floor(min(cpi$cpi_min)) - 2, ceiling(max(cpi$cpi_max)) + 2) +
labs(title = 'Average Inflation and GDP Rates in Inflation Targeting Countries',
subtitle = paste0('For the period 2013-2017'),
x = NULL, y = NULL) +
coord_polar() +
theme_bw() +
theme(legend.position = 'right',
panel.border = element_blank(),
axis.text.x = element_text(colour = '#442D25', size = 6, angle = 21, vjust = 1))
ggsave('IT_countries_2013_2017.png', width = 11, height = 5.7)
На полученном графике в полярной системе координат показан разброс значений инфляции в период с 2013 г. по 2017 г., а также средние значения ВВП (над значениями инфляции). Круг означает положительный темп роста ВВП, треугольник — отрицательный.
Рисунок в целом позволяет сделать некоторые предварительные выводы об успешности режима инфляционного таргетирования в России относительно других стран. Но это уже за рамками данной статьи. А если интересно — могу дать ссылки на различные материалы по теме.
Выводы
- Можно и нужно совмещать R и Python!
В особенности в целях исследовательского анализа данных и прототипирования - Внимательно относитесь к выбору способов совмещения, основываясь на целях проекта:
- Command line tools: просто, понятно и обязательно будет работать.
- Отличный способ для начала!
- Внимание к формату feather!
- Interfacing R and Python: быстро, гибко и временами интерактивно.
- Специфический синтаксис — необходимо читать туториалы, более сложная настройка.
- Используйте проверенные и стабильные библиотеки:
rpy2
иreticulate
.
- Другие подходы. Внимание к ноутбукам!
От «R против Python» к «R и Python»: два в одном
Привыкли противопоставлять R и Python? Узнайте, как объединить сильные стороны этих языков и использовать их оба в одном проекте.
R или Python? Отбрасываем эти вопросы и обращаем извечный конфликт в сплошные бонусы 🙂
Фокусируйтесь на навыках, а не на инструментах
Если вы занимаетесь наукой о данных, вам сразу придут в голову два языка программирования: R и Python. Однако вместо того, чтобы рассматривать эти языки как два варианта, чаще всего мы сравниваем их. R и Python – отличные инструменты сами по себе, но часто воспринимаются как конкуренты. Если ввести «R против Python» в Google, то сразу же получим 166 миллионов результатов с обсуждениями превосходства одного над другим.
Причина такого мировоззрения в том, что люди разделили область Data Science на два лагеря на основании языка программирования, который они используют. Одни в лагере R, другие в лагере Python. Как свидетельствует история, лагеря не способны жить в гармонии. Члены обоих лагерей горячо верят в превосходство собственного выбора над выбором конкурентов. Таким образом, в некотором смысле, расхождение связано не с инструментами, а с людьми, использующими эти инструменты.
В сообществе Data Science есть люди, которые используют Python и R, но процент таких невелик. С другой же стороны, часто приверженцы только одного языка программирования хотели бы использовать некоторые особенности противоположной стороны.
Например, пользователи R иногда жаждут объектно-ориентированных возможностей, встроенный в язык Python. Аналогично, некоторые пользователи Python мечтают о широком спектре статистических распределений, доступных в языке R.
На приведенном выше рисунке показаны результаты опроса от Red Monk за третий квартал 2018 года. Эти результаты основаны на популярности языков на Stack Overflow, а также на Github. Видно, что рейтинг и R, и Python достаточно высок.
Какой вывод? Нет оснований не работать с ними обоими в одном проекте. Наша конечная цель заключается в улучшении аналитики и наглядности представления, и выбор языка программирования не должен быть препятствием для достижения этой цели.
Давайте рассмотрим особенности этих языков, а также преимущества и недостатки.
Python
Начиная с выпуска в 1991 году, язык программирования Python чрезвычайно популярен и широко используется в обработке данных. Вот некоторые причины такой популярности:
- Объектно-ориентированный язык.
- Общее назначение.
- Имеет много расширений и невероятную поддержку сообщества.
- Простой и легкий для понимания и изучения.
- Pandas, numpy и scikit-learn делают язык Python отличным выбором для машинного обучения.
Однако, в отличие от R, в Python нет специализированных пакетов для статистических вычислений.
R
Первый выпуск языка программирования R произошёл в 1995 году, и с тех пор он стал одним из наиболее часто используемых инструментов для науки о данных в промышленности.
- Состоит из пакетов, которые удовлетворяют нужды практически любого статистического приложения, о котором только можно подумать.
- В настоящее время CRAN содержит более 10 тысяч пакетов.
- Поставляется с отличными библиотеками визуализации, такими как ggplot2.
- Возможность автономного анализа.
С точки зрения производительности язык R не самый быстрый и может иногда съедать много памяти при работе с большими наборами данных.
Используем лучшее из Обоих миров
Можем ли мы использовать одновременно статистическую мощность R и программирование на Python? Что же, если можно легко встроить код SQL в сценарий R или Python, почему бы не совместить R и Python вместе?
В принципе, чтобы использовать Python и R в одном проекте, применяются два подхода.
R в Python
PypeR предоставляет простой способ доступа к R из Python через pipe. Он также включен в каталог пакетов Python, что упрощает способ установки. Этот пакет в особенности полезен, когда нет необходимости в частых интерактивных передачах данных между Python и R. Благодаря выполнению R через пайп, программа Python приобретает гибкость в управлении подпроцессами и памятью, а также в переносимости между популярными операционными системами, включая Windows, GNU Linux и Mac OS.
Соглашения для преобразования объектов Python в объекты R
pyRserve использует Rserve в качестве шлюза для RPC-соединения. Так переменные устанавливаются в R из Python, а также R-функции вызываются удалённо. В ряде случаев объекты R представляются как экземпляры реализованных на Python классов, а функции R выступают в качестве методов этих объектов.
rpy2 запускает R встроенным в процесс Python. Эта библиотека создаёт структуру, которая преобразовывает объекты Python в объекты R, передаёт их в функции R и преобразовывает выходные данные R обратно в объекты Python. rpy2 используется чаще из-за активного развития.
Одно из преимуществ использования R в Python в том, что можно легко использовать потрясающие пакеты языка R (ggplot2, tidyr, dplyr и другие) в языке Python. Смотрите, как легко использовать ggplot2 для отображения в Python.
- Базовая диаграмма
https://rpy2.github.io/doc/latest/html/graphics.html#plot
https://rpy2.github.io/doc/latest/html/graphics.html#geometry
Ресурсы
Не помешает ознакомиться с ресурсами для углубленного изучения rpy2:
Python с R
Для запуска R-скриптов на Python используются такие альтернативы:
Пакет реализует интерфейс доступа к Python через Jython. Он предоставляет возможность другим пакетам встраивать код Python вместе с R.
rPython – ещё один пакет, который позволяет R вызывать Python. Он даёт возможность запускать код Python, выполнять вызовы функций, назначать и извлекать переменные, а также выполнять другие операции из R.
SnakeCharmR – современная переработанная версия rPython. Это ответвление «rPython», которое использует «jsonlite» и имеет много улучшений по сравнению с rPython.
PythonInR упрощает доступ к Python из R, предоставляя функции для взаимодействия с Python из R.
Пакет reticulate предоставляет полный набор инструментов для взаимодействия между Python и R. Он наиболее распространен, в большей степени из-за того, что активно разрабатывается Rstudio. Reticulate встраивает сеанс Python в сеанс R и обеспечивает плавную и высокопроизводительную функциональную совместимость. Пакет позволяет покрыть сеткой кода Python код R, что создаёт новый тип проекта, который сплетает два языка воедино.
Пакет reticulate делает возможными:
- Вызов Python из R различными способами, включая R Markdown, поиск сценариев Python, импорт модулей Python и интерактивное использование Python в сеансе R.
- Трансляцию между объектами R и Python (например, между структурами данных R и Pandas или между матрицами R и массивами NumPy).
- Гибкое связывание с различными версиями Python, включая виртуальные среды и среды Conda.
Ресурсы
Некоторые полезные ресурсы по использованию пакета reticulate:
И R, и Python – надёжные языки, и одного из них на самом деле достаточно для выполнения задачи анализа данных. Тем не менее, у них есть свои плюсы и минусы, и если использовать сильные стороны каждого, получится выполнять работу гораздо лучше. Так или иначе, знание обоих даёт больше гибкости и увеличивает наши шансы работать в различных средах.
Источник
Другие статьи по теме:
А вы приверженец R или Python? Или все-таки хотели бы поработать с двумя языками сразу?
Разница между R и Python
R — это язык программирования высокого уровня и программная среда для статистического анализа и отчетности. Python — это язык программирования общего назначения высокого уровня. Ключевое различие между R и Python состоит в том, что R — это статистически ориентированный язык программирования, а Python — это язык программирования общего назначения. R может использоваться для статистических вычислений, машинного обучения и анализа данных. Python может использоваться для машинного обучения, веб-разработки, сетей, научных вычислений и многого другого.
Содержание
- Обзор и основные отличия
- Что такое R
- Что такое Python
- Сходство между R и Python
- В чем разница между R и Python
- Заключение
Что такое R?
R — это язык программирования и программная среда для статистического анализа, отчетности для представления графики. Основным преимуществом использования R является то, что его можно использовать для реализации статистических концепций, таких как линейное и нелинейное моделирование, анализ временных рядов и кластеризации.
R — интерпретируемый язык, поэтому каждая строка читается интерпретатором одна за другой. Это язык программирования высокого уровня. В нём имеется интерпретатор командной строки, и программист может напрямую вводить команды в командной строке. RStudio является общей интегрированной средой разработки (IDE), облегчающая программирование на R. Он включает в себя редактор кода, средства отладки и визуализации. Существуют также пакеты, такие как ggplot2 и dplyr, которые расширяют возможности R.
При программировании на R необходимо сохранять значения. R может хранить различные типы значений. Он может хранить логические типы данных, такие как true и false. Он также может хранить числовые значения, символы и комплексные числа. R имеет различные структуры данных, такие как векторы, списки, матрицы, массивы, факторы и фреймы данных. Вектор может использоваться для хранения более одного элемента. Список может содержать много различных типов данных элементов, таких как векторы или другой список. Матрицу можно использовать для хранения двумерного набора данных. Массивы используются для хранения набора данных любого числа измерений. Факторы — это r-объекты, которые создаются с помощью вектора. Фреймы данных используются для хранения табличных объектов данных. Это основные структуры данных в R.
С помощью R можно читать и записывать файлы в различных форматах, таких как csv, excel, xml и JSON. Он также может быть интегрирован с базами данных, таких как MySQL и Oracle. Это часто используется для статистики, анализа данных и машинного обучения.
Что такое Python?
Python-это высокоуровневый язык программирования общего назначения. Это кросс-платформенный язык с открытым исходным кодом. Это один из самых популярных языков программирования для начинающих из-за его простоты. Программы python легко читать, писать, тестировать и отлаживать. Подобно R, Python также является интерпретируемым языком. Программист может напрямую давать команды с помощью командной строки или может использовать IDE. Наиболее распространенными IDE для Python являются PyCharm и Eclipse. Они содержат редактор кода и функции отладки для разработки приложений на Python.
Различные типы данных могут быть сохранены с помощью Python. Они могут быть числовыми значениями или строками. Python поддерживает такие структуры данных, как списки, кортежи и словари. Список может использоваться для хранения нескольких элементов данных различных типов. Список является изменяемым, поэтому его можно изменить. Кортеж также используется для хранения нескольких элементов одного типа. Кортеж — это неизменяемый объект Python. Словари используются для хранения пар ключ-значение. Это основные структуры данных в Python.
Python может быть использован для создания графических пользовательских интерфейсов и может быть интегрирован с такими базами данных, как MySQL и MSSQL. Python может быть использован в различных приложениях, например для машинного обучения, разработки веб-сайтов, сетей, научных вычислений, автоматизации, обработки естественного языка и многого другого.
Сходство между R и Python?
- Оба являются языками программирования с несколькими парадигмами. Они поддерживают объектно-ориентированное программирование, императивное программирование и процедурное программирование
- Оба являются интерпретируемыми языками
- Оба могут быть использованы для разработки алгоритмов
- Оба являются языками программирования высокого уровня
- Оба являются бесплатными и с открытым исходным кодом
- Оба могут быть интегрированы с базами данных, такими как MySQL и Oracle
- Оба поддерживают разные файлы, такие как файлы CSV, файлы Excel, файлы XML и файлы JSON.
- Оба языка просты в использовании и изучении.
В чем разница между R и Python?
R против Python | |
R — это язык программирования и программная среда для статистических вычислений, графического представления и отчетности | Python — это интерпретируемый язык программирования общего назначения высокого уровня |
Поддержка | |
R поддерживается организацией R Foundation | Python поддерживается Python Software Foundation |
Структуры данных | |
R поддерживает такие структуры данных, как векторы, списки, матрицы, массивы, коэффициенты и фреймы данных | Python поддерживает структуру данных, такую как списки, словари и кортежи |
Оператор Switch | |
R поддерживает оператор switch | Python не поддерживает оператор switch |
Скрипты | |
R скрипты заканчиваются расширением .r | Скрипты Python заканчиваются расширением .py |
IDE (Интегрированная среда разработки) | |
Общая IDE для программирования на языке R — это Rstudio | Распространенными IDE для программирования на Python являются PyCharm и Eclipse |
Приложения | |
R может использоваться для статистических вычислений, машинного обучения и анализа данных | Python может использоваться для множества приложений, таких как машинное обучение, веб-разработка, сетевое взаимодействие, научные вычисления, автоматизация и обработка естественного языка |
Заключение — R против Python
R и Python — два языка программирования. Разница между R и Python заключается в том, что R является статистически ориентированным языком программирования, в то время как Python является языком программирования общего назначения.
Python 3 — Регулярные выражения
Регулярное выражение – это специальная последовательность символов, которая позволяет соответствовать или найти другие строки или наборы строк, используя специализированный синтаксис проведен в шаблоне. Регулярные выражения широко используются в мире UNIX.
Модуль re обеспечивает полную поддержку Perl-подобных регулярных выражений в Python. Модуль re вызывает исключение re.error, если произошла ошибка во время компиляции или с помощью регулярного выражения.
Мы охватим две важные функции, которые будут использоваться для обработки регулярных выражений. Тем не менее, одна небольшая вещь: Есть различные символы, которые будут иметь особое значение, когда они используются в регулярном выражении. Во избежание путаницы при работе с регулярными выражениями, мы будем использовать строки Raw как r’expression’.
Основные модели, которые соответствуют одиночным символам
№ | Выражение & Соответствие |
---|---|
1 | a, X, 9, < – обычные символы просто соответствуют сами себе точно. |
2 | . (a period) – соответствует любому символу, за исключением символа новой строки «\n» |
3 | \w – соответствует символу “слово”: букве или цифры или подчеркиванию [A-Za-z0-9_]. |
4 | \W – соответствует любому символу, кроме буквы. |
5 | \b – граница между словом и несловообразующим |
6 | \s – соответствует одному символу пробела – пробел, перевод строки, возврат, вкладка |
7 | \S – соответствует любому символу. |
8 | \t, \n, \r – табуляции, новая строка, возврат |
9 | \d – десятичная цифра [0-9] |
10 | ^ – соответствует началу строки |
11 | $ – соответствует концу строки |
12 | \ – блокирует «особость» символа. |
Флаги компиляции
Флаги компиляции позволяют изменить некоторые аспекты того, как работают регулярные выражения. Флаги доступны в модуле re под двумя именами, длинное имя, например, как IGNORECASE и короткое, в одно-буквенном виде, такие как I.
№ | Флаг и Значение |
---|---|
1 | ASCII, A – Делает несколько побегов, как \w, \b, \s и \d. Сравнение только для ASCII символов с соответствующим свойством. |
2 | DOTALL, S – Сделает, соответствует любому символу, включая символ новой строки |
3 | IGNORECASE, I – Сравнение регистронезависимых символов |
4 | LOCALE, L – Локальное сравнение |
5 | MULTILINE, M – Сравнение многострочных, используя ^ и $ |
6 | VERBOSE, X (for ‘extended’) – Включить многословные REs, которые могут быть организованы более чисто и понятно |
Функция match
Эта функция пытается соответствовать RE pattern для string с дополнительными flags.
Синтаксис этой функции:
re.match(pattern, string, flags = 0)
Вот описание параметров:
№ | Параметр & Описание |
---|---|
1 | pattern – Это регулярное выражение, которому необходимо соответствовать. |
2 | string – Это строка, которая будет искать, чтобы соответствовать шаблону в начале строки. |
3 | flags – Вы можете задать различные флаги с помощью побитового OR (|). Это модификаторы, которые перечислены в таблице ниже. |
Функция Re.match возвращает объект match если успех, и None если провал. Мы используем функции usegroup(num) или groups() объекта match, чтобы получить согласованное выражение.
№ | Метод соответствия объекта и описание |
---|---|
1 | group(num = 0) – Этот метод возвращает все сравнения (или конкретную подгруппу num) |
2 | groups() – Этот метод возвращает все соответствующие подгруппы в кортеже (пусто, если не найдено) |
Пример
#!/usr/bin/python3 import re line = "Кошки умнее собак" matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I) if matchObj: print ("matchObj.group() : ", matchObj.group()) print ("matchObj.group(1) : ", matchObj.group(1)) print ("matchObj.group(2) : ", matchObj.group(2)) else: print ("Нет совпадения!!")
Когда этот код выполнится, он выведет следующий результат:
matchObj.group() : Кошки умнее собак matchObj.group(1) : Кошки matchObj.group(2) : умнее
Функция search
Эта функция ищет первое вхождение pattern re в string с дополнительными flags.
Синтаксис этой функции:
re.search(pattern, string, flags = 0)
Вот описание параметров:
№ | Параметр & Описание |
---|---|
1 | pattern – Это регулярное выражение, которому необходимо соответствовать. |
2 | string – Это строка, которая будет искать, чтобы соответствовать шаблону в любом месте строки. |
3 | flags – Вы можете задать различные флаги с помощью побитового OR (|). Эти модификаторы, которые перечислены в таблице ниже. |
Функция Re.search возвращает объект match если успех, и None если провал. Мы используем функцию group(num) или groups() объекта match, чтобы получить совпадающее выражение.
№ | Метод соответствия объекта и описание |
---|---|
1 | group(num = 0) – Этот метод возвращает все сравнения (или конкретную подгруппу num) |
2 | groups() – Этот метод возвращает все соответствующие подгруппе в кортеже (пусто, если не найдено) |
Пример
#!/usr/bin/python3 import re line = "Кошки умнее собак"; searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I) if searchObj: print ("searchObj.group() : ", searchObj.group()) print ("searchObj.group(1) : ", searchObj.group(1)) print ("searchObj.group(2) : ", searchObj.group(2)) else: print ("Ничего не найдено!!")
Когда этот код выполнится, он выведет следующий результат:
matchObj.group() : Кошки умнее собак matchObj.group(1) : Кошки matchObj.group(2) : умнее
Соответствие поиску версий
Python предлагает две различные примитивные операции, основанные на регулярных выражениях: match проверка на сравнение только в начале строки, в то время как search проверка на сравнение где – нибудь в строке (это то, что Perl делает по умолчанию).
Пример
#!/usr/bin/python3 import re line = "Кошки умнее собак"; matchObj = re.match( r'собак', line, re.M|re.I) if matchObj: print ("match --> matchObj.group() : ", matchObj.group()) else: print ("Нет совпадения!!") searchObj = re.search( r'собак', line, re.M|re.I) if searchObj: print ("search --> searchObj.group() : ", searchObj.group()) else: print ("Ничего не найдено!!")
Когда этот код выполнится, он выведет следующий результат:
Нет совпадения!! search --> matchObj.group() : собак
Поиск и замена
Одним из наиболее важных методов re, которые используют регулярные выражения является sub.
Синтаксис
re.sub(pattern, repl, string, max=0)
Этот метод заменяет все вхождения RE pattern в string на repl, заменив все вхождения, если max не предусмотрен. Этот метод возвращает модифицированную строку.
Пример
#!/usr/bin/python3 import re phone = "2004-959-559 # Это номер телефона" # Удаление комментариев в стиле Python num = re.sub(r'#.*$', "", phone) print ("Номер телефона : ", num) # Удалить все, кроме цифр num = re.sub(r'\D', "", phone) print ("Номер телефона : ", num)
Когда этот код выполнится, он выведет следующий результат:
Номер телефона : 2004-959-559 Номер телефона : 2004959559
Модификаторы регулярных выражений: Вариант flag
Регулярное выражение константы могут включать в себя необязательный модификатор для управления различными аспектами сравнения. Модификаторы указаны в качестве дополнительного флага. Вы можете предоставить несколько модификаторов с помощью исключающего OR (|), как показано выше, и может быть представлена одним из следующих:
№ | Модификатор & Описание |
---|---|
1 | re.I – Выполняет регистронезависимое согласование. |
2 | re.L – Интерпретирует слова в соответствии с текущей локализацией. Эта интерпретация влияет на алфавитную группу (\w и \W), а также слово граничное поведение (\b и \В). |
3 | re.M – Заставляет $ соответствует концу строки (а не только конец строки) и делает ^ совпадать с началом любой строки (а не только в начале строки). |
4 | re.S – Делает период (точка) соответствовать любому символу, включая символ новой строки. |
5 | re.U – Интерпретирует буквы в соответствии с набором символов Юникода. Этот флаг влияет на поведение \w, \W, \b, \B. |
6 | re.X – Разрешает «cuter» синтаксис регулярных выражений. Он игнорирует пробелы (за исключением внутри множества [] или при замаскированой обратной косой чертой) и рассматривает неэкранированный # как маркер комментарий. |
Шаблоны регулярных выражений
За исключением управляющих символов, (+ ? . * ^ $ ( ) [ ] { } | \), все символы совпадают сами. Вы можете избежать управляющего символа, предварив его с обратной косой чертой.
В следующей таблице перечислен синтаксис регулярных выражений, который доступен в Python:
Вот список синтаксиса регулярных выражений в Python.
Примеры регулярных выражений
Буквенные символы
№ | Пример & Описание |
---|---|
1 | python – Сравнение “python”. |
Классы символов
№ | Пример & Описание |
---|---|
1 | [Рр]ython – Сравнение «Python» или «python» |
2 | rub[ye] – Сравнение «ruby» или «rube» |
3 | [aeiou] – Соответствует любому одной строчной гласной |
4 | [0-9] – Сравнение любой цифры; такой же, как [0123456789] |
5 | [a-z] – Соответствует любому строчной букве ASCII |
6 | [A-Z] – Сравнение любой заглавной букве ASCII |
7 | [a-zA-Z0-9] – Сравнение любой из вышеперечисленных |
8 | [^aeiou] – Сравнение ничего, кроме нижнего регистра гласной |
9 | [^0-9] – Сравнение ничего, кроме цифр |
Специальные классы символов
№ | Пример & Описание |
---|---|
1 | . – Соответствует любому символу, кроме символа новой строки |
2 | \ d – Сравнение цифры: [0-9] |
3 | \D – Сравнение не цифры: [^ 0-9] |
4 | \s – Сравнение символа пробела: [\t\r\n\f] |
5 | \S – Сравнение без пробела: [^ \t\r\n\f] |
6 | \w – Сравнение одного текстового символа: [A-Za-z0-9_] |
7 | \W – Сравнение несловесным символом: [^ A-Za-z0-9_] |
Случаи повторения
№ | Пример & Описание |
---|---|
1 | ruby? – Совпадение «rub» или «ruby»: у – необязательно |
2 | ruby* – Совпадение «rub» плюс 0 или более y. |
3 | ruby+ – Совпадение «rub» плюс 1 или более y. |
4 | \d{3,} – Совпадение ровно 3 цифры |
5 | \ Д {3} – Совпадение 3 или более цифр |
6 | \d{3,5} – Совпадение 3, 4 или 5 цифр |
Ненасытное повторение
Это соответствует наименьшее количество повторений:
№ | Пример & Описание |
---|---|
1 | <.*> – Жадное повторение: matches “<python>Perl>” |
2 | <.*?> – Из жадного в нежадный: matches “<python>” в “<python>Perl>” |
Группировка с круглой скобкой
№ | Пример & Описание |
---|---|
1 | \D\d+ – Ни одна из групп: + повторяется \d |
2 | (\D\d)+ – Сгруппированные: + повторяет пару \D\d |
3 | ([Pp]ython(,)?)+ – Сравнение “Python”, “Python, python, python” и т.д. |
Обратные
Это соответствует ранее согласованной группе:
№ | Пример & Описание |
---|---|
1 | ([Pp])ython&\1ails – Сравнение python&pails или Python&Pails |
2 | ([‘”])[^\1]*\1 – Одинарные- или двойные кавычки в строке. \1 – соответствует то, что в 1-й группе подобраны. \2 – Сравнение, что во 2-й группе соответствовал, и т. д. |
Альтернативы
№ | Пример & Описание |
---|---|
1 | python|perl – Сравнение «python» или «perl» |
2 | rub(y|le) – Сравнение «ruby» или «ruble» |
3 | Python(!+|\?) – «Python», а затем один или более! или один? |
Якоря
Необходимо для определения позиции соответствия.
№ | Пример & Описание |
---|---|
1 | ^Python – Сравнение «Python» в начале строки или внутренней линии |
2 | Python$ – Сравнение «Python» в конце строки или строки |
3 | \APython – Сравнение «Python» в начале строки |
4 | Python\Z – Сравнение «Python» в конце строки |
5 | \bPython\b – Сравнение «Python» на границе слова |
6 | \brub\B – \В является не словесной границей: Сравнение “rub” в “rube” и “ruby”, но не в одиночку |
7 | Python(?=!) – Сравнение «Python», если за ними следует восклицательным. |
8 | Python(?!!) – Сравнение «Python», если не последует восклицательный знак. |
Специальный синтаксис со скобками
№ | Пример & Описание |
---|---|
1 | R(?#comment) – Сравнение “R”. Все остальное является комментарием |
2 | R(?i)uby – Без учета регистра при сопоставлении «uby» |
3 | R(?i:uby) – То же самое, что и выше |
4 | rub(?:y|le)) – Группировать только без создания обратной связи \1 |
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
R против Python: в чем разница?
- Home
Тестирование
- Back
- Agile Testing
- BugZilla
- Cucumber
- Тестирование базы данных
- Тестирование ETL
- 0003
- Jmeter
- Jmeter Backing
- Ручное тестирование
- Мобильное тестирование
- Mantis
- Почтальон
- QTP
- Назад
- Центр качества (ALM)
- RPA
- SAP Testing
- Selenium
SAP
- Назад
- ABAP
- APO
- Начало er
- Basis
- BODS
- BI
- BPC
- CO
- Назад
- CRM
- Crystal Reports
- FICO
- Pay4
- HR
Назад
- PI / PO
- PP
- SD
- SAPUI5
- Безопасность
- Менеджер решений
- Successfactors
- SAP Tutorials
Web
- ASP.Net
- C
- C #
- C ++
- CodeIgniter
- СУБД
- JavaScript
- Назад
- Java
- JSP
- Kotlin
- Linux
- Linux
- Kotlin
- Linux
js
- Perl
- Назад
- PHP
- PL / SQL
- PostgreSQL
- Python
- ReactJS
- Ruby & Rails
- Scala
- SQL
- SQL
- Angular
Web
000
000
0003 SQL
000
0003 SQL
000
Обязательно учите!
- Назад
- Бухгалтерский учет
- Алгоритмы
- Android
- Блокчейн
- Business Analyst
- Создание веб-сайта
- CCNA
- Облачные вычисления
- 00030003 COBOL
- 9000 Compiler
- 00030002 9000 Compiler
- Ethical Hacking
- Учебные пособия по Excel
- Программирование на Go
- IoT
- ITIL
- Jenkins
- MIS
- Сети
- Операционная система
- 00030003
- Назад
Управление проектами Обзоры
- Salesforce
- SEO
- Разработка программного обеспечения
- VB A
- 9000 Встроенные системы
- 00030002 9000 Compiler
Big Data
- Назад
- AWS
- BigData
- Cassandra
- Cognos
- Хранилище данных
- HBOps
- HBOps
- MicroStrategy
- MongoDB
0003
0003
0003
.
В чем разница, особенности и применение?
Сообщество специалистов по науке о данных прошло долгий путь и сильно повзрослело за последние 5 лет. Раньше ИТ-сектор уделял большое внимание таким технологиям, как Java, которая включает Spring и Hibernate для написания и тестирования кода. После появления машинного обучения и анализа данных акцент сместился на такие технологии, как R, Python и SAS. Эти технологии постоянно используются для алгоритмов машинного обучения, глубокого обучения, искусственного интеллекта и многих других передовых открытий, которые застали мир и провидцев врасплох.
Что такое R?
R — это язык программирования с открытым исходным кодом, который в основном используется статистиками и инженерами по обработке данных, которые используют его для создания различных алгоритмов и методов статистического моделирования и анализа данных. Впервые он появился в августе 1993 года. R включает в себя массу встроенных библиотек, которые предлагают широкий спектр статистических и графических методов, включая регрессионный анализ, статистические тесты, модели классификации, кластеризацию и анализ временных рядов.Уже доступны тонны пакетов, которые помогают в исследовательском анализе данных, базовом исследовании данных и представлении данных в виде графиков. Он имеет возможность создавать мощные диаграммы и графики качества приборной панели для демонстрации и мониторинга ежемесячных продаж или прибыли компании. Язык R работает на платформе R Studio, которая помогает запускать и выполнять коды и пакеты в R.
Что такое Python?
Подобно R, Python также является языком программирования с открытым исходным кодом, который используется для статистических моделей и моделей машинного обучения, таких как регрессия и классификация, которые используются во многих системах.Созданный в 1991 году, он использовался и реализовывался в простых системах в то время, когда машинное обучение имело свою нишу на рынке. Python может поддерживать объектно-ориентированное, процедурное и функциональное программирование. Он состоит из обширной коллекции библиотек, которые помогают заботиться о второстепенных и основных реализациях Python. Для Python используется множество инструментов и фреймворков, но самый популярный из них известен как Jupyter, который заботится как об алгоритмах, так и о визуализации данных.
Почему мы используем их и их приложения?
И R, и Python в настоящее время являются лидерами бригады машинного обучения. Оба этих языка могут использоваться для инициирования и изменения алгоритмов машинного обучения, таких как классификация, регрессия, кластеризация, нейронные сети и алгоритмы в искусственном интеллекте. У обоих этих языков разный подход к решению данной проблемы. Независимо от того, создаете ли вы модель машинного обучения или исследуете данные для получения полезной информации, оба они играют важную роль в понимании данных и извлечении из них фактов.
Создание значимых информационных панелей
Информационные панели в настоящее время стали основой для большинства командных встреч. Эти информационные панели могут быть созданы либо для измерения продаж, либо для отслеживания текущего статуса компании. Он оказался полезным и полезным для улучшения показателей эффективности любого бренда или компании. Такие инструменты, как Tableau и PowerBI, довольно популярны, и в то же время R и Python имеют возможность создавать информационные панели корпоративного уровня из-за большого выбора пакетов.R имеет панель пакетов, ggplot2 и plotly, которые позволяют отображать данные в виде графиков и диаграмм. Python включает matplotlib, seaborn и pandas, чтобы следить за частью визуализации и представления данных для данных. За последние пару лет произошло множество улучшений и улучшений как в пользовательских базах, так и с тех пор они постоянно поддерживают языки, чтобы получить лучшее из обоих миров.
Делаем машины умнее и точнее
Было время, когда машины имели ограниченные возможности и были запрограммированы на некоторый заранее определенный набор действий, которые они повторяли каждый раз для выполнения определенного набора задач.Теперь об этой монотонности позаботились, и машины стали более умными и разборчивыми после появления машинного обучения. Это сделало их более осведомленными и уверенными в своих действиях и позволило им выполнять действия, которые они узнают во время процесса проверки и испытания. Это открывает новые функции и возможности для компаний, которые могут без проблем исследовать различные компоненты своего бизнеса.
Встряхивая рынок с помощью искусственного интеллекта
Все машинное обучение, выполненное на сегодняшний день, привело к созданию более широкой концепции, которую мы называем искусственным интеллектом.Искусственный интеллект в основном включает машинное обучение и пытается разработать алгоритмы, которые позволяют машинам думать, как люди. Это, безусловно, самая устрашающая и потрясающая концепция в отрасли, которая ясно дала понять, что за ИИ определенно будущее. Все компании постепенно внедряют ИИ в свои системы, чтобы сделать их более эффективными и динамичными.
R против Python: важные различия, особенности
Популярность в массах благодаря более широким возможностям трудоустройства
Приведенный выше график означает, что Python (обозначен желтой кривой) более популярен и широко используется в системах и на предприятиях.Кривая синего цвета принадлежит R, который определенно выглядит хорошо и почти соответствует Python. R открывает огромные возможности в отрасли, но Python побеждает в конкурсе популярности.
Репозиторий библиотеки
R имеет исчерпывающий репозиторий библиотек, которые регулярно обновляются в CRAN, который представляет собой Comprehensive R Archive Network. Он включает dplyr, mice, ggplot2 и многие другие. Python включает индекс пакетов pip, в котором есть все библиотеки для Python. В их число входят matplotlib, pandas, seaborn и многие другие.R имеет более активную базу пользователей, что способствует обновлению огромной базы данных из 10 000 пакетов. Даже Python включает сообщество пользователей, которое регулярно обновляет свои пакеты, но это немного сложный процесс по сравнению с R.
Обработка данных
R может выполнять анализ данных без загрузки каких-либо пакетов в свою память. В R доступно множество пакетов, которые можно использовать для изучения данных и получения от них информации. В python нам нужны такие пакеты, как numpy и pandas, для создания фрейма данных и обработки данных.Оба языка достаточно сильны, чтобы выполнять вычисления данных и задачи, которые позволяют пользователям максимально эффективно использовать данные.
Гибкость
Уникальность каждого языка делает его уникальным в некоторых аспектах при использовании в алгоритмах машинного обучения и глубокого обучения. И R, и Python имеют библиотеки для реализации алгоритмов. Но загвоздка здесь в том, что, хотя R легко изучить и освоить, Python всегда будет на шаг впереди из-за большого количества приложений и реализаций в реальном мире.Снова и снова разработчики полагались на его суперспособности и простоту, которую он предлагает для выполнения любого фрагмента кода.
Графика и визуализация
R имеет несколько расширенных графических пакетов, например ggplot2, для настройки графиков. У Python также есть несколько удивительных библиотек визуализации, например, морской волны и боке. По сравнению с R в Python гораздо больше библиотек для графики и визуализации, однако они немного сложнее.
Поддержка глубокого обучения
R имеет два новых пакета глубокого обучения — KerasR и Keras RStudio.Оба этих пакета предоставляют интерфейс R для пакета глубокого обучения Python.
Python имеет Tensorflow и Keras, потрясающие библиотеки глубокого обучения. Изучение Keras — один из самых простых способов начать глубокое обучение на Python.
Служба поддержки клиентов
И R, и Python не имеют поддержки клиентов. Это означает, что если вы столкнетесь с какой-либо проблемой, вы останетесь в одиночестве. Однако и у R, и у Python есть онлайн-сообщества для помощи.Поскольку Python старше R, он пользуется большей поддержкой сообщества по сравнению с R.
.
Плюсы и минусы
Спрос на оба этих языка растет, и предлагаемая заработная плата также довольно высока. В этом разделе мы узнаем о некоторых плюсах и минусах обоих языков, чтобы помочь вам лучше выбирать между ними!
Python: Плюсы
- Python — это язык общего назначения. Это очень просто и интуитивно понятно. Кривая обучения не очень крутая, и вы можете быстро писать программы.
- IPython Notebook — очень приятная интерактивная вычислительная среда, которая значительно упрощает работу с Python. Этими ноутбуками можно легко делиться и использовать без необходимости устанавливать что-либо.
Python: против
- Python имеет множество хороших библиотек визуализации, например Pygal, Bokeh и Seaborn. Однако становится немного сложно выбрать из огромного количества вариантов. Более того, по сравнению с R эти библиотеки создают сложные визуализации, на которые может быть не очень приятно смотреть.
R: Плюсы
- R имеет богатую экосистему активного сообщества и передовых пакетов. Вы можете найти все пакеты R в документации R.
- R имеет потрясающие пакеты визуализации, которые позволяют создавать прекрасные визуализации. Некоторые из этих пакетов — ggplot2, rCharts, ggvis и googleVis.
R: Минусы
- Кривая обучения R очень крутая. Доступная документация не обязательно удобна для пользователя, и такие вещи, как поиск пакетов, также могут занять очень много времени, если вы не знакомы с ней заранее.
Заключение
Стартапы и многонациональные корпорации полагаются на эти технологии, чтобы расширяться и оставлять след в отрасли. Огромное количество кодеров и разработчиков активно изучают и практикуют эти два популярных языка. Любой, кто хочет повысить ценность своего бизнеса, наверняка знает ценность машинного обучения на рынке и готов вложить для этого огромный капитал. Трудно однозначно сказать, какой язык «лучше», поскольку оба эти языка пользуются большим спросом и могут использоваться для решения многих уникальных задач.
Еще читают:
.
Интерфейс для Python • reticulate
Пакет reticulate предоставляет полный набор инструментов для взаимодействия между Python и R. Пакет включает средства для:
Вызов Python из R различными способами, включая R Markdown, поиск сценариев Python, импорт модулей Python и интерактивное использование Python в рамках сеанса R.
Перевод между объектами R и Python (например, между кадрами данных R и Pandas или между матрицами R и массивами NumPy).
Гибкая привязка к различным версиям Python, включая виртуальные среды и среды Conda.
Reticulate встраивает сеанс Python в ваш сеанс R, обеспечивая бесшовную и высокопроизводительную совместимость. Если вы разработчик R, который использует Python для некоторых своих работ, или член группы специалистов по науке о данных, использующий оба языка, reticulate может значительно упростить ваш рабочий процесс!
Начало работы
Установка
Установите пакет reticulate из CRAN следующим образом:
Пакеты Python
Вы можете установить любые необходимые пакеты Python, используя стандартные инструменты оболочки, такие как pip
и conda
.В качестве альтернативы, reticulate включает в себя набор функций для управления и установки пакетов в средах virtualenvs и Conda. Дополнительные сведения см. В статье «Установка пакетов Python».
Вызов Python
Существует множество способов интеграции кода Python в ваши проекты R:
1) Python в R Markdown — новый движок языка Python для R Markdown, который поддерживает двунаправленную связь между R и Python (блоки R могут обращаться к объектам Python и наоборот).
2) Импорт модулей Python — функция import ()
позволяет импортировать любой модуль Python и вызывать его функции непосредственно из R.
3) Получение сценариев Python — функция source_python ()
позволяет вам получить сценарий Python таким же образом, как и source ()
сценарий R (функции Python и объекты, определенные в сценарии, становятся напрямую доступными для сеанса R ).
4) Python REPL — функция repl_python ()
создает интерактивную консоль Python в R.Объекты, которые вы создаете в Python, доступны для вашего сеанса R (и наоборот).
Каждый из этих методов более подробно описан ниже.
Python в R Markdown
Пакет reticulate включает движок Python для R Markdown со следующими функциями:
1) Запуск фрагментов Python в одном сеансе Python, встроенный в сеанс R (общие переменные / состояние между фрагментами Python)
2) Печать вывода Python, включая графический вывод из matplotlib.
3) Доступ к объектам, созданным в фрагментах Python из R с использованием объекта py
(например, py $ x
будет обращаться к переменной x
, созданной в Python из R).
4) Доступ к объектам, созданным в блоках R из Python с использованием объекта r
(например, r.x
будет иметь доступ к переменной x
, созданной в R из Python)
Предусмотрено встроенное преобразование для многих типов объектов Python, включая массивы NumPy и фреймы данных Pandas.Например, вы можете использовать Pandas для чтения и управления данными, а затем легко построить фрейм данных Pandas, используя ggplot2:
Обратите внимание, что механизм reticulate Python по умолчанию включен в R Markdown при установке reticulate.
Дополнительные сведения см. В документации по R Markdown Python Engine.
Импорт модулей Python
Вы можете использовать функцию import ()
для импорта любого модуля Python и вызова его из R. Например, этот код импортирует модуль Python os
и вызывает функцию listdir ()
:
[1] ».git "" .gitignore "" .Rbuildignore "" .RData "
[5] «.Ristory» «.Rproj.user» «.travis.yml» «appveyor.yml»
[9] «ОПИСАНИЕ» «документы» «внешние» «index.html»
[13] "index.Rmd" "inst" "выдает" "ЛИЦЕНЗИЮ"
[17] "человек" "NAMESPACE" "NEWS.md" "pkgdown"
[21] «R» «README.md» «reticulate.Rproj» «src»
[25] "тесты" "виньетки"
Функции и другие данные в модулях и классах Python доступны с помощью оператора $
(аналогично тому, как вы взаимодействуете со списком R, средой или эталонным классом).
Импортированные модули Python поддерживают автозавершение кода и встроенную справку:
См. Вызов Python из R для получения дополнительных сведений о взаимодействии с объектами Python изнутри R.
Получение скриптов Python
Вы можете создать любой сценарий Python точно так же, как исходный сценарий R с помощью функции source_python ()
. Например, если у вас есть следующий скрипт Python Flights.py :
импортные панды
def read_flights (файл):
полеты = панды.read_csv (файл)
рейсы = рейсы [рейсы ['dest'] == "ORD"]
рейсы = рейсы [['перевозчик', 'dep_delay', 'arr_delay']]
flight = flight.dropna ()
обратные рейсы
Затем вы можете создать скрипт и вызвать функцию read_flights ()
следующим образом:
Дополнительные сведения о поиске кода Python см. В документации source_python ()
.
Python REPL
Если вы хотите работать с Python в интерактивном режиме, вы можете вызвать функцию repl_python ()
, которая предоставляет Python REPL, встроенный в ваш сеанс R.К объектам, созданным в Python REPL, можно получить доступ из R с помощью объекта py
, экспортированного из reticulate. Например:
Введите exit
в Python REPL, чтобы вернуться к приглашению R.
Обратите внимание, что код Python также может получать доступ к объектам из сеанса R с помощью объекта r
(например, r.flights
). См.
.
Вызов Python из R • reticulate
Обзор
Пакет reticulate предоставляет интерфейс R для модулей, классов и функций Python. Например, этот код импортирует модуль Python os
и вызывает в нем некоторые функции:
[1] «.git» «.gitignore» «.Rbuildignore» «.RData»
[5] «.Ristory» «.Rproj.user» «.travis.yml» «appveyor.yml»
[9] "ОПИСАНИЕ" "документы" "внешний" "индекс.html "
[13] "index.Rmd" "inst" "выдает" "ЛИЦЕНЗИЮ"
[17] "человек" "NAMESPACE" "NEWS.md" "pkgdown"
[21] «R» «README.md» «reticulate.Rproj» «src»
[25] "тесты" "виньетки"
Доступ к функциям
и другим данным в модулях и классах Python можно получить с помощью оператора $
(аналогично тому, как вы взаимодействуете со списком R, средой или эталонным классом).
Пакет reticulate совместим со всеми версиями Python> = 2.7. Интеграция с NumPy не является обязательной и требует NumPy> = 1.6.
Пакеты Python
Вы можете установить любые необходимые пакеты Python с помощью стандартных инструментов оболочки, таких как pip
и conda
. В качестве альтернативы, reticulate включает в себя набор функций для управления и установки пакетов в средах virtualenvs и Conda. Дополнительные сведения см. В статье «Установка пакетов Python».
Преобразование типов
При вызове в Python типы данных R автоматически преобразуются в их эквивалентные типы Python. Когда значения возвращаются из Python в R, они преобразуются обратно в типы R. Типы преобразуются следующим образом:
Одноэлементный вектор | Скалярный | 1 , 1L , TRUE , "foo" |
Многоэлементный вектор | Список | с (1.0, 2,0, 3,0) , c (1 л, 2 л, 3 л) |
Список нескольких типов | Кортеж | список (1L, TRUE, "foo") |
Именованный список | Dict | Список (a = 1L, b = 2.0) , dict (x = x_data) |
Матрица / массив | NumPy ndarray | матрица (c (1,2,3,4), nrow = 2, ncol = 2) |
Кадр данных | Pandas DataFrame | данные.frame (x = c (1,2,3), y = c («a», «b», «c»)) |
Функция | Функция Python | функция (x) x + 1 |
Необработанный | Python массив байтов | as.raw (c (1:10)) |
NULL, TRUE, FALSE | Нет, верно, неверно | NULL , TRUE , FALSE |
Если возвращается объект Python пользовательского класса, то возвращается ссылка R на этот объект.Вы можете вызывать методы и обращаться к свойствам объекта так же, как если бы он был экземпляром ссылочного класса R.
Импорт модулей
Функцию import ()
можно использовать для импорта любого модуля Python. Например:
difflib <- import ("difflib") diffflib $ ndiff (фу, бар) filecmp <- import ("filecmp") filecmp $ cmp (каталог1, каталог2)
Функции import_main ()
и import_builtins ()
предоставляют вам доступ к основному модулю, в котором код выполняется по умолчанию, и к набору встроенных функций Python.Например:
Основной модуль обычно полезен, если вы выполнили код Python из файла или строки и хотите получить доступ к его результатам (подробнее см. В разделе ниже).
Скрипты поиска
Функция source_python ()
будет источником скрипта Python и сделает объекты, которые он создает, доступными в среде R (по умолчанию вызывающая среда). Например, рассмотрим следующий сценарий Python:
def add (x, y):
возврат x + y
Мы получаем его с помощью функции source_python ()
, а затем можем вызвать функцию add ()
непосредственно из R:
[1] 15
Исполнительный код
Вы можете выполнить код Python в основном модуле, используя функции py_run_file
и py_run_string
.Затем вы можете получить доступ к любым объектам, созданным с использованием объекта py
, экспортированного с помощью reticulate:
Преобразование объекта
По умолчанию, когда объекты Python возвращаются в R, они преобразуются в их эквивалентные типы R. Однако, если вы предпочитаете явно выполнять преобразование из Python в R и работать с собственными объектами Python по умолчанию, вы можете передать convert = FALSE
в функцию import
. В этом случае преобразование Python в R будет отключено для модуля, возвращенного из import
.Например:
# import numpy и не указывать автоматическое преобразование Python в R np <- import ("numpy", convert = FALSE) # делаем некоторые манипуляции с массивами с помощью NumPy a <- np $ массив (c (1: 4)) сумма <- $ cumsum () # преобразовать в R явно в конце py_to_r (сумма)
Как показано выше, если вам нужен доступ к объекту R в конце ваших вычислений, вы можете явно вызвать функцию py_to_r ()
.
.