Как программист может получить выгоду от использования R? Вот 6 основных пакетов.

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

R работает лучше всего, когда применяется ко всему, что связано с данными, например к статистике, науке о данных и машинному обучению.

Этот язык наиболее широко используется в академических кругах, но многие крупные компании, такие как Google, Facebook, Uber и Airbnb, используют его ежедневно.

Сегодня вы научитесь:

  • Загрузить наборы данных
  • Очистить веб-страницы
  • Создавайте REST API
  • Анализируйте данные и показывайте статистические сводки
  • Визуализировать данные
  • Обучите модель машинного обучения
  • Разрабатывать простые веб-приложения

Загрузить наборы данных

Чтобы выполнить какой-либо анализ, вам сначала нужно загрузить данные. С R вы можете подключиться к любому источнику данных, который только можете вообразить. Простой поиск в Google даст либо готовую библиотеку, либо пример вызовов API для любого типа источника данных.

В качестве простой демонстрации мы увидим, как загружать данные CSV. Вы можете найти набор данных Iris в формате CSV по этой ссылке, поэтому, пожалуйста, загрузите его на свой компьютер. Вот как загрузить его в R:

iris <- read.csv("iris.csv") 
head(iris)

А вот что выводит функция head - первые шесть строк:

Знаете ли вы, что скачивать набор данных не нужно? Вы можете загрузить его из Интернета:

iris <- read.csv("https://gist.githubusercontent.com/netj/8836201/raw/6f9306ad21398ea43cba4f7d537619d0e07d5ae3/iris.csv") 
head(iris)

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

Веб-скрапинг

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

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

library(rvest)

url <- "http://books.toscrape.com/catalogue/category/books/travel_2/index.html"
titles <- read_html(url) %>%
  html_nodes("h3") %>%
  html_nodes("a") %>%
  html_text()

Переменная titles содержит следующие элементы:

Да, это так просто. Просто не переходи никаких границ. Сначала проверьте, есть ли у веб-сайта общедоступный API - если да, то парсить не нужно. Если нет, проверьте их политику.

Создавайте REST API

С практическим машинным обучением возникает проблема развертывания модели. В настоящее время лучший вариант - включить функцию прогнозирования модели в REST API. Чтобы показать, как это сделать эффективно, потребуется как минимум пара статей, поэтому сегодня мы рассмотрим основы.

В R пакет plumber используется для создания REST API. Вот тот, который используется по умолчанию при создании plumber проекта:

library(plumber)

#* @apiTitle Plumber Example API

#* Echo back the input
#* @param msg The message to echo
#* @get /echo
function(msg = "") {
    list(msg = paste0("The message is: '", msg, "'"))
}

#* Plot a histogram
#* @png
#* @get /plot
function() {
    rand <- rnorm(100)
    hist(rand)
}

#* Return the sum of two numbers
#* @param a The first number to add
#* @param b The second number to add
#* @post /sum
function(a, b) {
    as.numeric(a) + as.numeric(b)
}

У API есть три конечных точки:

  1. /echo - возвращает указанное сообщение в ответе
  2. /plot - показывает гистограмму 100 случайных нормально распределенных чисел
  3. /sum - складывает два числа

Пакет plumber поставляется с пользовательским интерфейсом Swagger, поэтому вы можете исследовать и тестировать свой API в веб-браузере. Давайте взглянем:

Статистика и анализ данных

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

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

library(dplyr) 
library(gapminder) 
head(gapminder)

В консоли вы должны увидеть следующее:

Для выполнения любого вида статистического анализа вы можете использовать встроенные функции R, такие как min, max, range, mean, median, quantile, IQR, sd и var. Это замечательно, если вам нужно что-то конкретное, но простой вызов функции summary предоставит вам достаточно информации, скорее всего:

summary(gapminder)

Вот статистическая сводка набора данных Gapminder:

С dplyr вы можете развернуть и сохранить только интересующие данные. Давайте посмотрим, как показать только данные по Польше и как рассчитать общий ВВП:

gapminder %>%
  filter(continent == "Europe", country == "Poland") %>%
  mutate(TotalGDP = pop * gdpPercap)

Соответствующие результаты отображаются в консоли:

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

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

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

