[Вы можете увидеть еще одну мою публикацию об изучении библиотек Python для сквозных проектов в области науки о данных по этой ссылке]

Важное примечание: этот пост представляет собой просто собрание самых популярных библиотек R для науки о данных, о которых я знал раньше, некоторых других важных библиотек нет в этом списке, поэтому, пожалуйста, оставьте мне свой отзыв для улучшения. Почти информацию, относящуюся к этим библиотекам, я цитирую прямо с их веб-сайтов (со ссылкой / источником) для обеспечения объективности. К моему личному мнению у меня тоже есть конкретное замечание. Приятного чтения!

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

Подготовка данных → Визуализация данных → Разработка функций → Построение и проверка модели машинного обучения → Объяснение модели → Передача результатов → Развертывание (веб-приложение)

Сегодня мы рассмотрим некоторые полезные библиотеки R, которые можно использовать для анализа данных полного стека:

  1. Подготовка данных:

Домашняя страница Tidiverse: https://www.tidyverse.org/
Домашняя страница Data.table: https://rdatatable.gitlab.io/data.table/
Домашняя страница Sparklyr: Https://spark.rstudio.com/

Tidyverse и data.table - лучшие инструменты для сбора и подготовки данных в R. Tidyverse имеет удобный для пользователя синтаксис (select, mutate, filter, summarize, group_by…) по сравнению с неудобным синтаксисом, таким как data.table (R) или pandas ( питон). Howerver, data.table очень быстр по сравнению с tidyverse или pandas (python). Я часто выбираю data.table для большого файла csv (лучшее управление памятью и скорость). Если очень большой набор данных требует распределенной обработки данных на нескольких компьютерах, Spark - лучший выбор.

Обновление с https://dtplyr.tidyverse.org/: tidyverse также имеет пакет dtplyr (он предоставляет бэкэнд data.table для dplyr). Цель dtplyr - позволить вам написать код dplyr (выбор, фильтр….), Который автоматически преобразуется в эквивалентный, но обычно намного более быстрый код data.table.

Изображение экосистемы Tidyverse (автор: Сильвия Канелон, PhD. Оригинал ссылка)

  • CSV, TXT, TSV… файл: readr (tidyverse), fread (data.table)
Example from https://readr.tidyverse.org/reference/read_delim.html:
library(tidyverse)
read_csv("mtcars.csv")
read_tsv("a\tb\n1.0\t2.0")
read_delim("a|b\n1.0|2.0", delim = "|")
starwars %>% filter(species == "Droid")
starwars %>% 
  mutate(name, bmi = mass / ((height / 100)  ^ 2)) %>%
  select(name:mass, bmi)
Example from this link:
library(data.table)
flights <- fread ("flights14.csv")
flights[origin == "JFK" & month == 6L] # Get all the flights with “JFK” as the origin airport in the month of June.
flights[, c("arr_delay", "dep_delay")] # select column
  • Файл Excel: readxl (tidyverse)
library(readxl)
#import chickwts sheet
read_excel("madrid_temp.xlsx", sheet = "chickwts")
  • База данных (MySQL…): dplyr (backend - dbplyr), DBI. Вы можете запрашивать данные непосредственно из базы данных с помощью dplyr (SQL не требуется), бэкэнд dbplyr автоматизирует преобразование синтаксиса dplyr в код sql, как показано ниже:
Example from this link :
library(dplyr) 
con <- DBI::dbConnect(RSQLite::SQLite(), path = ":memory:")
flights <- copy_to(con, nycflights13::flights)
flights %>%
  select(contains("delay")) %>%
  show_query() 
#> <SQL>
#> SELECT `dep_delay`, `arr_delay`
#> FROM `nycflights13::flights`
# if databases don't live in a file, but instead live on another server:
con <- DBI::dbConnect(RMySQL::MySQL(),    host = "database.rstudio.com",   user = "hadley",   password = rstudioapi::askForPassword("Database password") )
  • Веб: rvest, RCurl

