Продолжение предыдущих публикаций «Инструменты 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
— улучшенный импорт текстовых данных в Rforcats
— улучшенная работа с категориальными переменнымиtibble
— современное переосмысление штатной структуры данных data.framereadxl
— импорт excel данных в Rpurrr
— расширения грамматических конструкций для функционального программированияtidyr
— улучшенная работа с "грязными" исходными данными. Идеология описана в статье "Tidy Data"reshape2
— улучшенная трансформация данных. Идеология описана в статье "Reshaping Data with the reshape Package"stringr
— улучшенная работа с текстовыми строкамиcurl
— улучшенный подход для работы с данными по HTTPhttr
— упрощенный подход по работе с данными по протоколу httpxml2
— улучшенная работа по поддержке XML
Элементы программирования и работы с данными
futile.logger
— развитая система логированияiterators
— поддержка итераторовforeach
— улучшенная поддержка циклических конструкцийmagrittr
— грамматика работы с маршрутизацией данных (pipe)jsonlite
— упрощенная поддержка JSONsp
— поддержка работы с геоданнымиdata.table
— расширение штатной модели данных data.frame для работы с большими даннымиbroom
— преобразование данных стат. функций в формат tidy data (см. выше). Детально можно ознакомиться в статье broom: An R Package for Converting Statistical Analysis Objects Into Tidy Data Framesknitr
— подготовка документов различных форматов (статика и интерактив, детальнее здесь) из единого формата R Markdown. В целом, это вообще отдельный мир.
Shiny и веб формы
shiny
— сам фреймворкshinythemes
— дополнительные темы (shiny построен на bootstrap)highcharter
— враппер для highchartsgoogleVis
— коннектор к 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)
i_shutov
08.09.2016 13:53Вряд-ли получится дождаться. Их в интернете есть множество, нет смысла дублировать. А вот если есть конкретная задача, то можно попробовать накидать костяк и на ее примере обсудить тонкие или непонятные моменты.
ikashnitsky
08.09.2016 14:24Добавил бы к общим рекомендациям пакет
rio
, который оборачивает кучу разновидных функций для чтения файлов разных расширений в единую функцийrio::import
. С этим пакетом в большинстве случаев достаточно писать лишьimport('file.extension')
— а дальше магия.
Еще я очень люблю пакетpacman
, который сильно упрощает установку/обновление/загрузку пакетов.
Много еще классных пакетов. Всех не перечислить. Стоит лишь столкнуться с конкретным вопросом — как правило, есть классный пакет.i_shutov
08.09.2016 14:34pacman
, какdevtools
начинают требоваться, когда занимаешься постоянными инсталляциями R на разных машинах\серверах.
Поэтому и не стал их упоминать с базовом списке.
К
pacman
я бы добавил еще иgithubinstall
jzha
08.09.2016 18:25Спасибо за полезный список!
Интересно знать, Rcpp и прочие Rcpp* библиотеки не входят в ваш активный набор инструментов?
i_shutov
08.09.2016 18:46Евгений, добрый день.
В мой не входит, поскольку мне более интересно смотреть на задачи на стыке с бизнесом, чем писать низкоуровневые компоненты.
Если можете расширить список полезными для широкого круга на Ваш взгляд пакетами, допишите, пожалуйста, в комментарии, а я потом перетащу в текст.jzha
08.09.2016 23:01Илья, пакет data.table включен в ваш список, но хочу лишний раз его порекоммендовать к использованию. Очень удобный синтаксис и превосходное быстродействие при работе с данными.
Еще, на мой взгляд, стоит упомянуть пакет googleVis для построения Google Charts диаграмм.ikashnitsky
09.09.2016 11:40По-моему, уже вполне можно подводить итог:
data.table
начисто проигралdplyr
— и по читабельности/удобству скрипта, и по скорости расчетов, и по удобству интеграции с другими полезными пакетами (это отсылка к Hadleyverse)i_shutov
09.09.2016 11:45Опасное заявление. Есть множество сторонников
data.table
и для ряда задач он действительно гораздо быстре. Люди в Яндексе, например, его любят. В целом, это хорошо, что есть альтернативные сосуществующие подходы. Но по простоте и широте подходовdplyr
действительно выглядит лучше.ikashnitsky
09.09.2016 12:45Раз уж такая пьянка… позволю себе еще одно "опасное" и совершенно субъективное мнение. Мне кажется, что
data.table
приходится больше по душе людям со сформированным давно математическим складом ума и тягой к емким формулировкам. Не удивительно, что гораздо более "человечный"dplyr
стал значительно популярнее. Для подавляющего большинства пользователей R — это в первую очередь не язык программирования, а скриптовая замена менее гибких сред для анализа и визуализации данных (Excel, SPSS, SAS...). На протяжении долгого времени скорость работыdata.table
была главным аргументом противplyr
. Но с появлениемdplyr
пал последний бастион. Так что, мне кажется, рекомендовать новичкам (а ведь на них рассчитана ваша статья, так?)data.table
не правильно. При этом я абсолютно отдаю себе отчет в том, чтоdata.table
красив, быстр и прекрасно подходит для тех, что давно к нему привык.i_shutov
09.09.2016 12:51в контексте новичков я совершенно согласен.
У меняdata.table
не "пошел", да и задач для его специального применения не было.
Ускорять с суток до секунд разумно, в этом случае можно искать альтернативные подходы.
Ускорять с десятков секунд до секунд — ну только, если действительно никак нельзя подождать.
Но не упомянуть было бы неправильно.
Опять же, рядом упомянут иtibble
.
А списыватьdata.table
не стоит, в репозитории 9К пакетов, наверняка у половины из них есть активные пользователи.
jzha
09.09.2016 13:10+1Хорошо, читабельность/удобство вещи субъективные. Приведите, пожалуйста, примеры или ссылки на тесты, в которых data.table начисто проигрывает по скорости расчетов dplyr. Я полагаю, такого быть не может. Возможно, ошибаюсь, не отслеживаю изменения в dplyr.
atikhonov
09.09.2016 13:29Согласен, во всех внешних тестах сравнений dplyr и data.table, да и на своем опыте вижу, data.table быстрее, как на базовых операциях (фильтрация, выбор) так и на сложных агрегациях, но может в каких-то вырожденных случаях dplyr и будет быстрее.
AristarXXXX
14.09.2016 11:58Хочу ещё добавить, что для получения данных из БД — не обойтись без:
- RODBC для подключения к любым(ну почти) БД через ODBC коннекторы (но с настройкой с ходу разобраться не просто)
- RMySQL для простого и удобного подключения к MySQL БД.
Знаю, что Илья (автор) про эти пакеты знает, но, может, кому-то информация будет полезна.
atikhonov
В раздел Shiny и веб формы, я бы добавил еще flexdashboard
i_shutov
Добавил. Упоминал его в предыдущих статьях, тут на этапе компоновки затерялся