Pull to refresh

Comments 26

Одобряю. На хабре полно программистов и python им ближе, но простым аналитикам комфортно и на R. Каждому своё…

Если нужно не просто внутри покрутить числа, но еще и дать обычным бизнес-пользователям удобный инструмент для самостоятельной работы, то аналога Shiny в Python среде пока что нет. Dash вышел только-только, много проще по функционалу и заточен на plotly, что не кажется неестественным.

UFO just landed and posted this here

А мы на R не только анализируем, но и программируем. Фактически, shinyapp, выступает в качестве лица к аналитическому бэкенду. С обработкой exeption, валидацей, автотестами, ассертами, roxygen документированием, db бэкендом, js+css тюнингом и пр. Ожидаемый в следующем релизе shiny асинхронный режим работы вообще развяжет руки.

UFO just landed and posted this here

А для ряда задач приходится еще вспоминать и Mathematica

Для меня единственной проблемой в R является большое количество пакетов, решающих сходные задачи, особенно если делаешь «на века» — сначала напишешь так, потом по другому… и всё хочется попробовать :)

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

Не знаю, в тему ли статьи или нет, но хотелось бы добавить еще такое наблюдение. Если посмотреть вакансии Data Analyst / Data Scientist на местном рынке труда, то с вероятностью 95% получим описание, в первую очередь, разработчика C или Java с соответствующей «специализацией». Если же аналогичные позиции посмотреть на indeed или seek, то требования явно смещаются в сторону именно анализа, а не создания инструментов. И тут уже фигурируют R, Python, RapidMiner, SPSS и т.п. и даже Excel, а также возникает необходимость в знании средств визуализации. А для публикаций аналитических данных, де-факто, стало стандартом предоставление материалов в формате Jupyter Notebook (как R так и Python).
Могу предположить, что не в последнюю очередь все это связано с тем, что не программисту (экономисту / аналитику / финансисту / математику) не составит особого труда осилить Python или R в качестве рабочего инструмента, в отличие от тех же C или Java. Плюс бесплатность, кроссплатформенность кода, не притязательность в ресурсах и огромное количество доступных ресурсов.

я бы сказал, что "в яблочко". когда смотришь на то, что есть у нас "в среднем" и то, что происходит сейчас за границей в области DS, разрыв в менталитете колоссальный.

Хотелось бы знать мнение тех, кто использует R. Скажем так, бытует мнение, что R очень медленный. Есть-ли подвижки в этом вопросе? В моем случае это один из самых критичных параметров. Ждать — не вариант. Данных очень много и бывает они обрабатываются по несколько суток подряд на i7 c 8 потоками.

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

К сожалению все что можно было сделать уже сделано. Это просто тот случай когда данных очень много.

Мнение — не самый надежный источник данных. Формально — да, base R медленный. Это интерпретатор, хоть и с компиляцией в байт-код.


Однако, современный R — это, прежде всего, набор пакетов, который используется для работы. Большинство пакетов, критичных по времени исполнения, разрабатываются с применением C++. Векторизация, функциональное программирование, выбор правильных пакетов и алгоритмов, использование бэкендов на которые можно переложить рутинную тривиальную работу (БД или BigData движки), использование RCPP для критического кода — вот оптимальный способ применения R.


Мы еще дополнительно применяем:


  1. еженедельный мониторинг интересных изменений в пакетах. Медленное старье без жалости выкидываем из набора инструментов и подходов. Типичный пример — пакет checkmate. Четкий упор на производительность заставил в прикладных задачах распрощаться и с базовыми средствами R и с пакетом assertive.
  2. Использование языка Go для "near real-time" тривиального препроцессинга потоковых данных.
  3. Пересели на Clickhouse в качестве бэкенда.
  4. Если задача позволяет, то делаем параллельные вычисления, в т.ч. и средствами R. На использование GPU пока не переходили, не было нужды.

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

Спасибо за ответ. Пока используется Matlab. Но что бы им полноценно можно было пользоваться его нужно купить. Лицензионная чистота не обсуждается. Сейчас стоит вопрос либо купить Matlab, либо рассмотреть альтернативы.

Скажем так. Из того, что я почерпнул в различных статьях R примерно равен по скорости с Python (стандартная реализация). Может быть чуть медленнее. Python в свою очередь медленнее C++,Java в 1000 раз. Matlab чуть-чуть не дотягивает до C++ и Java. Вопрос вот в чем. Можно-ли R «разогнать» до Matlab не сломав себе мозг?

Наверное в чем-то можно. Примеры подходов я упоминал и выше и ниже. Но это все равно сферический ответ, потому что вопрос абстрактен. А еще может оказаться так, что какие-то вещи, наоборот, в Матлабе замучаешься делать, будет он не догоняемым, а безуспешно догоняющим. Можно еще и Julia посмотреть, но без сформулированной задачи это будет простая любознательность.

Matlab как раз таки устраивает и скоростью и удобством в данном конкретном случае. Не очень устраивает коммерческая лицензия в $2500 ;)

Спасибо за ваши ответы.
В R есть пакет sparklyr ( spark.rstudio.com/index.html ) — реализация технологии Spark из стека Apache. Это, по моему скромному мнению, быстрый Map-Reduce для больших данных за счет того, что данные обрабатываются в оперативной памяти. Плюс там же есть много ML. Скорость обработки существенно возрастает. Даже пример был на Хабре
В R, как обычно, не только sparklyr для Spark, есть еще 3 вариации,
а пример, видимо этот:
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

WinDigo же про свой ответ писал (что у него не самый оригинальный ответ, но он такой «Зависит ...»

Да уже потом увидел, что уровень вложенности тот же самый. Но мой ответ тоже не оригинальный, поэтому никакого подвоха и не увидел.

Как в любом функциональном интерпретируемом языке, скорость исполнения во львиной доле зависит от качества написания кода.
Но и сам язык не стоит на месте в этом вопросе: есть пакеты / сервисы, соторые специально созданы для поддержки действительно BigData, многопоточности и т.д.

Если честно, то описание состояния в целом "считает несколько суток подряд" никак не характеризует эффективность текущего способа решения.


Простой пример. Сейчас в пуле задач есть задача анализа работы колл-центра (нескольких), построенного на астерисках. Астериски в продуктиве, поэтому что уже пишут в логи и cdr, с тем и приходится жить.


Делаем на R, поскольку dial plan весьма сложный, информация нужна очень разная, а существующие open-source системы "статистики" дают разброс в показаниях на сотни процентов. Нет смысла ни разбираться в них, ни дотачивать.
Возможно, после завершения задачи постараюсь опубликовать более подробно.


Не далее как вчера пришлось оптимизировать обработку данных по очередям. 4 последовательных конвейера. Знакомство с принципами работы компьютера на уровне HW (когда-то на asm приходилось писать) + понимание внутренних структур и представлений в R + некие познания в алгоритмах позволили простым путем незначительных преобразований и перестановки последовательности действий ускорить каждый блок примерно в 3-4 раза. Итого, общее ускорение = 3.5^4 ~ 150 раз.


Это мы еще даже не опускались на уровень C++, потенциальное распараллеливание и оптимизацию объемов данных исходя из бизнес-процессов.

В общем случае не характеризует. Но в данном случае заблудится просто негде.

И вместо 150 раз хотелось бы видеть 1000. И так, что бы обойтись без С++, Java и тем более asm.
Sign up to leave a comment.

Articles