Гибадуллина Д.А  Гибадуллина Дарья Анатольевна/ Gibadullina Daria Anatolievna - студент второго курса бакалавриат Уральского филиала Финансового университета направления бизнес-информатика 

Аннотация: Язык программирования R имеет широкое применение в области статистических вычислений и анализа данных В данной статье мы рассмотрим основные возможности языка R, его синтаксис и особенности, а также примеры использования для решения задач статистического анализа данных. Также мы рассмотрим некоторые популярные пакеты и библиотеки, которые доступны для работы с данными в R. Данная статья поможет читателю ознакомиться с основами языка R и его применением в статистических вычислениях. 

Annotation: The R programming language has wide application in the field of statistical computing and data analysis. In this article, we will consider the main features of the R language, its syntax and features, as well as examples of use for solving problems of statistical data analysis. We will also look at some popular packages and libraries that are available for working with data in R. This article will help the reader to familiarize himself with the basics of the R language and its application in statistical computing. 

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

Keywords: programming language, R programming language, R syntax, R libraries, data analysis, statistical analysis, data processing in R. 

R — это язык программирования, специально предназначенный для анализа данных. Он был разработан на факультете статистики Оклендского университета как бесплатная альтернатива языку программирования под названием S. Начав свое развитие под влиянием последнего, R стал уникальным благодаря своему синтаксису, функциям и принципам работы. Его применение ограничено областью статистических вычислений, анализа данных и машинного обучения, так как именно для этих задач он был разработан. Однако R не только язык программирования, а целая экосистема, предоставляющая встроенные методы статистического анализа и инструменты для визуализации данных. 

R обладает примечательными характеристиками, которые делают его привлекательным для использования. Он может работать с различными парадигмами программирования, но лучше всего проявляет себя в объектно-ориентированном программировании. В R функции и таблицы представляют собой объекты, которые могут взаимодействовать друг с другом. Благодаря этому, создание сложных распределённых программ становится возможным, а повторное использование функций и объектов становится удобным и эффективным. 
 
Язык R интерпретируемый, что означает, что программа, написанная на нём, готова к исполнению сразу же, без необходимости компиляции в исполняемый файл. Также, в процессе написания кода можно проверять его работу по частям, что гарантирует более удобную отладку. 
 
Синтаксис R прост и понятен. В его основе отсутствуют сложные конструкции и запутанные функции. Язык имеет всего четыре типа данных: символьные, числовые, логические и комплексные. Однако, эти простые типы и функции языка R могут быть организованы в сложные структуры и конструкции данных. Подобно строительным блокам LEGO, которые сами по себе просты, но при совместном использовании могут составить как игрушечную машинку, так и боевой вертолёт. 
 
Язык R обладает удобными интерактивными инструментами. Например, есть среда разработки RStudio, которая обеспечивает подсветку синтаксиса, навигацию по тексту программы, сортировку таблиц и отображение графиков в отдельном окне. Кроме того, существует приложение-блокнот Jupyter Notebook, позволяющее создавать и обмениваться программами на R прямо в веб-браузере. Не следует забывать и о дистрибутиве Anaconda, который включает в себя широкий набор популярных библиотек, упрощая работу с языком R.

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

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

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

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

Третья возможность - объединение данных из разных таблиц. R позволяет объединять таблицы разных форматов и работать с ними как с единым файлом. Это удобно, когда вам нужно объединить данные из разных источников для проведения комплексного анализа. 

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

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

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

Язык R предоставляет множество возможностей для обработки данных и проведения анализа. Он позволяет очищать и обрабатывать данные, проводить статистические тесты, объединять таблицы, создавать интерактивные графики, анализировать регрессионные модели и выполнять другие математические операции. Это мощный инструмент для работы с данными и исследования их характеристик. 

