Statistical Oracle — 03. Використання мови R






       

Д. Шабанов, М. Кравченко. «Статистичний оракул»: аналіз даних в зоології та екології

Тема 2. Використання програми Statistica: файл-приклад PelophylaxExamples

Тема 3. Використання мови R

Тема 4. Візуалізація даних у Statistica

«Статистичний оракул»-02

«Статистичний оракул»-03

«Статистичний оракул»-04

 

Тема 3. Використання мови R

3.1. R: корисні посилання

Для знайомства з R можна лише рекомендувати досить численні джерела. Серед них — присвячені R блоги, в тому числі r-analytics і statinr. Дуже корисно пройти російськомовний курс по роботі в R. Є зрозумілі лекції російською мовою, що викладені на Youtube; якщо ви вважаєте можливим слухати Санкт-Петербурзських фахівців по R, можемо вам порадити цей курс та ці лекції. Курс московської Вищої школи економіки з економетрики є тут. Загалом, пошук на Youtube може дати багато цікавого. 

Для опанування R можна використати кілька книг. Українською мовою можна рекомендувати наступну книгу:

Майборода Р. Є. Комп'ютерна статистика. К.: ВПЦ "Київський університет", 2019. – 589 с.

Кількість англійських книг, присвячених R, величезна. Серед них, за порадою авторитетів, можна запропонувати дві наступні.

Field A., Miles J. and Field Z. Discovering Statistics using R. SAGE Publications, 2012. – 957 p.

Wickham H., Grolemund G. R for Data Science_Import, Tidy, Transform, Visualize, and Model Data. O’Reilly Media, Inc. 2017. – 292 p. Ця книга доступна також у вигляді гіпертексту у Мережі.

Остання книга переведена на російську, але, на жаль, її електронної версії у авторів цього підручника нема.  Крім її електронної версії, є й інші довідкові матеріали по R у мережі. Серед них:

R Programming Tutorial

Крім того, перелічені далі перші п'ять російськомовних книг є перекладами з англійської, їх первинні версії також доступні у Мережі. В цілому ж серед доступних для авторів цього підручника російськомовних джерел можна рекомендувати наступні:

Кабаков Р.И. R в действии. Анализ и визуализация данных на языке R. М.: ДМК Пресс, 2014. – 588 с.

Лонг Дж.Д., Титор П. R. Книга рецептов. Проверенные рецепты для статистики, анализа и визуализации. М.: ДМК Пресс, 2020. – 510 с.

Мэтлофф Н. Искусство программирования на R. Погружение в большие данные. СПб.: Питер, 2019. – 416 с.

Мастицкий С.Э., Шитиков В.К. Статистический анализ и визуализация данных с помощью R. М.: ДМК Пресс, 2015. – 496 с.

Джеймс Г., Уиттон Д., Хасти Т., Тибширани Р. Введение в статистическое обучение с примерами на языке R. М.: ДМК Пресс, 2017. – 456 с.

Мастицкий С.Э. Визуализация данных с помощью ggplot2. М.: ДМК Пресс, 2017. – 222 с.

Шипунов А.Б., Балдин Е.М., Волкова П.А. и др. Наглядная статистика. Используем R! М.: ДМК Пресс, 2014. – 298 с.

Крім перелічених книг корисними можуть бути наступні матеріали:

Самсонов Т. Визуализация и анализ географических данных на языке R. Онлайн-курс.

Эрве М. Путеводитель по применению статистических методов с использованием R

Введение в R - систему статистического анализа данных (Обзор R-средств для решения избранных проблем)

Схема: Data Visualization with ggplot2

Мастицкий С. Работа с RStudio

Слід нагадати, що автори навели тут посилання на електронні версії кількох книг не задля отримання прибутку, а для підтримки навчання студентів (та власних зусиль по засвоєнню R). Деякі з цих книг запропоновані для розповсюдження їх авторами (як-от, наприклад, підручник Р. Є. Майбороди); деякі використані тут без дозволу їх авторів та видавництв. Автори цього підручника рекомендують розглядати дані посилання як рекламні. 

Для початку роботи з R його слід встановити. Інсталятор R завантажується тут.

Роботу з R полегшує оболонка RStudio. Це також вільний продукт, інсталятор якого можна завантажити тут. Встановлювати RStudio слід обов'язково після R, а не до нього.

3.2. Загальні відомості про R

