Продолжение предыдущих публикаций «Инструменты DataScience как альтернатива классической интеграции ИТ систем» и
«Экосистема R как инструмент для автоматизации бизнес-задач».
Настоящая статья является ответом на возникшие вопросы по пакетам R, которые полезны для реализации описанных подходов. Я ее рассматриваю исключительно как справочную информацию, и отправную точку для последующего детального изучения заинтересовавшимися, поскольку за каждым пакетом скрывается огромное пространство со своей философией и идеологией, математикой и путями развития.


Как правило, все пакеты (9109 штук на 07.09.2016) находятся в репозитории CRAN. Те, что по тем или иным причинам, пока не опубликованы в репозиторий, могут быть найдены на GitHub. Итак, кратким списком:


Пакеты Hadley Wickham (Hadleyverse)


Детально про пакеты можно прочесть на репозитории GitHub


  • dplyr — расширения грамматических конструкций для манипуляций с данными. В качестве вводной статьи, я бы посоветовал "dplyr and pipes: the basics", несмотря на то, что опубликована она была в 2014-м году
  • ggplot2 — расширения грамматических конструкций для визуализации. Представление о возможностях можно получить в книге "Cookbook for R", глава "Graphs"
  • scales — расширение ggplot2 для масштабирования осей графиков
  • ggmap — расширение ggplot2 для работы с картографией
  • lubridate — "магия" по работе с датами и временем. Идеология описана в статье "Dates and Times Made Easy with lubridate"
  • readr — улучшенный импорт текстовых данных в R
  • forcats — улучшенная работа с категориальными переменными
  • tibble — современное переосмысление штатной структуры данных data.frame
  • readxl — импорт excel данных в R
  • purrr — расширения грамматических конструкций для функционального программирования
  • tidyr — улучшенная работа с "грязными" исходными данными. Идеология описана в статье "Tidy Data"
  • reshape2 — улучшенная трансформация данных. Идеология описана в статье "Reshaping Data with the reshape Package"
  • stringr — улучшенная работа с текстовыми строками
  • curl — улучшенный подход для работы с данными по HTTP
  • httr — упрощенный подход по работе с данными по протоколу http
  • xml2 — улучшенная работа по поддержке XML

Элементы программирования и работы с данными


  • futile.logger — развитая система логирования
  • iterators — поддержка итераторов
  • foreach — улучшенная поддержка циклических конструкций
  • magrittr — грамматика работы с маршрутизацией данных (pipe)
  • jsonlite — упрощенная поддержка JSON
  • sp — поддержка работы с геоданными
  • data.table — расширение штатной модели данных data.frame для работы с большими данными
  • broom — преобразование данных стат. функций в формат tidy data (см. выше). Детально можно ознакомиться в статье broom: An R Package for Converting Statistical Analysis Objects Into Tidy Data Frames
  • knitr — подготовка документов различных форматов (статика и интерактив, детальнее здесь) из единого формата R Markdown. В целом, это вообще отдельный мир.

Shiny и веб формы


  • shiny — сам фреймворк
  • shinythemes — дополнительные темы (shiny построен на bootstrap)
  • highcharter — враппер для highcharts
  • googleVis — коннектор к Google Charts диаграмм. Детальнее здесь и здесь
  • shinydashboard — наборы функций для построения дашбордов (немного устарел)
  • flexdashboard — современный подход к построению дашбордов. Детально можно ознакомиться здесь
  • shinyjs — дополнительный JS интерактив
  • htmlwidgets — поддержка html виджетов, галерея здесь
  • plotly — интерфейс к интерактивной системе визуализации Plot.ly. Детально можно ознакомиться здесь
  • leaflet — враппер для интерактивных карт JS leaflet. Детально можно ознакомиться здесь
  • DT — враппер для интерактивных таблиц JS DataTable. Детально можно ознакомиться здесь
  • rbokeh — R интерфейс к библиотеке визуализации Bokeh. Детально можно ознакомиться здесь

Цвета и темы


  • RColorBrewer — пакет для гибкой работы с цветами
  • viridis — цветовая палитра Virdis. Детали здесь
  • wesanderson — еще палитра
  • ggthemes — темы для ggplot2. Детали здесь