Rvest - инструмент для удаления веб-страниц в R, почти то же самое, что и beautifulshop в python. Преимущество этого инструмента в том, что вы можете применять аккуратный способ, например% ›%, при кодировании (лучшее понимание кода, чем в Python).

Example from https://rvest.tidyverse.org/ :
library(rvest)

# Start by reading a HTML page with read_html():
starwars <- read_html("https://rvest.tidyverse.org/articles/starwars.html")
films <- starwars %>% html_elements("section")
title <- films %>% 
  html_element("h2") %>% 
  html_text2()
library(RCurl)
web <- "https://raw.githubusercontent.com/alstat/Analysis-with-Programming/master/2013/R/How%20to%20Enter%20Your%20Data/Data.dat"
x <- getURL(web)
y <- read.table(text = x, header = TRUE)

Sparklyr: интерфейс R для Apache Spark (https://spark.rstudio.com/)

[Ссылка на определение] Apache Spark - это единый аналитический движок для крупномасштабной обработки данных. Он предоставляет высокоуровневые API-интерфейсы на Java, Scala, Python и R, а также оптимизированный движок, поддерживающий общие графики выполнения. Он также поддерживает богатый набор инструментов более высокого уровня, включая Spark SQL для SQL и обработки структурированных данных, MLlib для машинного обучения, GraphX для обработки графов и Структурированную потоковую передачу для инкрементных вычислений и потоковой обработки.

Sparklyr [Ссылка на определение]: интерфейс R для Spark в стиле тидиверса. С помощью sparklyr вы можете подключаться к Spark из R (с бэкэндом dplyr), фильтровать и агрегировать наборы данных Spark, а затем переносить их в R для анализа и визуализации, использовать распределенную библиотеку машинного обучения Spark из R, создавать расширения, которые вызывают полную Spark API и предоставление интерфейсов для пакетов Spark

Изображение с сайта https://spark.rstudio.com/guides/data-lakes/:

Ресурс для изучения Sparklyr и больших данных в R:
- Веб-страница: https://spark.rstudio.com/
- Книга Освоение Spark с R: https://therinspark.com/
- Исследование, визуализация и моделирование больших данных с помощью R: https://okanbulut.github.io/bigdata/

Example from https://spark.rstudio.com/:
# Connect to spark:
library(sparklyr) 
sc <- spark_connect(master = "local")
# We can now use all of the available dplyr verbs against the tables within the cluster.

2. Визуализация данных:

Вы можете посетить этот отличный веб-сайт (https://www.r-graph-gallery.com/index.html), чтобы найти сотни диаграмм, созданных с помощью языка программирования R. Эти библиотеки ниже предназначены только для справки.

[Ссылка] ggplot2 - система декларативного создания графики, основанная на Грамматике графики. Вы предоставляете данные, указываете ggplot2, как сопоставлять переменные с эстетикой, какие графические примитивы использовать, а он заботится о деталях.

[Моя точка зрения]: это лучшая библиотека визуализации для диаграмм, единственный недостаток в том, что это не интерактивная диаграмма

Изображение с сайта https://www.r-graph-gallery.com/ggplot2-package.html

Example from https://ggplot2.tidyverse.org/:
library(ggplot2)

ggplot(mpg, aes(displ, hwy, colour = class)) + 
  geom_point()

[Ссылка на определение] Highcharts - это современная многоплатформенная библиотека диаграмм на основе SVG. Он упрощает добавление интерактивных диаграмм в веб-проекты и мобильные проекты.

[Моя точка зрения] Его можно использовать с средним - большим набором данных (очень эффективным по сравнению с plotly или dygraph)

Изображение с сайта https://www.highcharts.com/blog/products/highcharts/

Example from https://www.highcharts.com/blog/tutorials/highcharts-for-r-users/:
library(highcharter)
highchart(type = "stock") %>% 
  hc_add_series(asset_returns_xts$SPY, type = "line")

Библиотека графиков R Plotly позволяет создавать интерактивные графики публикационного качества. [Моя точка зрения]: его можно использовать с малым и средним набором данных

Изображение с сайта https://plotly.com/r/

Example from https://plotly.com/r/candlestick-charts/ :
library(plotly) 
library(quantmod)  
getSymbols("AAPL",src='yahoo')
# basic example of ohlc charts df <- data.frame(Date=index(AAPL),coredata(AAPL)) df <- tail(df, 30)  fig <- df %>% plot_ly(x = ~Date, type="candlestick",           open = ~AAPL.Open, close = ~AAPL.Close,           high = ~AAPL.High, low = ~AAPL.Low)  fig <- fig %>% layout(title = "Basic Candlestick Chart")  fig

3. Разработка функций

Идея пакета recipes состоит в том, чтобы определить рецепт или схему, которые можно использовать для последовательного определения кодировок и предварительной обработки данных (то есть «проектирования функций»).

Этот пакет чрезвычайно полезен, поскольку он сокращает массу времени на очистку, преобразование и добавление новой функции в необработанный набор данных (по сравнению с sklearn.preprocessing & sklearn.pipeline in python). Я надеюсь, что команда scikit-learn в ближайшем будущем разработает что-то вроде рецептов, чтобы помочь ускорить задачи разработчика функций в среде Python.

Некоторые примеры из https://recipes.tidymodels.org/reference/index.html:

… (Подробнее см. По ссылке выше)

  • Timetk (для разработки функций временных рядов)

Https://business-science.github.io/timetk/

Timetk - лучший инструмент из области бизнес-науки для разработки функций временных рядов. Это набор инструментов для визуализации, анализа и преобразования данных временных рядов (из business-science.github.io)

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

Другие замечательные пакеты с открытым исходным кодом от Business-science вы можете увидеть по этой ссылке (относительно прогнозирования, временных рядов, функционального инженера, EDA…). Дополнительную информацию можно найти на www.business-science.io (я многому научился на этом веб-сайте, и это помогает мне сэкономить время, чтобы овладеть навыками R, применяемыми в бизнесе)

4. Построение и проверка модели машинного обучения

H2O - это пакет машинного обучения, который я чаще всего использовал в R. Скорость H2O ML очень высока по сравнению с традиционными пакетами машинного обучения R (каретка). Он имеет многоязычный интерфейс (R / Python), хорошо обрабатывает большие данные с распределенной обработкой, сокращает время на выбор и настройку модели с помощью autoML, готов к производственному развертыванию ... Кроме того, H2O также имеет полную экосистему для почти задачи науки о данных, как описано ниже:

Example from this link and link:
# 1. Getting start H2O:
library(h2o)
localH2O = h2o.init(ip = "localhost", port = 54321, startH2O = TRUE)
# 2. Importing Data:
h2o.importFile(), h2o.importFolder(),h2o.importURL()
# 3. Data Manipulation and Description:
iris.h2o <- as.h2o(localH2O, iris.r, key="iris.h2o") # convert dataframe to h2o frame
summary(iris.h2o)
colnames(iris.h2o)
....
# 4. Running Machine learning models:
H2O offers some famous ML models: GBM, GLM, Xgboost, Lightgbm, Randomforest, K-Means, PCA ...
h2o.gbm(y = dependent, x = independent, data = australia.hex,
n.trees = 10, interaction.depth = 3,
   n.minobsinnode = 2, shrinkage = 0.2, distribution= "gaussian")
# 5. Model Explainability (picture below):
# Run AutoML for 1 minute
aml <- h2o.automl(y = y, training_frame = train, max_runtime_secs = 60, seed = 1)
# Explain a single H2O model (e.g. leader model from AutoML)
exm <- h2o.explain(aml@leader, test)
# Explain first row with a single H2O model (e.g. leader model from AutoML)
h2o.explain_row(aml@leader, test, row_index = 1)
# Methods for an AutoML object
h2o.varimp_heatmap()
h2o.model_correlation_heatmap()
h2o.pd_multi_plot()
# Methods for an H2O model
h2o.residual_analysis_plot()
h2o.varimp_plot()
h2o.shap_explain_row_plot()
h2o.shap_summary_plot()
h2o.pd_plot()
h2o.ice_plot()

Главный недостаток H2O ML в том, что сохраненная модель не может быть запущена в другой версии пакета H2O. Это означает, что если я обновлю пакет H2O, я должен снова обучить свою модель, чтобы она была совместима с новым методом среды
All H2O ML (ссылка):

Определение из https://topepo.github.io/caret/:

Пакет caret (сокращение от C lassification A nd RE gression T raining) - это набор функций, которые пытаются для оптимизации процесса создания прогнозных моделей. Пакет содержит инструменты для: разделения данных, предварительной обработки, выбора функций, настройки модели с использованием повторной выборки, оценки важности переменных ... Главный недостаток каретки - это низкая скорость по сравнению с H2O и scikit-learn (некоторые модели каретки были написаны на Язык C для повышения скорости). R - не лучший язык для оптимизации скорости.

Example from this link:
library(caret)
library(mlbench)
data(Sonar)
# Train / test split:
set.seed(107)
inTrain <- createDataPartition(
  y = Sonar$Class,
  ## the outcome data are needed
  p = .75,
  ## The percentage of data in the
  ## training set
  list = FALSE
)
training <- Sonar[ inTrain,]
testing  <- Sonar[-inTrain,]
# Apply caret model with hyperparameter tunning and repeated cv 
ctrl <- trainControl(
  method = "repeatedcv", 
  repeats = 3,
  classProbs = TRUE, 
  summaryFunction = twoClassSummary
)

set.seed(123)
plsFit <- train(
  Class ~ .,
  data = training,
  method = "pls",
  preProc = c("center", "scale"),
  tuneLength = 15,
  trControl = ctrl,
  metric = "ROC"
)
# Visual hyperparameter tuning performance with ggplot
ggplot(plsFit)
# Predict and calculate model performance:
plsClasses <- predict(plsFit, newdata = testing)
str(plsClasses)
#>  Factor w/ 2 levels "M","R": 2 1 1 1 2 2 1 2 2 2 ...
plsProbs <- predict(plsFit, newdata = testing, type = "prob")
confusionMatrix(data = plsClasses, testing$Class)

Определение из https://www.tidymodels.org/: фреймворк tidymodels - это набор пакетов для моделирования и машинного обучения, использующих принципы tidyverse. Tidymodels помогает организовать весь процесс машинного обучения (разделение данных, проектирование функций, создание модели, создание рабочего процесса, настройка…) аккуратными способами. Я думаю, что это проще в использовании, чем конвейер scikit-learn (python), и я предпочитаю tidymodels, чем каретку для настройки модели машинного обучения (личная идея)

Вы можете увидеть некоторые важные пакеты в tidymodels на картинке ниже:
(Изображение с сайта https://jhudatascience.org/tidyversecourse/model.html)

Example from https://www.tidymodels.org/start/case-study/ :
library(tidymodels)
hotels <- 
  read_csv('https://tidymodels.org/start/case-study/hotels.csv') %>%
  mutate_if(is.character, as.factor) 

# DATA SPLITTING & RESAMPLING (package rsample)
set.seed(123)
splits      <- initial_split(hotels, strata = children)

hotel_other <- training(splits)
hotel_test  <- testing(splits)
# BUILD THE MODEL (package parsnip)
lr_mod <- 
  logistic_reg(penalty = tune(), mixture = 1) %>% 
  set_engine("glmnet")
# CREATE THE RECIPE (package recipes)
holidays <- c("AllSouls", "AshWednesday", "ChristmasEve", "Easter", 
              "ChristmasDay", "GoodFriday", "NewYearsDay", "PalmSunday")

lr_recipe <- 
  recipe(children ~ ., data = hotel_other) %>% 
  step_date(arrival_date) %>% 
  step_holiday(arrival_date, holidays = holidays) %>% 
  step_rm(arrival_date) %>% 
  step_dummy(all_nominal(), -all_outcomes()) %>% 
  step_zv(all_predictors()) %>% 
  step_normalize(all_predictors())
# CREATE THE WORKFLOW (package workflows)
lr_workflow <- 
  workflow() %>% 
  add_model(lr_mod) %>% 
  add_recipe(lr_recipe)
# CREATE THE GRID FOR TUNING
lr_reg_grid <- tibble(penalty = 10^seq(-4, -1, length.out = 30))
# TRAIN AND TUNE THE MODEL (package tune)
lr_res <- 
  lr_workflow %>% 
  tune_grid(val_set,
            grid = lr_reg_grid,
            control = control_grid(save_pred = TRUE),
            metrics = metric_set(roc_auc))
lr_best <- 
  lr_res %>% 
  collect_metrics() %>% 
  arrange(penalty) %>% 
  slice(12)

5. Объясните модель

  • Пакет Dalex (пожалуйста, обратитесь к самой лучшей книге об этом замечательном пакете по этой ссылке) https://dalex.drwhy.ai/

Объяснение модели машинного обучения - очень важный шаг, потому что он поможет нам понять, почему наша модель предсказывает результат. С пакетом Dalex машинное обучение больше не является черным ящиком, мы можем выяснить, какие важные функции влияют на наши прогнозы, и дать рекомендации или объяснения нашим заинтересованным сторонам / клиентам.

Согласно пакету Dalex у нас есть два уровня объяснения: уровень экземпляра (один образец) и уровень набора данных (целые образцы). Уровень экземпляра включает в себя диаграммы разбивки, дополнительные пояснения, профили извести, при прочих равных условиях, колебания при прочих равных условиях, графики локальной диагностики. Уровень набора данных включает производительность модели, переменную важность, профили частичной зависимости, локальную зависимость и накопленные локальные профили, графики остаточной диагностики.

Обзор пакета Dalex (ссылка с https://ema.drwhy.ai/introduction.html)

Описание уровня экземпляра (ссылка: https://ema.drwhy.ai/summaryInstanceLevel.html)

Объяснение уровня набора данных (ссылка: https://ema.drwhy.ai/summaryModelLevel.html)

6. Сообщите результаты

Обзор (ссылка): R Markdown предоставляет среду разработки для науки о данных. С помощью R markdown вы можете сохранять и выполнять код, создавать высококачественные отчеты, которыми можно поделиться с аудиторией.

Формат поддержки (ссылка): R Markdown поддерживает десятки статических и динамических форматов вывода, включая HTML, PDF, MS Word, Beamer, слайды HTML5, раздаточные материалы в стиле Tufte, книги. , Дашборды , блестящие приложения , научные статьи , веб-сайты и многое другое.

Вывод на блокнот (ссылка)

Вывод HTML (ссылка):

Слайд-презентация (ссылка):

Дашборды (ссылка):

Сайты (ссылка):

Интерактивные документы (ссылка):

7. Развертывание (веб-приложение)

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

Обзор (ссылка): Shiny - это пакет R, который упрощает создание интерактивных веб-приложений прямо из R. Вы можете размещать автономные приложения на веб-странице или встраивать их в документы R Markdown или создавать информационные панели. Вы также можете расширить свои блестящие приложения с помощью тем CSS, HTML-виджетов и действий JavaScript. Shiny сочетает в себе вычислительную мощность R с интерактивностью современного Интернета.

Мое мнение: с помощью shiny мы можем программировать интерфейсную часть и серверную часть только на языке R, без необходимости html, css, javascript…. требование. Shiny очень полезен специалистам по обработке данных для создания автономных веб-приложений для анализа данных для демонстрации идей или производственных целей (развертывание с помощью AWS, Shiny server, heroku….)

Очень хорошая книга для изучения блестящего: Mastering Shiny Хэдли Уикхэм (ссылка: https://mastering-shiny.org/)

Интернет-приложение Блестящий для инвестиций в недвижимость (ссылка)

Блестящий для сияющего веб-приложения (ссылка)

Интернет-приложение Shiny для трейдинга (ссылка)

многое другое….