В R существуют два отличных пакета для работы с данными - dplyr и data.table. Каждый из них имеет свои сильные стороны. Dplyr более элегантен и напоминает естественный язык, в то время как data.table является более лаконичным и позволяет выполнять множество операций в одной строке. Кроме того, в некоторых случаях data.table демонстрирует более высокую скорость выполнения, что может быть решающим фактором при наличии ограничений на память или производительность. 

Dplyr предоставляет пять основных функций для работы с данными. Функция select используется для выбора одного или нескольких столбцов. Функция filter позволяет выбрать строки на основе заданных критериев. Функция arrange служит для сортировки данных по одному или нескольким столбцам в порядке возрастания или убывания. Функция mutate используется для добавления новых столбцов к данным. А функция summarise позволяет суммировать часть данных. 

Data.table использует компактный формат dt[i, j, by], который можно интерпретировать следующим образом: возьмите таблицу dt, выберите строки, используя условие i, и произведите вычисления, указанные в операторе j, сгруппировав данные по условию by. 

Теперь перейдем к ggplot2. Можно считать, что у библиотеки ggplot2 есть своя философия, поняв которую, строить графики гораздо легче. 

Во-первых, графики ggplot многослойные, то есть строятся они поэтапно, по слоям. Сначала указывается датафрейм, с которым мы работаем, и интересующие нас показатели (первый слой), затем указывается тип графика (второй слой), затем настройки для подписей, легенды и прочее (остальные слои). Все слои добавляются через +. 

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

Пример анализа: 

На примере этих (и других) данных будет рассмотрены возможности анализа языка: 

X =   "181.1 167.9 170.5 194.1 171.6 168.6 180.7 184.9 165.3 165.5 171.1 174.4 175.2 180.3 181.2 168.9 176.2 167.4 165.9 177.2 180.8 173.9 163.5 175.0 171.0 177.6 173.6 185.8 184.0 178.7 174.3 170.3 178.6 172.3 162.3 166.3 160.4 163.0 174.7 183.1" 
 
Y =  "163.3 172.6 154.3 159.8 174.0 159.0 180.1 168.9 177.0 166.4 162.7 169.3 170.3 161.8 171.9 177.3 166.8 175.5 175.1 174.8 161.0 169.8 177.9 174.3 168.7 176.6 156.3 179.3 178.3 168.7 178.5 151.0 164.0 159.5 180.9 178.7 166.0 169.5 167.0 150.4"
 

Данные представлены не столбцом, а строкой. Поэтому для начала разобьём её на подстроки, а потом преобразуем в вещественные числа: 

X = as.double(strsplit(X,' ')[[1]]) 

Работа с файловой системой: 

list.files() # список файлов 
getwd()      # полное имя текущего каталога 
setwd(dir)   # изменить каталог 

Загрузка данных 

Текстовые файлы. Загрузить текстовый файл как список строк 

x <- scan("data.txt", what="", sep="\n") 

CSV файлы: 

D = read.delim('stud­lab.csv',';', header=TRUE) 

';' - разделитель полей; 
header - есть ли заголовок. 
Пример файла 

N;X;Y 
0;15.04;12.0 
1;16.24;14.18 
2;7.96;12.12 
3;17.4;7.98 

XLS файлы. Для загрузки из xls файла потребуется пакет gdata (см. установку пакетов) [so] 

require(gdata) # подключим пакет 
read.xls("file.xls") 

Работа с данными 

Сводка по данным 

summary(D) 

 N               X               Y        
 Min.   : 0.00   Min.   : 6.26   Min.   : 3.74  
 1st Qu.:24.75   1st Qu.:10.54   1st Qu.: 9.33  
 Median :49.50   Median :12.27   Median :11.14  
 Mean   :49.50   Mean   :12.34   Mean   :10.91  
 3rd Qu.:74.25   3rd Qu.:14.12   3rd Qu.:12.55  
 Max.   :99.00   Max.   :20.65   Max.   :17.94  

Работа с DataFrame 

names(D) - имена полей 
nrow(D), ncol(D) - число строк, столбцов 

Доступ к полям. Имя поля (столбца) записывается после знака $: 

D$X 

