• Насколько R быстр для продуктива?

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


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


      Является продолжением предыдущих публикаций.

      Читать дальше →
    • Аналитический паRашют для менеджера

        Комментарии в последней публикации «Насколько open-source экосистема R хороша для решения бизнес-задач?» насчет выгрузок в Excel привели к мысли, что имеет смысл потратить время и описать один из апробированных возможных подходов, который можно реализовать не выходя из R.


        Ситуация достаточно типична. В компании всегда есть N методик по которым менеджеры вручную стараются строить в Excel отчеты. Даже если их и втоматизировать всегда остается ситуация, когда нужно срочно сделать какой-то новый произвольный срез или сделать представление для какого-либо руководителя в специфическом виде.


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


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


        Является продолжением предыдущих публикаций.

        Читать дальше →
      • Насколько open-source экосистема R хороша для решения бизнес-задач?

          Поводом для публикации послужила запись в блоге Rstudio: «Shiny 1.1.0: Scaling Shiny with async», которая может очень легко пройти мимо, но которая добавляет очень весомый кирпичик в задаче применения R для задач бизнеса. На самом деле, в dev версии shiny асинхронность появилась примерно год назад, но это было как бы несерьезно и «понарошку» — это же dev версия. Перенос в основную ветку и публикация на CRAN является важным подтверждением, что многие принципиальные вопросы продуманы, решены и протестированы, можно спокойно переносить в продуктив и пользоваться.


          А что еще есть в R, кроме «бриллианта», что позволяет превратить его в универсальный аналитический инструмент для практических задач?


          Является продолжением предыдущих публикаций.

          Читать дальше →
        • Конструктивные элементы надежного enterprise R приложения

            Тем, кто работает с R, хорошо известно, что изначально язык разрабатывался как инструмент для интерактивной работы. Естественно, что методы удобные для консольного пошагового применения человеком, который глубоко в теме, оказываются малопригодными для создания приложения для конечного пользователя. Возможность получить развернутую диагностику сразу по факту ошибки, проглядеть все переменные и трейсы, выполнить вручную элементы кода (возможно, частично изменив переменные) — все это будет недоступно при автономной работе R приложения в enterprise среде. (говорим R, подразумеваем, в основном, Shiny web приложения).


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


            Является продолжением предыдущих публикаций.

            Читать дальше →
            • +11
            • 2,7k
            • 6
          • R как спасательный круг для системного администратора

              Мотивом для этой публикации послужил доклад «Using the R Software for Log File Analysis» на конференции USENIX, который был обнаружен в интернете при поиске ответов на очередные вопросы. Поскольку была написана целая печатная статья, логично предположить, что тема обладает актуальность. Поэтому решил поделиться примерами решения подобного рода задач, решению которых не придавалось такого значения. Фактически, «заметки на полях».
              R, действительно, очень хорошо подходит для подобных задач.


              Является продолжением предыдущих публикаций.


              Читать дальше →
            • «HR-аналитика» средствами R

                Является продолжением предыдущих публикаций.


                Неожиданно оказалось, что для одной из задач, которую пришлось решать примерно год назад, а именно оценка «надежности» большого коллектива, нынче есть весьма популярное название «HR аналитика». Актуализируя в рамках новой задачи материалы, вышел на просторах российского интернета на информативный блог по теме HR-аналитики. Собственно говоря, этот блог + обсуждение вопросов с его автором Эдуардом Бабушкиным и послужили отправной точкой для пересмотра проблематики.


                Настоящая публикация носит, скорее, дискуссионно-аналитический характер, нежели утверждающий. Какие подходы и методы оптимальны для задачи HR аналитики, что можно сделать средствами R. Эта неоднозначность вызвана тем, что объектом исследования являются не явления природы, а поведение людей, которое не всегда логично и предсказуемо, особенно при переходе от коллектива к отдельному человеку.


                Читать дальше →
              • «Оч.умелые ручки»: делаем Tableau/Qlik из R и «синей изоленты»

                  Является продолжением предыдущих публикаций.


                  Естественно, что название является потешным, но, как хорошо известно, в каждой шутке есть доля правды. Сама тема возникла, когда в очередной сотый раз пришлось слышать настойчивое пожелание о том, что необходим «гибкий конструктор отчетов/графиков». После определенного момента проще взять и сделать, чем в очередной раз объяснять, что tidyverse покрывает все необходимые потребности.



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


                  • интерфейс с большим-большим количеством менюшек и кнопочек, с множественными закулисными IF для управления взаимными состояниями этих элементов;
                  • «гибкий плоттер» с большим количеством вложенных IF для отрисовки графиков в соотвествии со скормленным данными и положением кнопочек-ползунков, выставленных в UI.

                  С одной стороны делать «Yet Another Tableau» совершенно неинтересно. С другой стороны, постановка в стиле «сделать так, чтобы все было, но ничего не надо делать» — типичная задача для ТРИЗ.


                  В целом, после непродолжительных размышений было выработано решение, которое почти удовлетворяет последней постановке. Само Shiny приложение пока под NDA, свободно публикуемый прототип приведен на картинке.



                  Две ключевых идеи по упрощению задачи следующие (ничего нового, все уже придумано до нас):


                  1. вместо статически заданного UI переходим к динамически генерируемому;
                  2. используем интерпретатор R не только для исходного кода, но и внутри самого кода.

                  Идея 1. Динамический web-интерфейс


                  Вариант, когда все управляющие элементы статически заданы и меняется лишь их параметризация (название, состояние, списки, выбранные элементы ...) удобен на этапе дизайна. Все понятно, все очевидно, можно ручками пощупать. Но если допустимые состояния этих элементов очень сильно связано как с исходными данными для анализа (data.frame), так и с состоянием друг друга, мы попадаем в ситуацию весьма большого количества нетривиальных обработчиков событий по каждому элементу. Много-много запутанного кода.


                  Сделаем по-другому. Вместо UI элементов со сложным поведением раскидываем с помощью uiOutput placeholder-ы, в которые динамически рассчитываем и генерируем с помощью shiny::renderUI представление этого элемента. Все внешние параметры, требуемые для генерации элемента, трактуем как реактивные элементы (reactive). При этом все такие интерактивные элементы выступают в качестве «автономных агентов», которые смотрят на окружение и подстраиваются под него. Пользователь изменил состояние одного элемента — все зависимые стали пересчитывать по очереди свое состояние (мы явно не обрабатываем события, а используем реактивный подход shiny). При изменении их состояния могут возникнуть новые индуцированные изменения. И так, пока все не стабилизируется.


                  В результате, в коде остается только один обработчик (кнопка «Go»)
                    observeEvent(input$gen_plot, { # код демонстрирует принцип
                  
                      escname <- function(x){
                        # имена колонок надо закавычить
                        # .....
                      }
                  
                      point_code <- ""
                      if(input$shape_type!="__NO_MAPPING__") {
                        aes <- c("shape"=escname(input$aes_shape_col), "color"=escname(input$aes_color_col))
                        point_code <- buildPointCode(fixed=c("shape"=input$shape_type, "color"=glue("'{input$plot_color}'")), aes=aes)
                      }
                  
                      line_code <- ""
                      if(input$line_type!="__NO_MAPPING__") {
                        aes <- c("linetype"=escname(input$aes_linetype_col), "color"=escname(input$aes_color_col))
                        line_code <- buildLineCode(fixed=c("linetype"=input$line_type, "color"=glue("'{input$plot_color}'")), aes=aes)
                      }
                  
                      gcode <- glue("ggplot(data_df(), aes(x=`{input$x_axis_value}`, y=`{input$y_axis_value}`))\\
                                    {point_code} {line_code} + xlab('{input$x_axis_label}')") %>%
                        style_text(scope="spaces")
                  
                      plot_Rcode(gcode)
                    })  
                  Читать дальше →
                • R и Информационная безопасность. Как устранить противоречие интересов и запустить R на Linux в оффлайн-режиме

                    Является продолжением предыдущих публикаций.


                    Очень часто попытки применить инструменты DataScience в корпоративной среде встают в полное противоречие с требованиями Службы Информационной Безопасности (СИБ). В мире DataScience рекомендация «поставь с гитхаба» становится практически нерешаемой при полной изоляции аналитической машины от интернета. Тем не менее, задача запуска на linux инфраструктуры R в offline окружении вполне решаемая. Ниже приведу последовательность мантр, которые позволят это исполнить. Если какие-то шаги будут не совсем прозрачными, то скорректирую по мере появления комментариев. Эти же шаги можно использовать и для online инсталляции, пропуская шаги, относящиеся к хитрым трюкам или созданию локальных репозиториев. Собрано по крупицам на основании многократных инсталляций под разнообразные задачи. Практика показала, что тема весьма актуальна.


                    Читать дальше →
                  • Использование R для «промышленной» разработки

                      Является продолжением предыдущих публикаций. Не секрет, что при упоминании R в числе используемых инструментов вторым по популярности является вопрос о возможности его применения в «промышленной разработке». Пальму первенства в России неизменно держит вопрос «А что такое R?»


                      Попробуем разобраться в аспектах и возможности применения R в «промышленной» разработке.


                      Читать дальше →
                    • R, Asterisk и платяной шкаф

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


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


                        Читать дальше →
                      • А вы уже применяете R в бизнесе?

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


                          За последние пару лет мне довелось применять R для решения весьма разнообразных задач в различных вертикалях. Естественно, что применение R заведомо подразумевает решение задач, связанных с той или иной математической обработкой цифровых данных, а разнообразность задач определялась, в первую очередь, самой предметной областью в которой эти прикладные задачи возникали. Частично отдельные задачи кратко упоминались в предыдущих публикациях. Разные предметные области, от земли (АПК) и заканчивая применением для прикладных задач с использованием летательных аппаратов, вплоть до космических.


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


                          Независимое подтверждение этого тезиса можно получить путем наблюдения за экспоненциальным ростом успешного применения R в обычном бизнесе (не ИТ) на Западе. Например, практически половина докладов с конференции EARL 2017 (Enterprise Applications of the R Language), прошедшей в сентябре этого года, содержат кейсы по использованию R для решения бизнес-задач. В докладах есть примеры по анализу данных в недвижимости, автоматизация деятельности аудиторов, анализ транспортных систем, анализ системы канализации и многие другие отрасли...

                          Читать дальше →
                        • Цифровая экономика и экосистема R

                            Если смотреть прессу, словосочетание «цифровая экономика» ожидается одним из популярных в ближайшие несколько лет.



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

                            Читать дальше →
                          • RStudio Connect — «фейслифтинг» Shiny для корпоративного применения

                              Прошло достаточно времени с упоминания в предыдущей публикации об использовании RStudio Connect в боевых условиях для того, чтобы поделиться результатами. Краткое резюме — «дайте два!». И подумайте про оптимизацию отдела «аналитиков». Ниже приведены подробности.


                              В качестве дополнительного чтения рекомендую взглянуть детальную публикацию «Data at GDS (Government Digital Service). Reproducible Analytical Pipeline» в блоге аналитической службы гос.органов UK по аналогичной теме.


                              Читать дальше →
                              • +10
                              • 3,8k
                              • 8
                            • «Пятый элемент» в экосистеме R. WYSIWYG интерфейс для аналитиков

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


                                Практика общения с аналитиками показала, что лаконичная консоль или лист программы в RStudio IDE как удобный инструмент начинает восприниматься людьми, воспитанными в подходе WYSIWYG, далеко не с первого дня. Продукты PowerBI\Tableau\Qlik, активно использующие этот подход, хорошо известны в российском информационном пространстве и зачастую аналитики пытаются соотнести R+Shiny с этими продуктами.

                                Читать дальше →
                              • Тонкости R. Как минута час экономит

                                  Довольно часто enterprise задачи по обработке данных затрагивают данные, сопровождаемые временной меткой. В R такие метки, обычно хранятся как класс POSIXct. Выбор методов работы с таким типом данных по принципу аналогии может привести к большому разочарованию и убеждению о крайней медлительности R. Хотя если взглянуть на эту чуть более пристально, то оказывается, что дело не совсем в R, а в руках и голове.


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


                                  Читать дальше →
                                • R в enterprise задачах. Хитрости и трюки

                                    Несмотря на то, что задачи рядового бизнеса очень часто далеки от популярной темы больших данных и машинного обучения и часто связаны с обработкой относительно малых объёмов информации [десятки мегабайт — десятки гигабайт], размазанной в произвольных представлениях по различным видам источников, применение R в качестве основного инструмента позволяет легко и элегантно автоматизировать и ускорить эти задачи.


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


                                    Читать дальше →
                                    • +23
                                    • 9,4k
                                    • 9
                                  • «До чего дошел прогRесс». Замена «умственного» труда механическим процессом на базе R

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


                                      На этот раз задача оказалась предельно простая и прагматичная, но ее решение дает далеко идущие последствия.


                                      Кейс


                                      Суть задачи в следующем:

                                      Читать дальше →
                                    • Еще примеры использования R для решения практических бизнес-задач

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

                                        Читать дальше →
                                      • Применение R для подготовки и передачи «живой» аналитики другим бизнес-подразделениям

                                          В этой краткой заметке хочу поделиться еще одним вариантом использования R в повседневных бизнес задачах. Этот «use-case» актуален почти для всех компаний, вне зависимости от их размера. Речь идет о подготовке различных оперативных отчетов и аналитических срезов.


                                          Читать дальше →
                                        • Запрягаем R на службу бизнесу на «1-2-3»

                                            Настоящий пост является является, фактически, резюме, подводящим итоги предыдущих «технологических» публикаций [1, 2, 3, 4, 5] и возникших дискуссий и обсуждений. Последние показали, что задач в которых применение R могло бы оказать хорошую помощь бизнесу очень и очень много. Однако, даже в тех случаях, когда R используется, далеко не всегда для этого применяются современные возможности R.

                                            Читать дальше →
                                            • +23
                                            • 8,7k
                                            • 6