Історія R почалася з мови S, яку розробила Лаборатория Белла, Bell Labs — американська компанія, яка зіграла ключову роль у розвитку програмного забезпечення. Це була мова, призначена для статистичних розрахунків (це пояснення літери S), яку назвали за аналогією з мовою програмування C. З часом з'явилася й версія S+. І S, і S+ були платними і достатньо дорогими продуктами. З часом на цю мову звернули увагу актівісти проєкту GNU. Проєкт GNU (GNU’s Not UNIX) було почато 1983 року Річардом Столменом. Цей американський програміст звільнився з університету для того, щоб операційна система, подібна на систему Unix (модульну операційну систему, засновану на ідеях, що були розроблені в  Bell Labs), не належала жодній організації. Ініціатива Столмена привела до появи руху розробників вільного програмного забезпечення. У 1991 році Лінус Торвальдс почав роботу над ядром версії операційної системи, що була названа Linux. І Linux, і інші продукти, що створюються під ліцензією GNU — це вільне програмне забезпечення, один з найяскравіших здобутків людської кооперації.

Природно, що з часом два активисти GNU вирішили зробити у межах цього проєкту вільний аналог мови S+. Співробітники статистичного факультету Оклендського університету (в Новій Зеландії) Росс Іхака і Роберт Джентлмен з 1992 року розпочали роботу над вирішенням цієї задачи. У 1993 році з'явилася перша експериментальна реалізація цієї вільної статистичної мови програмування. За аналогією з S, ця мова також отримала назву з однієї літери — першої літери імен її «батьків». З часом співтовариство R надзвичайно розрослося. В цілому, ця мова — масштабний результат альтруїстичної діяльності величезної спільноти інтелектуалів усієї земної кулі. Центром, навколо якого організована ця спільнота, є сайт r-project.org