Доступ к даным можно получить используя индексацию: строка, столбец.  
D[42,] - 42 строчка таблицы 
D[,2] - данные из второго столбца 
 
Указывать набор конкретных строк\столбцов можно вектором: 

D[ c(1,3,7, 13), ] 

исключить эти столбцы: 

D[ , - c(1,2) ] 

Вместо индексов столбцов можно указывать их имена (тут унарный минус не работает): 

mtcars[ , c('wt', 'am')] 

Создание нового поля (заполненного нулями) 

D$Z = 0   

Графики 

Диаграмма рассеивания 

plot(D$X,D$X) 

Дополнительные параметры функции plot: 
xlab = "Ось X", ylab = "Ось Y" - подписи к осям; 
col = "red" - цвет маркеров; 
type = "b" - тип графика (p - точки (по умолчанию), l - линии, b - линии и точки, и т.п. см. справку по plot); 
main = "Заголовок" - подпись сверху; 
sub = "Подзаголовок" - подпись снизу. 

Добавим координатную сетку: 
grid() 

Дополнительные параметры функции: nx=10,ny=10 - число делений сетки. 

ggplot2 

Более эстетичные графики можно построить с помощью библиотеки ggplot2 

library(ggplot2) 

ggplot(D, aes(x=D$X, y=D$Y))+geom_point() + xlab('X')+ylab('Y') 

aes(x=D$X, y=D$Y) - задаёт соответствие осей данным 
geom_point() - определяет способ отображения данных 
Сохранить график в файл 

png('my-boxplot.png') 
... Построение графика ... 
dev.off() 

Гистограмма 

Диаграмма рассеивания 

Диаграмма размаха 

boxplot(x,y) 

Дополнительно стоит подписать каждую диаграмму, пусть это будут лаконичные имена случайных величин для которых они построены: X и Y.  

boxplot(x,y, names = c('X', 'Y') ) 

Дополнительные элементы графиков, такие как заголовок, подписи к осям и т.п. выполняются также как и для других графиков. 

Проверка гипотез  

Для правильного понимания нижеследующих процедур необходимо обладать знаниями о процедурах проверки статистических гипотез и понимать, что такое p-value, а также быть ознакомленным с уровнем значимости и прочими связанными с ним понятиями. При выполнении наших дальнейших проверок мы будем использовать уровень значимости α=0.05, так как он является наиболее распространенным значением. Однако следует отметить, что выбор этого значения требует особого внимания и может являться объектом отдельного исследования. Обратите внимание, что для каждой проверки необходимо сформулировать нулевую и альтернативные гипотезы. Часто для краткости приводится только альтернативная гипотеза, например, что математические ожидания не равны. В таком случае оставшаяся гипотеза, которая не была упомянута, противоположна первой: математические ожидания равны. 

Также следует упомянуть необходимость проверки статистического распределения на нормальность. Требование "нормальности" часто возникает при проверке других статистических гипотез, например, на равенство средних значений или дисперсий. Кроме того, знание о распределении может быть интересно само по себе или может потребоваться для получения гладкой кривой, подобранной по параметрам статистических данных. В данном случае мы будем использовать одну из наиболее популярных проверок - критерий Шапиро-Уилка. 

Нулевая гипотеза: случайная величина распределена нормально. 

Альтернативная гипотеза: случайная величина не распределена нормально. 

shapiro.test(x) 

Результат: 

    Shapiro-Wilk normality test  
data:  x 
W = 0.98343, p-value = 0.2434 

 Здесь мы видим два числа, W - значение критерия и p-value. Они могут использоваться независимо при проверке гипотез.  

В этом примере, p-value > α, значит принимаем нулевую гипотезу: с.в. распределена нормально. 

Гипотеза о равенстве математических ожиданий 