library(dplyr)
library(gapminder)
library(scales)
library(ggplot2)

poland <- gapminder %>%
  filter(continent == "Europe", country == "Poland")

ggplot(poland, aes(x = year, y = pop)) +
  geom_line(size = 2, color = "#0099f9") +
  ggtitle("Poland population over time") +
  xlab("Year") +
  ylab("Population") +
  expand_limits(y = c(10^6 * 25, NA)) +
  scale_y_continuous(
    labels = paste0(c(25, 30, 35, 40), "M"),
    breaks = 10^6 * c(25, 30, 35, 40)
  ) +
  theme_bw()

Вот соответствующий результат:

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

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

europe_2007 <- gapminder %>%
  filter(continent == "Europe", year == 2007)

ggplot(europe_2007, aes(x = reorder(country, -lifeExp), y = lifeExp)) +
  geom_bar(stat = "identity", fill = "#0099f9") +
  geom_text(aes(label = lifeExp), color = "white", hjust = 1.3) +
  ggtitle("Average life expectancy in Europe countries in 2007") +
  xlab("Country") +
  ylab("Life expectancy (years)") +
  coord_flip() +
  theme_bw()

Вот как выглядит диаграмма:

И снова первые две строки кода для визуализации будут давать аналогичный результат. Остальное здесь, чтобы оно выглядело лучше.

Обучение модели машинного обучения

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

Вот как загрузить библиотеки, выполнить разделение «поезд / тест», подогнать и визуализировать модель:

library(caTools)
library(rpart)
library(rpart.plot)

set.seed(42)
sample <- sample.split(iris, SplitRatio = 0.75)
iris_train = subset(iris, sample == TRUE)
iris_test = subset(iris, sample == FALSE)

model <- rpart(Species ~., data = iris_train, method = "class")
rpart.plot(model)

Выполнение фрагмента не должно занимать больше секунды или двух. После этого вам будет представлена ​​следующая визуализация:

Рисунок выше рассказывает вам все о процессе принятия решения алгоритмом. Теперь мы можем оценить модель на ранее невидимых данных (набор тестов). Вот как делать прогнозы, печатать матрицу путаницы и точность:

preds <- predict(model, iris_test, type = "class")

confusion_matrix <- table(iris_test$Species, preds)
print(confusion_matrix)

accuracy <- sum(diag(confusion_matrix)) / sum(confusion_matrix)
print(accuracy)

Как видите, мы получили модель с точностью 95% всего с парой строк кода.

Разработка простых веб-приложений

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

Вот сценарий для приложения Shiny:

library(shiny)
library(ggplot2)

ui <- fluidPage(
  sidebarPanel(
    width = 3,
    tags$h4("Select"),
    varSelectInput(
      inputId = "x_select",
      label = "X-Axis",
      data = mtcars
    ),
    varSelectInput(
      inputId = "y_select",
      label = "Y-Axis",
      data = mtcars
    )
  ),
  mainPanel(
    plotOutput(outputId = "scatter")
  )
)

server <- function(input, output) {
  output$scatter <- renderPlot({
    col1 <- sym(input$x_select)
    col2 <- sym(input$y_select)

    ggplot(mtcars, aes(x = !!col1, y = !!col2)) +
      geom_point(size = 6, color = "#0099f9") +
      ggtitle("MTCars Dataset Explorer") +
      theme_bw()
  })
}

shinyApp(ui = ui, server = server)

А вот и соответствующее приложение Shiny:

Эта панель управления настолько проста, насколько это возможно, но это не значит, что вы не можете разрабатывать красивые приложения с помощью Shiny.

Заключение

В заключение - R может делать почти все, что может делать язык программирования общего назначения. Вопрос не в «Может ли R это сделать», а в том, «Подходит ли R для работы?».

Если вы работаете над чем-либо, связанным с данными, то да, R может это сделать и является идеальным кандидатом на эту работу.

Если вы не собираетесь работать с данными каким-либо образом, формой или формой, R может быть не оптимальным инструментом. Конечно, R может делать почти все, но некоторые задачи намного проще выполнять на Python или Java.

Хотите узнать больше о R? Начните здесь:

Первоначально опубликовано на https://appsilon.com 1 декабря 2020 г.