R — безкоштовний відкритий продукт. Це — мова програмування для вирішення задач в області статистики і моделювання, а також середовище з відкритом програмним кодом для обчислювань та графіки. R поширюється як відкритий програмний код, а також як відкомпільована (переведені з мови програмування на мову комп'ютерних кодів) програма. R є доступним під Linux («спорідненою» операційною системою, іншим результатом проєкту GNU), Windows та MacOC. 

Мова програмування можуть бути компільованими та інтерпретованими. Програми компільованих мов «перекладаються» на мову кодів, що керують процесором, як єдине ціле. Програми інтерпретованих мов перетворюються у коди крок за кроком, команда за командою. Завдяки цьому написану в R програму — скрипт — можна виконувати покроково або частково. Це дуже зручно для налагодження такої програми у випадку, коли щось не заладилося з першої спроби (тобто — у типовому випадку). Мова R є об'єктною, тобто вона містить описи окремих об'єктів, що мають певні атрибути. Об`єкти можуть належати до двох категорій: data objects, що призначені для зберігання даних, та function objects, що виконують певні перетворення інших об'єктів. Типові data objects в R такі:
— вектор (vector);
— матриця (matrix); 
— масив (array);
— часовий ряд (ts);
— таблиця або датафрейм (data frame);
— фактор (factor);
— список (list).

Найпростішим об'єктом в R є вектор (іменований одновимірний об'єкт, що містить дані одного певного типу); навіть число розглядається у цій мові як вектор одиничної довжини. Атрибутами вектора є як значення, які він містить, так і тип даних в ньому. Існують такі прості типи векторів та інших об'єктів, що можуть бути побудованими з векторів:
— логiчний (logical) — елементи “iстинно” (TRUE, T) та “хибно” (FALSE, F);
— числовий (numeric) — дiйсні числа;
— цiлий (integer) — цiлі числа;
— комплексний (complex) — комплексні числа;
— символьний (character) — символьнi рядки. 

Кілька послідовних векторів однакової довжини утворюють матрицю — двомірний об'єкт або масив — багатомірний об'єкт. Дані в векторі, матриці або таблиці повинні мати однаковий тип. На відміну від них датафрейми можуть складатися з векторів, що мають різні типи даних. Наприклад, файл з даними PelophylaxExamples, який ми розглядали у попередній темі, за своєю будовою є прикладом датафрейму. За своєю будовою цей файл описує двовимірну структуру, де різні стовпці (вектори) містять або числові, або символьні дані.

Часові ряди подібні до векторів, але відбивають певну часову послідовність, містять частоту спостережень та дату. Списки побудовані як вектори, але складаються з об'єктів, що можуть містити дані різних типів. Фактори — це аналогі векторів, значення яких можуть братися лише з певного переліку. Значення, які може набувати фактор, називають його рівнями (levels). Наприклад, якщо нас цікавить температура тіла певної кількості хворих, ми можемо задати її у числовій формі (36.7, 35.1, 38.7, 36.6, 42.1, 36.5, 37.8,...), а можемо використати фактор (нормальна, знижена, підвищена, нормальна, крітично підвищена, нормальна, підвищена, ...); з цього прикладу зрозумілі рівні, які може приймати обговорюваний фактор.    

В цілому мова R є досить простою, але мінімальний набор можливостей цієї мови може майже необмежено розширятися. Після інсталяції до складу R входить базовий набір пакетів (модулей). Величезна кількість програмістів та вчених розробляють нові функції, що можуть бути реалізовані в R. Ці функції можуть об'єднуватися в додаткові пакети — бібліотеки (до речі, пакети можуть бути написані як на мові R, так і на інших мовах). Ці пакети можна отримувати зі сховища і додавати до складу мінімальної реалізації R, яка отримується під час інсталяції. Кількість доступних пакетів для R на час написання цього тексту ставить близько 16 тисяч; вони перекривають майже усі статистичні процедури, що розроблені людством. Хоча для початку роботи з R треба подолати досить високий поріг входження, в подальшому ці зусилля сторицею виправдовуються завдяки можливості використовувати різноманітні розширення для R.

Ця мова виявляється корисною і в тих випадках, коли треба спростити виконання рутинних послідовностей операцій. Послідовність дій в R може бути представлена ​​як скрипт (ланцюг команд), і цей скрипт завжди може бути змінений в будь-якому місці. Тому, щоб повторити раніше виконану послідовність операцій в R досить змінити скрипт і запустити його заново.

Скріпт R складається з рядків, кожен з яких є певною командою. У разі, якщо у один рядок треба записати дві послідовні команди, їх розділюють точкою з комою(;). Записані у різні рядки команди ніяк особливо розділяти не треба. Якщо команда не вмістилася у один рядок, її можна продовжувати у наступному — R зрозуміє, що це не нова команда, а продовження старої, адже інтерпретатор цієї мови аналізує синтаксис команди. Як ви можете зрозуміти, незакриті дужки (чи інші порушення синтаксису) можуть призводити до помилок. 

Під час написання скрипту його можна супроводжувати поясненнями. Пояснення розміщуються праворуч від символу #. Цей символ можна помістити після певної команди або на початку рядка.

 

3.3. RStudio — оболонка для R

RStudio — вільне інтегроване середовище розробки, призначене для R. Вікно RStudio складається з декількох панелей, серед яких особливу увагу слід звернути на панель Source (редактор скриптів, або редактор коду), панель Console (консоль) і панель History (історія).

В панелі Source (редактор скриптів, або редактор коду) для виконання поточного рядку коду можна скористатися поєднанням клавіш Ctrl + Enter або кнопкою Run Line(s), що розташована у верхній частині вікна редактора. Код буде виконаний, і курсор переміститься на наступний рядок. Так можна забезпечити послідовне виконання команд.

Для виконання відразу декількох рядків (або частини рядка) треба виділити необхідний фрагмент і натиснути клавіші Ctrl + Enter або Run Line(s). Щоб виконати всі рядки скрипта, слід натиснути Ctrl + Shift + Enter або скористатися кнопкою Run All, що також розташована у верхній частині вікна редактора скриптів. Щоб викликати підказку (або завершити розпочату команду) слід натиснути клавішу Tab. Щоб отримати докладне визначення команди, потрібно навести курсор на її назву (або виділити цю назву) і натиснути F2.

Панель Console (консоль) дозволяє виконувати окремі команди, в ній відбивається результат виконання команд, поданих як з цього вікна, так і з редактора кодів.

Ctrl + 1 — переміщує курсор у вікно редактора скриптів;

Ctrl + 2 — переміщує курсор в консоль;

Ctrl + L — очищає вікно консолі від тексту;

Esc — перериває обчислення.

Панель History (історія) дозволяє переглянути історію команд, виділити деякі з них і відправити в консоль (Send to Console) або в редактор скриптів (Send to Source).

Робота в R найчастіше йде з таблицями (DataFrame). Для початківців в R типовою може бути ситуація, коли вже наявний файл з даними слід перенести в цю середу. Серед інших форматів R приймає таблиці з розширенням *.csv, Comma-Separated Values. Це спеціальний формат файлів, де дані таблиці представлені у вигляді рядків. Окремі комірки таблиці при цьому відділяються певним знаком пунктуації (в стандартному випадку — коми). Прикладом такого файлу може бути PelophylaxExample.csv, посилання на який вже наводилося раніше.

Зберегти таблицю в форматі *.csv можна в Exсel, Calc та багатьох інших програмах через пункт меню «Зберегти як...». При цьому у вкладці «Тип файлу» вибирається пункт CSV (розділювачі - коми). Втім, з тими настройками, з якими найчастіше доводиться мати справу користувачам в Україні, Exсel використовує коми як десяткові роздільники. Для відокремлення комірок таблиці в такому випадку Exсel буде використовувати крапку з комою, а в якості десяткового знака — кому. При виконанні команди read.csv в RStudio (функція читання файлів csv) така таблиця прочитана не буде, тому що read.csv з настройками за замовчуванням вимагає кому, як роздільник стовпчиків, і точку, як десятковий знак.

Є два шляхи розв'язання проблеми, що пов'язана з такою невідповідністю. Перший — замінити (хоча б в стандартному "Блокноті" Windows або, наприклад, в Word`е) в файлі *.csv коми на точки, а потім — крапки з комою на коми. Другий — вказати RStudio після команди read.csv, які знаки використовуються в імпортованому файлі. Другий шлях, ймовірно, простіше; він докладніше описаний трохи нижче.