Предположим, что по данным выборки, где известны средние требуется установить, равны ли математические ожидания в генеральных совокупностях, откуда были сделаны эти выборки. Непосредственным сравнение выборочных средних этого сделать нельзя, потому, что эти средние, например, могут отличатся. Так как сравниваются выборки, то вполне вероятно, что различия в средних получились совершенно случайно. В большинстве остальных выборок эти средние равны. Поэтому возникает вопрос: насколько можно доверять различию выборочных средних средних? 

Лучше всего для этого построить доверительные интервалы для генеральных математических ожиданий. 

Если изучаются различия в нормально распределенных выборках, где медиана и математическое ожидание равные, то эти различия можно оценить построив диаграмму размаха: 

boxplot(x,y, names = c('X', 'Y') ) 

Например для выборок A и B (пусть они содержат по 100 элементов) проверку средних производить не имеет смысла. Большинство, около 3/4, значений каждой выборки расположены в разных областях числовой прямой. Выборки различны, а значит и средние значения различны. 

Стоит помнить, что на диаграмме приводятся медианы (жирная линия) а не средние. Поэтому вычислим последние отдельно: 
> mean(X); mean(Y) 

[1] 173.9 
[1] 168.9
 

Далее следует определится с выбором критерия (pdf), который будет применятся для сравнения. Для этого может понадобится проверить выборки на соответствие требованиям критерия. 

Нулевая гипотеза H0: M(X) = M(Y), математические ожидания генеральных совокупностей равны. 

> t.test(X,Y) 

    Welch Two Sample t-test 
data:  X and Y 
t = 2.8408, df = 77.187, p-value = 0.005753 
alternative hypothesis: true difference in means is not equal to 0 
95 percent confidence interval: 
 1.494589 8.500411 
sample estimates: 
mean of x mean of y 
 173.9300  168.9325
  

p-value < α, значит отклоняем нулевую гипотезу. Математические ожидания генеральных совокупностей не равны. 

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

Литература 

  1. А.Б. Шипунов, Е.М. Балдин, П.А. Волкова и др.: Наглядная статистика. Используем R! (ISBN: 978-5-97060-094-8) 

  2. Матиас Коль. Введение в статистический анализ данных с помощью R. bookboon.com, Лондон, 2015. ISBN 978-87-403-1123-5. 

  3. Торстен Хотхорн и Брайан С. Эверитт. Справочник по статистическому анализу с использованием R. Chapman & Hall/CRC Press, Бока-Ратон, Флорида, США, 3-е издание, 2014 г. ISBN 978-1-4822-0458-2. 

  4. Рулевская, Л. П. Цифровизация смыслового чтения как эффективный инструмент формирования ранней профориентации / Л. П. Рулевская // Социализация подрастающего поколения в условиях реальной и цифровой среды : Сборник научных статей Международной научно-практической конференции, Курск, 20–21 апреля 2023 года / Отв. редактор С.И. Беленцов. – Курск: Курский государственный университет, 2023. – С. 195-197. 

