R - язык для статистической обработки данных. Часть 1/3


Я сам изучал R в течение последних нескольких недель. 

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

Мотивация

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

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

Я очень советую именно R по многим причинам. 

Автор фото Cris DiNoto, источник Unsplash

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 в формате кратких описательных разделов.

    Автор фото Jonas Jacobsson, источник Unsplash

    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.

    Вот вам и линки:

    • Загрузить R для Linux
    • Загрузить R для (Mac) OS X
    • Загрузить R для Windows

    3. Где писать на R?

    Есть разные графические интерфейсы. Очень советую R-Studio.

    Скриншот 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 отслеживает переменные:

    Скриншот 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: нечисловой аргумент для бинарного оператора).

    Продолжение следует…


    Перевод статьи Farhad Malik: R — Statistical Programming Language


    Поделиться статьей:


    Вернуться к статьям

    Комментарии

      Ничего не найдено.