Робочий файл слід або помістити в робочу директорію RStudio, або розмістити там, де треба, змінивши в RStudio робочу директорію. Щоб вказати робочу директорію в RStudio слід пройти наступним шляхом: Session — Set Working Directory — Choose Directory.

 

Рис. 3.1.1. Зміна робочої директорії в RStudio

З'явиться діалогове вікно, де необхідно вказати відповідну папку в на диску комп'ютера. При цьому потрібну папку відкривати не потрібно! Необхідно тільки виділити її і натиснути кнопку «Вибір папки».

Рис. 3.1.2. Вибір нової робочої директорії в RStudio

Після цього RStudio буде сприймати зазначену директорію (папку) як таку, до якої треба посилатися при прочитанні будь-яких файлів.

Тепер можна відкрити таблицю за допомогою функції read.csv.

read.csv ('Ім'яФайлу.csv') — дана функція відкриє файл з ім'ям «Ім'яФайлу» з кореневої директорії. Те що знаходиться в дужках — аргументи функції. Результатом роботи функції read.csv() буде об'єкт типу data.frame. Назва файлу обов'язково вводити в одинарних лапках. Однак, як вже зазначено, ця команда сприймає кому, як роздільник стовпчиків. Щоб вирішити цю проблему, в самій команді слід вказати додаткові параметри.

read.csv ('Ім'яФайлу.csv', sep = ";", dec = ",").

sep = ";" — задає знак, яким розділені стовпці (в даному випадку крапка з комою);

dec = "," — задає десятковий роздільник (в даному випадку кома).

В результаті виконання цієї функції R прочитає файл, але цього недостатньо для роботи з даними, що містяться в ньому. Справа в тому, що мова R працює з об'єктами; просто відкрити датафрейм і працювати з ним не вийде. Треба зробити так, щоб R розглядав датафрейм як об'єкт. Для цього слід створити об'єкт і привласнити йому датафрейм з відкритого файлу. Для цього треба виконати команду: Ім'яОб'єкту <- read.csv ('Ім'яФайлу.csv', sep = ";", dec = ",")

Наприклад, якщо за допомогою Excel дані з файлу PelophylaxExamples.sta були перетворені в файл PelophylaxExamples.csv, з якого слід зробити об'єкт під назвою frogs, слід ввести наступне:
frogs <- read.csv ('PelophylaxExamples.csv', sep = ";", dec = ",") .

Вказану команду слід ввести у вікно редактора скриптів (ліве верхнє вікно) RStudio, поставити на рядок з цією командою курсор і натиснути Ctrl + Enter. Якщо потрібно виконати тільки частину програми, треба виділити цю частину курсором, а потім натиснути Ctrl + Enter.

Важливим джерелом можливих помилок, які можуть перешкодити роботі в R, є плутанина з різновидами знаків пунктуації. Наприклад, якщо фрагмент введеної функції сформульований так: sep = “;”, R його просто не зрозуміє. Подвійні (як і одинарні) лапки повинні бути прямими, тобто такими, які в найбільш поширеною розкладці ставляться при натисканні клавіші, що відповідає за українську літеру «Є» або російську — «Э» (до речі, ось приклад третього типу лапок). Щоб R виконав команду, треба писати: sep = ";".

Дещо полегшує завдання те, що в тому випадку, якщо RStudio розуміє синтаксис введеного тексту, він підсвічує назви файлів, роздільники і інші елементи набраного користувачем тексту.

 

Рис. 3.1.3. "Підсвічування" елементів тексту в RStudio: назва файлу і символ коми (dec) підсвічені зеленим кольором, а крапка з комою (sep) - не підсвічена

Переконатися, що в об'єкті frogs знаходиться наш файл даних, а також згадати його структуру можна за допомогою функції str().  

Рис. 3.1.4. Внаслідок виконання функції str(frogs) в консолі RStudio показана структура файлу з даними

Зверніть увагу, що у вікні редактора скриптів з'явилася вкладка frogs. Розкривши її, можна подивитися сам датафрейм.