Comments 26
А мы на R не только анализируем, но и программируем. Фактически, shinyapp, выступает в качестве лица к аналитическому бэкенду. С обработкой exeption, валидацей, автотестами, ассертами, roxygen документированием, db бэкендом, js+css тюнингом и пр. Ожидаемый в следующем релизе shiny асинхронный режим работы вообще развяжет руки.
А для ряда задач приходится еще вспоминать и Mathematica
Могу предположить, что не в последнюю очередь все это связано с тем, что не программисту (экономисту / аналитику / финансисту / математику) не составит особого труда осилить Python или R в качестве рабочего инструмента, в отличие от тех же C или Java. Плюс бесплатность, кроссплатформенность кода, не притязательность в ресурсах и огромное количество доступных ресурсов.
В описанном варианте скорее всего проблема не с R, а в общей организации процесса(системы). Возможно некоторые операции над данными стоит решать раньше, на уровне базы данных(хранения данных), а не на уровне анализа уже...
Мнение — не самый надежный источник данных. Формально — да, base R медленный. Это интерпретатор, хоть и с компиляцией в байт-код.
Однако, современный R — это, прежде всего, набор пакетов, который используется для работы. Большинство пакетов, критичных по времени исполнения, разрабатываются с применением C++. Векторизация, функциональное программирование, выбор правильных пакетов и алгоритмов, использование бэкендов на которые можно переложить рутинную тривиальную работу (БД или BigData движки), использование RCPP для критического кода — вот оптимальный способ применения R.
Мы еще дополнительно применяем:
- еженедельный мониторинг интересных изменений в пакетах. Медленное старье без жалости выкидываем из набора инструментов и подходов. Типичный пример — пакет checkmate. Четкий упор на производительность заставил в прикладных задачах распрощаться и с базовыми средствами R и с пакетом assertive.
- Использование языка Go для "near real-time" тривиального препроцессинга потоковых данных.
- Пересели на Clickhouse в качестве бэкенда.
- Если задача позволяет, то делаем параллельные вычисления, в т.ч. и средствами R. На использование GPU пока не переходили, не было нужды.
R — отнюдь не паллиатив. Но на бизнес-задачи он натягивается очень хорошо. Если действительно интересно, то можно отдельно обсудить задачу, которая есть у Вас. Может что-то смогу подсказать. Внимательная профилировка и анализ используемых функций порой позволяет ускорить выполнение на несколько порядков. Но нужна конкретика и лучше это делать не в треде, а через личку.
Скажем так. Из того, что я почерпнул в различных статьях R примерно равен по скорости с Python (стандартная реализация). Может быть чуть медленнее. Python в свою очередь медленнее C++,Java в 1000 раз. Matlab чуть-чуть не дотягивает до C++ и Java. Вопрос вот в чем. Можно-ли R «разогнать» до Matlab не сломав себе мозг?
Наверное в чем-то можно. Примеры подходов я упоминал и выше и ниже. Но это все равно сферический ответ, потому что вопрос абстрактен. А еще может оказаться так, что какие-то вещи, наоборот, в Матлабе замучаешься делать, будет он не догоняемым, а безуспешно догоняющим. Можно еще и Julia посмотреть, но без сформулированной задачи это будет простая любознательность.
Спасибо за ваши ответы.
а пример, видимо этот:
habrahabr.ru/post/308534
Неплохие начальные советы можно найти здесь:
— Efficient R Programming: Efficient optimization (и вообще в целом познавательная книга).
— R Inferno (классический подбор основных ошибок при написании кода на R).
Если работа ведётся с «таблицеподобными» данными, которые помещаются в оперативную память и важна именно скорость работы, то можно порекомендовать data.table, хотя я больше предпочитаю dplyr.
на оригинальность я и не претендовал.
про отдельный кейсы с производительностью я упоминал в предыдущих постах.
Тут ведь действительно все зависит от задачи. Например, для работы с временем (а это бывает очень часто) избегайте использования as.POSIXct. Жутко медленная реализация. Но это никак не относится к табличному представлению.
А еще вот это полезно: Extending R with C++. A Brief Introduction to Rcpp
Но и сам язык не стоит на месте в этом вопросе: есть пакеты / сервисы, соторые специально созданы для поддержки действительно BigData, многопоточности и т.д.
Если честно, то описание состояния в целом "считает несколько суток подряд" никак не характеризует эффективность текущего способа решения.
Простой пример. Сейчас в пуле задач есть задача анализа работы колл-центра (нескольких), построенного на астерисках. Астериски в продуктиве, поэтому что уже пишут в логи и cdr, с тем и приходится жить.
Делаем на R, поскольку dial plan весьма сложный, информация нужна очень разная, а существующие open-source системы "статистики" дают разброс в показаниях на сотни процентов. Нет смысла ни разбираться в них, ни дотачивать.
Возможно, после завершения задачи постараюсь опубликовать более подробно.
Не далее как вчера пришлось оптимизировать обработку данных по очередям. 4 последовательных конвейера. Знакомство с принципами работы компьютера на уровне HW (когда-то на asm приходилось писать) + понимание внутренних структур и представлений в R + некие познания в алгоритмах позволили простым путем незначительных преобразований и перестановки последовательности действий ускорить каждый блок примерно в 3-4 раза. Итого, общее ускорение = 3.5^4 ~ 150 раз.
Это мы еще даже не опускались на уровень C++, потенциальное распараллеливание и оптимизацию объемов данных исходя из бизнес-процессов.
А вы уже применяете R в бизнесе?