В своей деятельности я еще использую 2-3 десятка других пакетов, но они имеют более узкую специфику, либо просто обеспечивают коннекты к внешним источикам (ODBC, No-SQL, git, dropbox, etc.)

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

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


  1. atikhonov
    07.09.2016 15:07
    +1

    В раздел Shiny и веб формы, я бы добавил еще flexdashboard


    1. i_shutov
      07.09.2016 15:19

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


  1. galev
    07.09.2016 23:42

    Интересно, Вы упомянули iterators, но не foreach? Мне кажется, это вообще пакет №2 для работы.


    1. i_shutov
      08.09.2016 09:48

      да, они шли в связке, потерялся при copy-paste при вычленении вторичных. Исправил


  1. Alibek24
    08.09.2016 11:43

    спасибо! Ждем теперь какой-нибудь туториал


  1. i_shutov
    08.09.2016 13:53

    Вряд-ли получится дождаться. Их в интернете есть множество, нет смысла дублировать. А вот если есть конкретная задача, то можно попробовать накидать костяк и на ее примере обсудить тонкие или непонятные моменты.


  1. ikashnitsky
    08.09.2016 14:24

    Добавил бы к общим рекомендациям пакет rio, который оборачивает кучу разновидных функций для чтения файлов разных расширений в единую функций rio::import. С этим пакетом в большинстве случаев достаточно писать лишь import('file.extension') — а дальше магия.
    Еще я очень люблю пакет pacman, который сильно упрощает установку/обновление/загрузку пакетов.
    Много еще классных пакетов. Всех не перечислить. Стоит лишь столкнуться с конкретным вопросом — как правило, есть классный пакет.


    1. i_shutov
      08.09.2016 14:34

      pacman, как devtools начинают требоваться, когда занимаешься постоянными инсталляциями R на разных машинах\серверах.
      Поэтому и не стал их упоминать с базовом списке.


      К pacman я бы добавил еще и githubinstall


  1. jzha
    08.09.2016 18:25

    Спасибо за полезный список!

    Интересно знать, Rcpp и прочие Rcpp* библиотеки не входят в ваш активный набор инструментов?


  1. i_shutov
    08.09.2016 18:46

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


    1. jzha
      08.09.2016 23:01

      Илья, пакет data.table включен в ваш список, но хочу лишний раз его порекоммендовать к использованию. Очень удобный синтаксис и превосходное быстродействие при работе с данными.
      Еще, на мой взгляд, стоит упомянуть пакет googleVis для построения Google Charts диаграмм.


      1. i_shutov
        09.09.2016 09:47

        googleVis сам не использую, но включил


      1. ikashnitsky
        09.09.2016 11:40

        По-моему, уже вполне можно подводить итог: data.table начисто проиграл dplyr — и по читабельности/удобству скрипта, и по скорости расчетов, и по удобству интеграции с другими полезными пакетами (это отсылка к Hadleyverse)


        1. i_shutov
          09.09.2016 11:45

          Опасное заявление. Есть множество сторонников data.table и для ряда задач он действительно гораздо быстре. Люди в Яндексе, например, его любят. В целом, это хорошо, что есть альтернативные сосуществующие подходы. Но по простоте и широте подходов dplyr действительно выглядит лучше.


          1. ikashnitsky
            09.09.2016 12:45

            Раз уж такая пьянка… позволю себе еще одно "опасное" и совершенно субъективное мнение. Мне кажется, что data.table приходится больше по душе людям со сформированным давно математическим складом ума и тягой к емким формулировкам. Не удивительно, что гораздо более "человечный" dplyr стал значительно популярнее. Для подавляющего большинства пользователей R — это в первую очередь не язык программирования, а скриптовая замена менее гибких сред для анализа и визуализации данных (Excel, SPSS, SAS...). На протяжении долгого времени скорость работы data.table была главным аргументом против plyr. Но с появлением dplyr пал последний бастион. Так что, мне кажется, рекомендовать новичкам (а ведь на них рассчитана ваша статья, так?) data.table не правильно. При этом я абсолютно отдаю себе отчет в том, что data.table красив, быстр и прекрасно подходит для тех, что давно к нему привык.


            1. i_shutov
              09.09.2016 12:51

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


              Но не упомянуть было бы неправильно.
              Опять же, рядом упомянут и tibble.
              А списывать data.table не стоит, в репозитории 9К пакетов, наверняка у половины из них есть активные пользователи.


        1. jzha
          09.09.2016 13:10
          +1

          Хорошо, читабельность/удобство вещи субъективные. Приведите, пожалуйста, примеры или ссылки на тесты, в которых data.table начисто проигрывает по скорости расчетов dplyr. Я полагаю, такого быть не может. Возможно, ошибаюсь, не отслеживаю изменения в dplyr.


          1. atikhonov
            09.09.2016 13:29

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


  1. AristarXXXX
    14.09.2016 11:58

    Хочу ещё добавить, что для получения данных из БД — не обойтись без:


    • RODBC для подключения к любым(ну почти) БД через ODBC коннекторы (но с настройкой с ходу разобраться не просто)
    • RMySQL для простого и удобного подключения к MySQL БД.

    Знаю, что Илья (автор) про эти пакеты знает, но, может, кому-то информация будет полезна.