Pull to refresh

Comments 33

UFO just landed and posted this here

Python — замечательная штука, да и вообще все уже придумано до нас :), но


  1. Абстрактно все сферические кони хороши. Преимущества и недостатки всегда рассматривают в контексте.
  2. Если речь идет о комплексном DS приложении, которое должно еще и предоставлять результаты простым пользователям в виде дашбордов, приложений, отчетов, hard-copy артефактов, то наличие Shiny начинает сильно перевешивать.
  3. Результат работы "поверхностно знакомых" специалистов, как правило, весьма посредственный. Программирование лишь частный случай. Настоящих профессионалов в любом деле всегда мало.
  4. Куча библиотек — это просто куча битов и байтов, до тех пор, пока на собственном опыте не наберешь шишки и не поймешь, что хорошо, что плохо и как это использовать. Наличие нескольких сетей фитнес-центров никак не сказывается на физической форме отдыхающих на диване. Кстати, аналогов stringi\stringr в python я пока не нашел. Может, конечно, не достаточно сильно искал...
  5. Никто и не говорит, что Python плохой. Это отличный язык и я с удовольствием периодически его использую с 2006 года. Речь о том, что R сильно недооценен в России. Хорошо знать один язык. А два — лучше.
UFO just landed and posted this here

Да, насчет Питона в DS был еще тот холивар, вот на сейчас точно уже не скажу, закончился ли он или где-то еще есть засады. Надоело находится в ожидании "вот-вот" все случится.


На протяжении нескольких лет камнем преткновения являлся вопрос портирования DS библиотек с 2.7 на 3.x.
Появлялись посты типа такого: "Will Scientists Ever Move to Python 3?" и сайты типа такого: "Python 3 Readiness".


И если обычные разработчики активно переходили на 3.x ветку и пользовались всеми новыми фичами, то DS до последнего держалась за 2.7.


При этом все понимали, что с переходом на 3.x придется от многих привычек отвыкать и переучиваться. Мрачное ощущение тратить время и силы на изучение и работу с инструментом дни которого сочтены и дата окончания задекларирована.

Есть опыт работы и с Python и с R. Главное, что даёт R +shiny etc — скорость получения презентабельного продукта с нуля (конечно, под целевые задачи). Скорость в R больше, чем в Python, пожалуй, на порядок.
Действительно, в Python уже есть библиотеки практически на все случаи жизни. На R попробовал писать просто ради интереса. Оказалось, что для обработки данных и расчетов он ничуть не хуже Python: простой синтаксис, куча библиотек, вполне вменяемая RStudio. Далее, дал молодому специалисту неделю на изучение и практику, после чего он и схожий по квалификации человек реализовали не самую тривиальную задачу на R и Python соответственно. Цифровой результат и графики, понятно, получились одинаковыми, но реализация на R получилась компактнее, заняла на, примерно, треть меньше времени, а читабельность кода, по субъективным оценкам, выше чем на Python.

Другим плюсом является прозрачная интеграция C++ кода, что для нас крайне важно.

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

Если что-то смущает, можно обсудить и обменяться возможными вариантами решения. Скайп/телеграм/почта.
Это всегда полезно. И потому что помогает расширить community и потому что может привести к необходимости поиска ответа, переосмыслению устоявшихся ранее подходов.


На текущий момент мы постоянно смотрим новую информацию по пакетам R, интересные методики и реализации. Если что-то появляется интересное и более эффективное, проверяем и без жалости выкидываем старое. Из последних интересных перемещений (в ряде задач) с saveRDS/readRDS на http://www.fstpackage.org/

Если что-то смущает, можно обсудить и обменяться возможными вариантами решения.

Смущает, в основном, возможность написать
x < -2
вместо
x <- 2
и не получить никаких предупреждений.
А ошибиться в числе отступов Python не смущает? :) Синтаксис он вещь такая… казнить нельзя помиловать
  1. В самом начале публикаций давал пояснение, почему мы перешли на R. Ничего с того момента не изменилось.
  2. Я не говорю об отдельных графиках, речь идет про полноценное приложение. С таблицами, закладками, элементами управления, контекстным drill-down, генерацией всевозможных всеформатных выгрузок, интеграцией с кучей внешних систем. Например, как описано в прошлой статье.
  3. Про stringi\stringr в картинках можно посмотреть здесь. Насчет графики — я подходил несколько раз к matplotlib аж с 2008, и все разы он не дотягивал до требований, приходилось откладывать. А функционал и семантика ggplot позволяет рисовать почти любые графики, какие только пользователям взбредут в голову. Приходится их просить не сдерживать себя в фантазиях :) А то, кроме кружочков ничего придумать не могут.
Очередной коллектив отечественных разработчиков перешёл на R. Теперь вас двое.

Артем, в смысле "нас" двое? Нет, много больше :)

Хотелось бы верить ) Сам большой фанат R, но все знакомые мне по реальной жизни data scientists/engineers работают на Python. Недавно искал работу в МСК, из дюжины где-то компаний, которые посетил, R использует только одна. И то только для создания прототипов.
Нас, как минимум, трое :)
Четверо мининимум, и еще двоих хороших R сайентистов знаю.
Мне кажется пропаганду языка R необходимо вести не сколько среди разработчиков, а, скорее среди сотрудников финансово-экономической службы и аналитиков. Плюс, менеджмент среднего и верхнего уровня. На соответствующих ресурсах.
Может, я не прав, но, как по мне, то программисты довольно консервативны. Особенно те, что работают в поддержке крупных компаний. Если у них есть некий отлаженный процесс, сформировавшийся набор используемых заготовок и билиотек, то сложно будет заставить все переделать на некой новой платформе. А подавляющей доле экономистов и аналитиков, практически, нечего терять кроме Экселя.