Комментарии (12)


  1. Tim_23
    17.12.2023 10:44

    Это задание сделать реферат на тему ? )

    Чем плох excel для таких же задач ?


    1. red_dragon
      17.12.2023 10:44

      За еxcel заплатить надо, как минимум. Но возник ответный вопрос. А чем хорош еxcel для таких задач?


      1. Tim_23
        17.12.2023 10:44

        Ну первое что приходит в голову :

        1. Офис есть практически везде (как лицензионный , так и нет)

        2. Excel и его диаграммы хорошо интегрированы в Ворд и PowerPoint, что позволяет редактировать стиль диаграмм не запуская сам Эксель

        3. В Эксель есть встроенный язык программирования(ничего устанавливать сверх не надо), который также позволяет писать свои алгоритмы и генерировать отчёты по своему вкусу , также интегрируя их в в Ворд к примеру

        4. Так то я не против более профессиональных и узкоспециализированных пакетов , иногда они удобнее для спецов (например для 2д плотов программа Surfer на голову выше чем убогие диаграммы excel ) . Но в целом удобнее пользоваться тем , что чаще под рукой и есть практически у всех(без дополнительных танцев с бубном , облачных хранилищ и прочих "сложностей") .


        1. red_dragon
          17.12.2023 10:44

          1. В наше время, вообще не факт, что Excel (или его аналоги) есть практически везде. Всё больше людей уходят в облако, которое, Вы считаете чем-то сложным. Однако, пользователи находят его удобным.

          2. Спорное преимущество. Далеко не всем надо интегрировать диаграммы в Word и PowerPoint. Особенно, учитывая сказанное мной в пункте 1.

          3. R это и есть специализированный язык программирования. Ничего поверх устанавливать не надо. Установка эта требует бубна не более, чем установка офиса. Ну и как уже говорилось, осуществляется без денежных вложений.

          4. Всегда проще и удобнее пользоваться специализированным инструментом. Молотком для забивания гвоздей и отвёрткой для работы с шурупами. Но можно и мультитул применять, да.


    1. Archi_Pro
      17.12.2023 10:44

      Привествую Вас дорогой хабровчанин
      чем R лучше чем эксель:

      1. Возможность загрузить более 1 млн строк

      2. Возможность работать с данными в разных форматах, csv, parquet, sas, statistica

      3. Возможность подключиться к хранилищу данных SQL, Spark

      4. Возможность использовать большое количество статистических тестов и подходов(bootstrap, Монте Карло)

      5. Построение моделей xboost, svm, random forest, нейронные сети (линейные теоретически можно и в эксельке)

      6. Визуализация данных всякие специализированные графики violin plot, confusion matrix и другие.

      7. Расширение функционала при помощи R packages, пакеты есть почти для всего, что только можно представить себе из мира исследования данных, статистики и прчее.

      8. Можно парсить интернет можно писать ETL ELT

      9. Можно сделать дашборд


      1. Tim_23
        17.12.2023 10:44

        Автономная работа без интернета допускается? )

        Большие файлы да, для эксель проблема, согласен. В свое время решал это матлабом (файлики были по 7 ГБ). Но он дорогой.

        Нейросети тоже интересны.

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


        1. Archi_Pro
          17.12.2023 10:44

          можно работать абсолютно автономно, интернет нужен только что бы скачать какую то библиотеку.
          Есть замечательная IDE для работы с R, Rstudio
          Нейросети есть, но современная движуха идет все таки на python
          На счет всего отального что бы писать самому, ну тут все упирается в целесообразность зачем писать самому какую нить корреляцию Спирмена если для этого уже есть готовый пакет, еще и написанный на плюсах под капотом.
          Бывают даже такие случаи, когда нагуглил какй то экзотический статистический метод в чьей то диссертации и этот человек реализовал свой алгоритм в пакете для R.
          P.S. Если вам нужно загружать большие файлы без необходимости применять всякие статистические штуки, то я бы посмотрел в сторону языка python, jupyter-notebook (IDE), и библиотек pandas/polaris


        1. Archi_Pro
          17.12.2023 10:44

          Но библиотеку можно поставить и с флэшки, если компьютер стоит в месте где нет интернета


    1. Archi_Pro
      17.12.2023 10:44

      Забыл добавить, что есть возможность оформить свои исследования в markdown, pdf, powerpoint, html и даже сделать доступ к отчету через интернет


  1. GospodinKolhoznik
    17.12.2023 10:44

    Уважаемый (на самом деле нет) преподаватель Уральского филиала Финансового университета. А вы сами никак не можете проверить знания и навыки студентов, без того, чтобы заставлять их писать всякое на Хабре? Если можете, то не делайте так больше. Ну а если не можете... учитесь что ли.


    1. Archi_Pro
      17.12.2023 10:44

      1.Подскажите в чем Вы видите минусы того что студенты ( будущие аналитики и исследователи) пишут на хабр?
      2. Куда им писать свои первые статьи что бы набраться опыта?


  1. Refridgerator
    17.12.2023 10:44

    Литература: 4...Социализация подрастающего поколения...

    Звучит как безусловно необходимое чтение для освоения R.