Я сам изучал R в течение последних нескольких недель.
В своей статье я рассказываю о языке программирования R и его главных концепциях, которые пригодятся каждому исследователю данных.
Мотивация
Сфера науки о данных и развивающихся вычислений требуют от нас всё время адаптироваться и вырабатывать новые навыки. Причина в том, что эта область меняется очень быстро. А ещё в ней в целом высокая планка требований. В профессиональной жизни каждого исследователя данных приходит время, когда нужно бы знать больше, чем один язык программирования. Так я и выбрал R.
В моих материалах вы узнаете обо всех ключевых областях и разберётесь в базовых понятиях. Предполагается, что вы, как читатели, вообще не знакомы с R или совсем немного в нем разбираетесь.
Я очень советую именно R по многим причинам.
R становился всё известнее и известнее, пока не стал одним из самых популярных языков программирования. Его создали статистики (специалисты по статистике) для статистиков. Он хорошо сочетается с другими языками программирования, например с C++, Java, SQL. Более того, его воспринимают как язык, который отлично подходит для работы со статистикой. А в результате большое количество финансовых организаций и крупных вычислительных компаний применяют R в своих исследованиях и разработках.
Python — язык для решения задач общего характера, а R — язык программирования для аналитики.
Задачи и содержание
Этот текст объяснит следующие ключевые области языка R:
- Что такое R?
- Как установить R?
- Где писать код на R?
- Что такое R-скрипт и R-пакет?
- Какие типы данных есть в R?
- Как декларировать переменные и их область действия в R?
- Как писать комментарии?
- Что такое векторы?
- Что такое матрица?
- Что собой представляют списки?
- Что такое датафреймы?
- Различные логические операции в R.
- Функции в R.
- Циклы в R.
- Считывание и запись внешних данных в R.
- Как производить статистические вычисления в R.
- Построение графиков и диаграмм в R.
- Объектно-ориентированное программирование в R.
- Знаменитые библиотеки R.
- Как установить внешние библиотеки R.
Приступим же!…
Я буду объяснять язык программирования, начиная с основ, в таком стиле, чтобы вам было легче разобраться. Стоит сказать, что ключ к прогрессу в разработке — это постоянная практика. Чем больше, чем лучше.
Этот материал должен стать целостной базой для вас — читателей.
1. Что же такое R?
- R — это бесплатный язык программирования с лицензией GNU. В сущности R — это статистическая среда.
- R в основном используется для статистических вычислений. Он имеет набор алгоритмов, которые углубленно применяются в области машинного обучения. А конкретнее — в анализе временных рядов, классификации, кластеризации, линейном моделировании и т.д.
- Также R — это среда, в которой есть набор программных пакетов, с которыми можно производить вычисления для построения диаграмм и для манипуляций с данными.
- R значительно применяется в проектах статистических исследований.
- R очень похож на другой язык программирования — S.
- R компилируется и запускается на UNIX, Windows, MacOS, FreeBSD и Linux.
- В R есть большое количество структур данных, операторов и параметров. Он включает многое: от массивов до матриц, от циклов до рекурсии вместе с интеграцией с другими ЯП, например с C, C++ и Fortran.
- C можно использовать для обновления объектов в R напрямую.
- R можно дополнять новыми пакетами.
- R — интерпретатор.
- Авторы R вдохновлялись S+, так что, если вы знакомы с S, изучение R будет для вас простым следующим шагом.
Преимущества R:
Вдобавок к плюсам, о которых я написал выше:
- R просто выучить.
- В среде есть очень много бесплатных пакетов с открытым исходным кодом для статистики, аналитики и графики.
- Богатство различных научных трудов вместе с их применением в R в вашем распоряжении.
- Лучшие мировые университеты учат своих студентов R, следовательно, он стал принятым стандартом, продолжит расти и развиваться.
- Широкие возможности интеграции с другими языками.
- Огромная поддержка в сообществе специалистов.
Ограничения R:
Также есть и некоторые ограничения:
- R не такой быстрый, как C++. К тому же, есть проблемы с его защищённостью и управлением памятью.
- R имеет много пространств имен. Иногда такое впечатление, что их даже слишком много. Тем не менее ситуация улучшается.
- Так как R — это статистический язык, то он не такой интуитивный, как Python, и в нём не так просто работать с ООП, как в Python.
Давайте уже начнём его изучать
А теперь я представлю вам язык R в формате кратких описательных разделов.
2. Как установить R?
Можете установить R на эти платформы:
- Ubunto
- Mac
- Windows
- Fedora
- Debian
- SLES
- OpenSUSE
Первый шаг — загрузите R:
- Откройте интернет-браузер.
- Пройдите по ссылке www.r-project.org.
- Последняя версия R на момент написания оригинала этой статьи была 3.6.3 (Holding the Windsock). Выпущена 2020–02–29.
Вот вам и линки:
3. Где писать на R?
Есть разные графические интерфейсы. Очень советую R-Studio.
Загрузите десктопную версию RStudio:
- Скачайте RStudio по ссылке https://rstudio.com/products/rstudio/download/
- Лицензия RStudio Desktop бесплатная.
- За подробностями сюда: https://rstudio.com/products/rstudio/#rstudio-desktop
- RStudio требует R 3.0.1+.
Если вы работаете на Windows, в процессе установки R Studio по умолчанию попадет сюда:
C:\Program Files\RStudio
4. Что такое пакет R и скрипт R?
Это два ключевых компонента в языке. В этом разделе поверхностно расскажу о концепциях.
Пакет R
Так как R — это ЯП с открытым кодом, важно понимать, что тут подразумевается под пакетом. Пакет в сущности группирует и упорядочивает код, а также другие функции. Пакет — это библиотека, в которой содержится большое количество файлов.
Специалисты по данным могут писать и делиться своим кодом с другими. Будь это их собственный код с нуля или расширение пакетов других авторов. Пакеты позволяют специалистам по данным переиспользовать код и распространять его среди остальных.
Пакеты созданы, чтобы контейнировать функции и наборы данных.
Специалист по данным может создать пакет, чтобы упорядочить код, документацию, тесты, наборы данных и так далее, и потом этими пакетами можно делиться с другими людьми.
В интернете в открытом доступе есть десятки тысяч пакетов R. Эти пакеты собраны в центральном репозитории. Вообще есть разные репозитории. Это и CRAN, и Bioconductor, и любимый Github.
Одно хранилище заслуживает отдельного упоминания. Это CRAN. Это сеть серверов, которые хранят большое количество версий кода и документации для R.
Пакет содержит файл с описанием, где нужно указать дату, зависимости, автора и версию пакета, а также другие данные. Файл-описание помогает пользователям получить важную информацию о пакете.
Чтобы загрузить пакет, напечатайте:
library(имя пакета)
Чтобы пользоваться функциональностью пакета, напишите в его имени::название функции.
Например, если мы хотим применить функцию “AdBCDOne” из пакета “carat”, можем сделать следующее:
library(carat)
carat::AdBCDOne()
R Script
Скрипт R — это место, где специалист по данным может писать статистический код. Это текстовый файл с расширением .R, например мы может назвать скрипт tutorial.R.
Можем создать много скриптов в пакете.
В качестве примера, если вы создали два скрипта R:
- blog.R (для блога)
- publication.R (для публикации)
И если вы хотите вызвать функции publication.R в blog.R, то вам стоит пользоваться командой source(“target R script”). Она импортирует publication.R в blog.R:
source("publication.R")
Создаём пакет скрипта
Процесс относительно простой. В сущности вот, что нужно сделать:
- Создайте файл описания.
- Создайте R.scripts и добавьте любые датасеты, документацию, тесты, которые должны быть в этом пакете.
- Напишите свои функции в скриптах R.
- Можем применить devtools и roxygen2, чтобы создать пакеты R с помощью такой команды:
create_package("имя пакета")
5. Какие бывают типы данных в R ?
Очень важно разобраться в разных типах данных и структурах в R. Так вы сможете пользоваться языком эффективно. В этом разделе я опишу концепции.
Типы данных
Вот базовые типы данных в R:
- символ (character): может быть таким “abc” или таким “a”
- целочисленный (integer): например 5L
- числовой (numeric): например 10.5
- логический (logical): TRUE или FALSE
- комплексный (complex): например 5+4i
Ещё можем пользоваться командой typeof(variable), чтобы определить тип переменной.
Чтобы найти метаданные (атрибуты типа), используйте команду attributes(variable).
Структуры данных
В R достаточно много структур данных. Привожу самые важные:
- Вектор (vector): самая важная структура, которая в сущности является набором элементов.
- Матрица (matrix): похожая на таблицу структура со строками и колонками
- Датафрейм (data frame): табличная структура для статистических операций
- Списки (lists): набор, в котором может быть комбинация типов данных.
- Факторы (factors): для представления категориальных данных.
Я расскажу обо всех этих типах и структурах данных, так что начинаем строить фундамент.
6. Как объявлять переменные?
Мы можем создать переменную и присвоить ей значение. Переменная может иметь любой тип данных и структуру данных, которые я привел выше. Есть, конечно, и другие структуры данных. Дополнительно разработчик может создавать и свои собственные пользовательские классы.
Переменная нужна, чтобы сохранять значение, которое может меняться в вашем коде.
Чтобы понять, важно запомнить, что такое окружение в R. В сущности окружение — это место, где хранятся переменные. Это набор пар, где первый элемент — это символ (переменная), а второй — её значение.
Окружение имеет иерархическую структуру (похожую на дерево). Следовательно, окружение может иметь родителя и множество дочерних ответвлений. Корневое окружение — это окружение без родителя.
Надо декларировать переменную и присвоить ей значение при помощи следующего:
x <- "my variable"
print(x)
После этого значение “my variable” будет присвоено переменной x. Функция print() выведет значение x, которое равно “my variable”.
Каждый раз, когда мы объявляем переменную и вызываем её, она ищется в текущем окружении, а также рекурсивно ищется в родительских окружениях до тех пор, пока значение не будет найдено.
Чтобы создать набор целых чисел, мы можем сделать следующее:
coll <- 1:5
print(coll)
1 — первое значение, а 5 — последнее значение из набора.
В результате выведутся числа от 1 до 5.
Помните, что IDE R-Studio отслеживает переменные:
Функцию ls()
можно писать, чтобы показать переменные и функции в текущем окружении.
7. Как писать комментарии?
Комментарии нужны в коде, чтобы помогать понимать его тем, кто будет с ним разбираться. Читателям, другим специалистам по данным и самому себе. Бывает и такое.
Помните, что нужно всегда убеждаться в том, что комментарии не загрязняют ваши скрипты.
Можем добавить комментарий одной строкой:
#комментарий на одну строку
Можем добавить комментарий в несколько строк при помощи двойных кавычек:
"комментарий на
несколько строк
"
Памятка: в R-Studio выделите код, который вы собираетесь закомментировать и нажмите сочетание клавиш Ctrl+Shift+C.
Так вы автоматически сделаете нужную часть программы комментарием.
8. Что такое векторы?
Вектор считается одной из самых важных структур данных в R. В сущности вектор представляет собой набор элементов, где у всех элементов должен быть одинаковый тип данных: например, только логический (истинно/ложно — TRUE/FALSE), числовой, знаковый.
Также можем создать пустой вектор:
x <- vector()
По умолчанию тип вектора логический. По команде ниже выведется слово “logical”, так как это и есть тип данных вектора:
typeof(x)
Чтобы создать вектор со своими элементами, пишите функцию конкатенации (объединения строк):
x <- c("Farhad", "Malik", "FinTechExplained")
print(x)
Результат выполнения этого кода будет таким:
[1] “Farhad”
[2] “Malik”
[3] “FinTechExplained”
Если мы захотим найти длину вектора, можем воспользоваться функцией length():
length(x)
Результат вывода строки выше будет 3. Потому что в заданном векторе x 3 элемента. Чтобы добавить элементы в вектор, можем комбинировать элемент с вектором.
Например, чтобы добавить слово “world” к началу вектора с одним элементом слова “hello”, нужно написать так:
x <- c("hello")
x <- c("world", x)
print(x)
В результате напечатается “world” “hello”.
Если мы смешиваем типы элементов, то R в свою очередь будет приспосабливать тип вектора в ответ на это. Тип вектора (режим) будет становиться таким, каким должен быть по своему расчёту, чтобы подходить этому вектору:
another_vec <- c("test", TRUE)
print(typeof(another_vec))
И хотя второй элемент имеет логическое значение, тип будет выведен как “character” (символ).
Над векторами можно производить операции.
Для примера, вот вам умножение скаляра на вектор:
x <- c(1,2,3)
y <- x*2
print(y)
В результате напечатается 2,4,6.
Также можем сложить два вектора:
x <- c(1,2,3)
y <- c(4,5,6)
z <- x+y
print(z)
Результат будет: 5 7 9
Если векторы — это знаки и мы хотим сложить их вместе, то:
x <- c("F","A","C")
y <- c("G","E","D")
z <- x+y
print(z)
Это выведет:
Error in x + y : non-numeric argument to binary operator (ошибка в выражении x + y: нечисловой аргумент для бинарного оператора).
Продолжение следует…
Читайте также:
- Анализ текста средствами языка программирования R
- Статистика - это грамматика науки о данных. Часть 1
- 5 базовых статистических концептов, которые должен знать каждый специалист по обработке данных
Перевод статьи Farhad Malik: R — Statistical Programming Language