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



R Notebook

Как это обычно бывает


В зависимости от масштаба компании и ранее сделанных инвестиций в ИТ в задаче подготовки отчетов встречаются следующие варианты (комбинации вариантов):


  1. Есть корпоративная система отчетности (Oracle, SAP BI, ...) на базе которой должны создаваться все необходимые отчеты. Аналитики вечно заняты, к ним надо записываться на прием, сроки реализации уходят в «+бесконечность», работа с комбинированными и неструктурированными данными ставит всех в ступор, оперативная корректировка отчетов почти невозможна, набор представлений определяется существующим продуктом, а не конкретными бизнес-потребностями.
  2. Различные open-source решения (например, Jasper), которые поддерживаются по остаточному принципу. Желающие могут взять и наваять отчетик, только таких желающих не находится.
  3. Всемогущий Excel. Распространяться про печальные стороны этого подхода не стоит.
  4. Языки программирования или что-то еще....

В принципе, с простыми отчетами по небольшим, структурированным и чистым данным Excel вполне неплохо справляется, но количество затраченных усилий всегда несоразмерно получаемому результату. Шаг влево-вправо, появление дополнительного крохотного требования («а вот такой разрез покажите», «а наложите график», «а как это соотносится с ...») требует массы дополнительных усилий. Переход от Excel к Tableau\QlikView (по сути это не аналитические системы, а улучшенный визуализатор) улучшает возможности по простой обработке данных и динамической визуализации. Но они стоят также немалых денег и требуют серьезного изучения для реализации требований, недоступных простым нажатием на кнопку.


Дополнительно неплохо задаться вопросом, а каков размер данных при подготовке такого аналитического отчета? В 90% случаев все ограничивается крохотным объемом данных (не более нескольких миллионов «excel» строк).


Альтернативное решение — делаем отчеты с применением R


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


  1. Передаем R скрипт для запуска в консоли R-Studio, осуществляющий необходимый процессинг и выдачу результов в консоль\файлы.
  2. Передаем R Notebook/R Markdown скрипт для запуска в консоли R-Studio, осуществляющий необходимый процессинг и выдачу результов в виде повествовательной истории в консоль/html/pdf и пр.
  3. Передаем R Shiny скрипт для запуска в консоли R-Studio, осуществляющий необходимый процессинг и выдачу результов в виде локального web-портала с интерактивом и динамикой. Если бизнес-пользователь вообще ничего не хочет делать (запустить программу и нажать кнопку), то можно самостоятельно публиковать на внутреннем Shiny портале.

При передаче R скрипта конечному потребителю, будь то R Markdown или Shiny portal достаточно передать 1 (один!) скрипт-файл. В случае сложной аналитики можно оформить свой пакет, положить его на github и вкючить в скрипт автоматическую проверку и обновление локального пакета в случае необходимости. для этих целей можно использовать, например, пакеты pacman или githuninstall. При этом в рамках этого скрипта может осуществляться полный цикл работы с данными:


  • подключение к источникам данных;
  • сбор данных;
  • очистка данных с отработкой исключений;
  • аналитические расчеты любой степени сложности;
  • визуализация;
  • обеспечение интерактива по манипуляции с данными;
  • вывод в различных форматах;
  • автоматическая публикация во внешних системах;
  • ...

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


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


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


Выбор за вами.


Предыдущий пост: "Запрягаем R на службу бизнесу на «1-2-3»"

Поделиться с друзьями
-->