По моему опыту, там вообще вся эта тема фиолетова. Там надо говорить об исполнении плана, марже, воронке продаж, клиентах, соблюдению KPI и РЕЗУЛЬТАТАХ (иногда никто не знает, как они должны выглядеть, но они обязательно должны быть).


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

Я с Вами не соглашусь. Вероятно, многое зависит от компании, ее политики и руководства. У меня есть практический опыт «внедрения» новых технологий именно среди сотрудников финансово-экономической службы крупного холдинга. Если сотрудники решают творческие задачи, а не лабают таблички «цена — количество — сумма», если есть четко описанные процедуры по тем или иным процессам, то как исполнители, так и их руководители стараются найти резервы. Задачи усложняются, их число растет, а человеко-часы подразделения остаются неизменными. Достаточно показать: вот модель, выполненная вами в экселе и ее создание заняло 3 дня, а вот она же, реализованная с помощью Azure ML в бесплатном аккаунте за 1 день. Вот анализ полевых работ за два сезона в Экселе. Ее открытие занимает три минуты и делалась она неделю, а вот такой же анализ, сделанный на python, делающий пересчет за 10 секунд и разработанный за два дня. Именно так я и сделал. Пара человек загорелась новыми идеями, начальник выделил им рабочее время(!) на изучение новшеств. Достаточно было продемонстрировать их же живые примеры по принципу «было — стало».

В такой форме комментария я 100% соглашусь. У меня именно таких примеров есть некоторое количество. Я ровно с этой целью и трачу время на публикации, чтобы заинтересованные люди могли ознакомиться с интересными возможностями, увидеть, что задачи решаются, причем решаются весьма элегантно и попробовать самим применить. А дальше уже как раз по сценарию внутренних коммуникаций в своей компании. Ведь неизвестному человеку извне весьма сложно пробиться к финансовым сотрудниками крупного холдинга :).


А бизнес, все-таки, интересует только результат. Демонстрация решения именно их задач на именно их данных — ключевой момент. Все остальное — пустой звук и игры разума.

R популярен среди банковских аналитиков для скоринга, предсказания оттока, кластеризации. Особенно рулит логистическая регрессия и внимание к выполнению предположений о модели данных.

Я совсем не специалист по R (от слова вообще), но за последний год он не раз и не два помогал мне в NLP и оценки алгоритмов для ML. Для моих крайне нетребовательных по скорости задач, R мне показался наиболее лаконичным и простым языком. Жаль, что ру—коммьюнити очень не большое. Доки с CRAN конечно читаю, но все равно 99% провожу на SO.

r bloggers тоже хорошее комьюнити
Скажите, пожалуйста, какой размер команды разработки / поддержки? Не из праздного любопытства — от размера команды будет зависеть понимание масштаба поддержки. На сколько я понимаю по вашим предыдущим статьям, широко используется shiny и мне интересно как осуществляется поддержка и bug-fixing достаточно большой командой, учитывая практически полную связь бэка и фронта. В моем понимании каждый член команды должен знать архитектуру и функциональность практически ВСЕГО приложения и всех его частей для эффективной поддержки. В маленьких командах это может не быть проблемой, но в распределённых — большой вопрос…

Поскольку стек у нас чуть больше, тут и go\python\Clickhouse\реляционные БД\JS+CSS+HTML, то, в зависимости от проекта, получается вовлеченными 4-6 человек разработчиков. На R получается 1-3 в зависимости от масштаба. И обязательно нужны люди, владеющие предметной областью. Сами shiny приложения получаются весьма компактными. При избыточном коде — вынос излишков в пакеты\функции и тотальное обкладывание автотестами и ассертами. Если возникают нюансы с пакетами — общаемся через github c разработчиками. Очень ждем выхода в продуктив асинхронных функций в shiny: An informal intro to async Shiny by Joe Cheng

При избыточном коде — вынос излишков в пакеты\функции и тотальное обкладывание автотестами и ассертами.


А вы не могли бы поделиться вашим опытом? Какой код уже можно назвать избыточным, чтобы начать выносить функции в зависимости/пакеты?

тут флейм получится, проще по почте\скайпу. да и на код надо глядеть.
грубо, использую 3 критерия:


  1. любой код > 1 экрана лучше посмотреть на предмет поджимания (вынос частей в функции\ применение функционального подхода);
  2. повторный блок copy-paste — претендент на функцию;
  3. чуть измененный copy-paste — претендент на параметризацию и свертку в функцию;
Спасибо! У меня прототип на 10К строк уже написанный в функциональном стиле. Видимо, пора подумать над выносом в зависимости.
Я пишу на R года 3, на Python даже не пробовал. Все плюсы, перечисленные в статье также поддерживаю. data.table еще упомяните, это бомба. Но слабое место в глубинном обучении. mxnet под R как практически единственная возможность писать глубокие нейросети выглядит довольно убого по документации и виду кода по сравнению с фреймворками на Python. В остальном R позволяет крутить данные во всех сферах, от физики, до геномики, до маркетинга и делать эффективные презентации, которые может быть даже покрасивее будут, чем Jupiter при условии встраивания JS таблиц и графиков. Время разработки также очень сжатое: за полгода можно наваять огромный прототип продукта, который займет года 3 на реализации на Плюсах, например (с Python не сравнивал).

о, не успел нажать отправить :)

Он совсем недавно появился, ага. но еще не пробовал.
Sign up to leave a comment.

Articles