Комментарии (32)


  1. a-motion
    14.10.2016 08:45
    +1

    Во-первых, спасибо вам большое за систематизацию use-case’ов для R.

    Во-вторых, а зачем там RStudio в середине? Почему нельзя просто в консоли `R script.R`?


    1. i_shutov
      14.10.2016 10:06

      Все очень просто.


      1. Использование RStudio просто очень удобно. В формате R Notebook можно одной кнопкой запустить на расчет как весь документ, так и отдельную часть (например, после внесения изменения в код перестроить график\таблицу), тут же увидеть результаты, запустить viewer, поглядеть переменные.
      2. Мы говорим об использовании R для презентации результатов обычному бизнес-пользователю, который весьма далек от программирования и ИТ. Ему гораздо проще дать инструкцию на одну страницу, чем объяснять, что такое командная строка, как запускать скрипт (а у вас RScript.exe находится в PATH?), как смотреть результаты. Все должно быть просто и понятно.
      3. Если Вы знаете, как запускать скрипты и это Вас устраивает, то такая возможность всегда доступна.

      А в чем Ваше сомнение по применению RStudio?


  1. renardf0x
    14.10.2016 09:40
    +1

    Содержание статьи: «Пользуйтесь R» + много воды.


    1. i_shutov
      14.10.2016 10:46

      Спасибо за содержательную и компактную рецензию (4 слова!). Я нисколько не иронизирую, этот комментарий позволяет поднять ряд тем и задать встречные вопросы.


      1. Публикации появляются в процессе решения практических задач из совершенно разных областей.
        Конечно можно сказать, что задачи малого и среднего бизнеса, а именно, обычного фермера, обычного издателя, обычного ученого, обычной фабрики, обычного сетевого магазина, просто ничтожны с точки зрения современных вычислительных возможностей и не достойны внимания ни творцов от data science ни ловцов больших бюджетов. Однако, помощь этим людям и компаниям позволяет улучшать ситуацию в стране.
      2. Выносить в публикации "частные частности" на широкую публику не совсем корректно. Можно, конечно, кормить рыбой, но лучше рассказать о том, как ее можно поймать. Собственно говоря, в публикации я поделился методикой\подходом, который хорошо зарекомендовал себя на практике и дает реальную пользу.
      3. Про воду очень интересный тезис. Да, в SMS\tweet она не поместится. Однако, вся публикация содержит ~ 570 слов, включая союзы, и содержит ~10 различных утверждений, т.е. по 57 слов на утверждение. До 4-х слов, как Вы это делаете, я сжимать без потери смысла не умею. С удовольствием почитал бы Вашу публикацию на эту тему. Напишете?
      4. Если "не вода" это код или конкретные частные вопросы, то за этим надо идти в реальную задачу, а после на google+stackoverflow. Вот в конкретной задаче уже можно обсуждать, как прогрузить excel файлы, как доступиться к данным, что делать с кривыми именами колонок, как продублировать последние значения на NA, как распараллелить процесс, как передать данные, как адаптировать график под требования типографии, как сделать высплывающую подсказку, как настроить прогнозный алгоритм для конкретного источника данных и многое другое…

      У Вас есть реальная задача и реальные вопросы? Если есть, поделитесь, давайте попробуем решить их сообща.


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


      Собственно говоря, кому важно, тот возьмет приведенные тезисы на заметку, кому это непонятно или далеко — посмотрит и пройдет мимо. Тут никого никуда не вербуют.


      1. das19
        14.10.2016 11:43

        Этим ответом вы проиллюстрировали статью: на (насчитанные вами) 4 слова вы выдали 4 абзаца и 4 пункта, суть которых ускользает, если вообще была.


        1. i_shutov
          14.10.2016 12:03
          -1

          Юрий,


          1. С момент первой публикации я изначально отмечал, что постараюсь отвечать на все комментарии по сути.
          2. Полагаю, что Вы могли заметить, что в моем ответе был задан ряд вопросов в сторону renardf0x.
          3. Судя по Вашей публикации MLBootCamp «Оценка производительности». Очень простой и быстрый вариант решения, Вы являетесь хорошим специалистом, в т.ч. в R.

          Что ведет Вас по пути троллинга? Какой вопрос Вы хотели задать?


        1. i_shutov
          14.10.2016 14:12

          Хотя согласен, ответ длинный.
          Краткая версия такова: "Вы — не пользуйтесь".


          2 слова!


          1. ikashnitsky
            17.10.2016 11:58
            +1

            @i_shutov
            мне кажется, претензии к вам сводятся к тому, что стиль подачи информации сильно отличается от того, что люди ожидают видеть на хабре. Вы не кормите рыбой, но и не даете удочку — вы рассказываете о существовании удочки и о том, какую лучше выбрать. Это тоже ценно. Но, на мой взгляд, на ваши посты была бы гораздо более благодарная реакция, если бы вы добавили minimal reproducible example к каждому их них. У вас получается подход надменного преподавателя: толковые студенты сами разберутся, бестолковые мне не интересны. С таким подходом выходить к широкой аудитории… ну не то чтобы нельзя… Просто вы закономерно тратите значительное время на около-препирания, когда можно было бы его же пустить на простое улучшение постов для общего блага.


            1. i_shutov
              17.10.2016 12:14

              Отчасти согласен. Со студентами аналогия хорошая, но не совсем применима. На хабре в основном, люди, которые работают. В бизнесе принято немного по-другому — для начала нужны use cases, пока идея не принята детали реализации вторичны.


              Про R люди либо мало знают, либо думают, что он только для решения сложных стат. задач. Я пытаюсь на практических примерах показать, что для R образца 2016 это утверждение неверно. Это задача №1.


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


              Студенты тоже есть, но в факультативном фоне. Разрабатывал с другом программу для МГУ, сейчас идет спецкурс. И подача материала там поставлена совершенно иным образом.


              1. ikashnitsky
                17.10.2016 12:24
                +1

                Если бизнес примеры вам ближе, то здесь, на хабре, вы как автор пытаетесь "продать" инструмент. Без иллюстрации его крутизны большинство "не покупает".


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


  1. AristarXXXX
    14.10.2016 09:40

    Илья, спасибо за статью!
    Тема отличная. Обязательно буду пробовать.
    Markdown вдохновил, попробую R Notebook.
    Особенно, когда можно руководству не говорить, что нашёл для себя средство, которое позволяет актуализировать отчёт в 2 клика, а говорить, что это кропотливый труд, который недоступен простым смертным и по трудо-затратам — просто нереален )


  1. Ananiev_Genrih
    14.10.2016 09:45
    +1

    Илья, приветствую. Спасибо за очередную статью на животрепещущую тему.
    В очередной раз решаю нетривиальную бизнес-задачу: в этот раз требуется объединение множества xls файлов ( 200 — 300 файлов по 15 мегов в среднем = 3-4,5 гига суммарно)
    Споткнулся уже на старте: популярные пакеты R напрочь отказываются читать эти фалы ибо Excel 5.0/7.0 (BIFF5) format

    Вот ругательство от library(xlsx):
    d < — xlsx::read.xlsx(file=file.choose(),sheetIndex=1)
    # Error in .jcall(«RJavaTools», «Ljava/lang/Object;», «invokeMethod», cl,:
    # org.apache.poi.hssf.OldExcelFormatException: The supplied spreadsheet seems to be Excel 5.0/7.0 (BIFF5) format.
    # POI only supports BIFF8 format (from Excel versions 97/2000/XP/2003)


    1. i_shutov
      14.10.2016 10:08

      Генрих, можно поделиться одним excel файликом, на котором это ломается?


      1. i_shutov
        14.10.2016 13:17

        Генрих, я бы предложил самый простой путь.


        1. R не догма. Есть задача, которую надо решить в минимальный срок, от этого и пляшем
        2. batch конвертируем все файлы из старого формата в новый с применением python+win32
        3. После этого все прогружается в R, все колонки, русский текст как русский, а не как base64.

        Пример python скрипта ниже, надо в него просто цикл по файлам добавить. FileFormat поставил принудительно в 56, так импортируется в R без проблем и последующего постпроцессинга. У меня MS Excel 2016 MSO (16.0.7127.1026), 32 разряда


        #!/usr/bin/python
        # -*- coding: cp1251 -*-
        
        import win32com.client
        from win32com.client import constants
        
        def main():
         xlApp = win32com.client.Dispatch("Excel.Application")
         xlwb = xlApp.Workbooks.Open("D:\\Temp\\alcall_details_bristol_w31_1.xls")
        
         xlwb.SaveAs("D:\\Temp\\alcall_details_bristol_w31_3.xls", FileFormat = 56)
         xlwb.Close(SaveChanges=1)
        
        if __name__ == '__main__':
         main()


        1. i_shutov
          14.10.2016 13:23

          Брать, например, ActiveState сборку. Там win32 нормально стоит и ничего особо даже крутить не надо.


        1. i_shutov
          14.10.2016 18:02

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


          "ITG\\\xd1\xe8\xe3\xe0\xf0\xe5\xf2\xfb\\\xd1\xe8\xe3\xe0\xf0\xe5\xf2\xfb"

          В этом случае проходит конвертация в читабельный вид командой


          grp <- iconv(raw$grpname, to = "UTF8", from = "windows-1251")

          Ох уж эти кодировки под виндой....


    1. AristarXXXX
      14.10.2016 11:10

      А через readr не пробовали? Мне он помог победить многие беды.


      1. Ananiev_Genrih
        14.10.2016 11:46

        не заметил там возможности чтения старых xls. зато обратил внимание на

        write_csv
        This is about twice as fast as write.csv


    1. atikhonov
      14.10.2016 12:17

      Не пробовали воспользоваться Microsoft Office Compatibility Pack для конвертирования?


      1. Ananiev_Genrih
        14.10.2016 13:05

        не очень понял как это может помочь


        1. atikhonov
          14.10.2016 13:09

          конвертируете в BIFF8 и дальше снова R


  1. Ananiev_Genrih
    14.10.2016 10:26

    отправил в личку


  1. Ananiev_Genrih
    14.10.2016 11:49

    Тестирование связки R+PowerQuery внутри PowerBI Desktop на слиянии в папке 2-х древних xls 95 оказалось успешным.
    Осталось проверить на всем массиве


  1. i_shutov
    14.10.2016 16:35

    -


  1. Shmele
    14.10.2016 16:35

    Спасибо за статью.
    Я совершенно не в курсе инфраструктуры вокруг R, но как Вам идея использовать для этих же целей Jupyter Notebook-и с R-кодом?
    Использую для подобных целей ноутбуки с python-кодом.
    Там можно и сопроводительный текст в формате Markdown добавить, и графики/таблицы прямо на странице выводиться будут. И запускается так же одной кнопкой. И файлы с кодом никому передавать не надо — обновляете их на своём Jupyter-сервере, и все пользователи дальше работают с обновлённым кодом.
    На jupyter.org есть демо, в том числе и для R.


    1. i_shutov
      14.10.2016 16:36

      Почему R а не python, обсуждали в предыдущих публикациях.
      По совокупности обстоятельств.
      В т.ч. из-за развитых графических средств и возможности создания GUI на базе Shiny в рамках R кода.


    1. atikhonov
      14.10.2016 16:42

      Все это есть и в R — есть rmarkdown ноутбуки, которые также можно залить на RStudio Connect (свой или облачный), а изменив одну строку превратить ноутбук в веб-сервис.


  1. Apatic
    16.10.2016 00:31
    +1

    Что-то я совсем не понял о чем эта статья… :(

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


    Как использование R скрипта, который нужно предварительно написать все тому же аналитику, решит эту проблему?

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

    Если же речь идет о том, чтобы просто автоматизировать построение одного отчета по актуальным данным, то если для таких вещей надо «записываться на прием» к аналитику, то… Тут надо уже руководителям организационно-управленческие решения принимать, ИМХО.


    1. i_shutov
      17.10.2016 10:00
      +1

      Георгий, общая идея публикаций заключается в том, что нынешняя экосистема на базе R позволяет элегантно и непринужденно решать не только статистические задачи (для чего R изначально и создавался и как его многие шаблонно воспринимают), но и обычные бизнес-задачи. При этом в 90% случаев для решения всей задачи можно даже не выходить за рамки R.


      Для восстановления контекста я включил внизу текста ссылку на предыдущие публикации. Собственно говоря, по факту решения ряда практических задач и возникла эта цепочка публикаций. Каждая последующая дополняет и расширяет предыдущие.


      Насчет управленческих решений как раз ИМХО и есть. В каждом случае это все сильно индивидуально.
      Но всегда есть задачи, которые нужно решать в срок вне зависимости от того, что там творится в ИТ инфраструктуре и головах топ-ов.


      • Никого не удивляет факт, что, например, менеджеры по продажам ежеквартально ночами сводят результаты\планы продаж в Excel, хотя в компании есть и SAP и Siebel.
      • Никого не удивляет, что госслужащие после очередного совещания вынуждены решать совсем иные задачи, чем требовалось неделю назад. После следующего совещания опять все изменится.

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


      Применение R позволяет бесплатными средствами существенно упростить задачи отчетности, а также добавить возможность оперативной манипуляции данными (Shiny), что часто оказывается весьма полезным.
      Если меняются установочные данные, то хорошее владение R и пакетами на позволяет модифицировать R script очень и очень быстро.


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


      1. Apatic
        17.10.2016 11:34

        Да, я читал предыдущие статьи. Это все здорово и правильно, но вопрос мой был именно по этому пункту:

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


        Есть, допустим, какая-то учетная система SAP, Axapta, 1C, самописное решение — не суть, назовем это Информационной Системой (ИС).
        Менеджеру/руководителю кому-то еще понадобился отчет. Отчет сложный и сам менеджер настроить его в ИС не может. Он идет к «аналитику»/«программисту» и говорит:

        — Вот тебе образец, ваяй
        — Ок, настрою тебе такой отчет во внутренней системе. Только запишись ко мне на прием и подожди месяцок.

        Теперь вариант с R.

        — Вот тебе образец, ваяй
        — Ок, напишу R скрипт, который будет строить такой отчет. Только запишись ко мне на прием и подожди месяцок.

        В чем отличие второго варианта от первого? Или предполагается, что в варианте с R будет сказано «подожди пару дней», а не «месяцок», потому что написание R скрипта займет меньше времени, чем настройка сложного отчета в ИС?

        P.S. Отдельный вопрос по фразе «оперативная корректировка отчетов невозможна». Почему она невозможна в ИС, а в R станет возможна? Опять же по предполагаемой причине большей сложности настройки отчетов в ИС?


        1. i_shutov
          17.10.2016 11:42

          Суть немного в другом. Чтобы что-то новое затащить в продуктивную систему отчетности необходимо пройти полный цикл DevOps, включая:


          1. анализ требований и модификация модели данных;
          2. разработку;
          3. тестирование;
          4. согласие от безопасников;
          5. апдейт документации.

          Дождаться момента, когда можно будет применить патчи на продуктиве.
          Попробовать насладиться результатом. Если не получилось, запускаем цикл по-новому.


          Применяя R для внешней склейки данных, аналитики и визуализации, мы не меняем продуктивные системы, а всю несостоятельность данных исправляем извне. Равно как вместо интеграции различных систем состыковываем данные в разрезе требуемых отчетов на уровне R скрипта. Т.е. ваш DevOps с продуктива SP\Oracle\Siebel\SalesForce...etc. уходит на вашу локальную машину\амазон облако\микрософт облако.


          1. Apatic
            17.10.2016 11:46

            Теперь понял, спасибо.