Читать книгу Основы статистической обработки педагогической информации - Денис Владимирович Соломатин - Страница 6
Глава 1. Первое знакомство
§3. Организация рабочего процесса
ОглавлениеТеперь у читателя есть некоторый опыт выполнения кода R, без погружения в детали, но достаточный, чтобы разобраться в основах, иначе эта книга уже была бы закрыта. Разочарование естественно, когда начинаете программировать на R, потому что этот язык требователен к пунктуации, и даже один неуместно поставленный символ может заставить крепко попотеть в поисках допущенной ошибки. Но пока разочарование не зашло слишком далеко, можно утешиться тем, что описанное неудобство типично и главное – временно, такое происходит со всеми, а чтобы преодолеть его, нужно продолжать программировать на R. Прежде чем мы пойдем дальше, убедимся в наличии прочных навыков выполнения кода R, и узнаем о некоторых наиболее полезных функциях редактора RStudio. Рассмотрим некоторые базовые соглашения языка, которые до сих были пропущены в интересах скорейшего погружения в тематику. Во-первых, можно использовать R в качестве калькулятора:
2*2
#> [1] 4
sin(pi/2)
#> [1] 1
Но только в поле действительных чисел, что естественно для языка программирования статистической обработки данных и построения графиков:
(-1)^(1/2)
#> [1] NaN
(-1+0i)^(1/2)
#> [1] 0+1i
Можно создавать новые объекты с помощью оператора <-:
x <– 2*2
Все команды R, которыми создаются объекты путём присваивания, имеют одинаковую форму:
имя_объекта <– получаемое_значение
При чтении этого кода в вашей голове может прозвучать: объект «имя_объекта» получает значение «получаемое_значение». В дальнейшем понадобится решать много интересных задач, набирая большие тексты при этом. Не ленитесь, используя знак =, он тоже будет работать, но позднее приведет к путанице. Вместо этого используйте клавиатурное сокращение RStudio: Alt + – (знак минус) для быстрого набора <-. Обратите внимание, что RStudio автоматически окружает <– пробелами. Приятно читать хорошо оформленный код, поэтому недайсвоимглазамсломаться, используйте пробелы.
Имена объектов должны начинаться с буквы и могут содержат только буквы, цифры, нижнее подчеркивание «_» и точку «.», вы ведь хотите, чтобы имена объектов были информативны, поэтому понадобится соглашение для склеивания нескольких слов. Мне привычнее змеиный_стиль, в котором строчные слова разделяются нижним подчеркиванием «_».
НекоторыеЛюдиИспользуютВерблюжийСтиль,
третьи.Вовсе_ОТКАЗЫАВЮТСЯОтусловностей.
Вернемся к стилю позже, в разделе посвященном описанию функций. А пока, можно проверить содержимое ранее созданного объекта, введя его имя:
x
#> [1] 4
Выполните эксперимент, введите:
это_действительно_длинное_имя <– 777
Чтобы проверить значение этого объекта, попробуйте в RStudio средство завершения строки: введите «это» и нажмите клавишу Tab, либо Ctrl + Space (пробел), добавятся недостающие символы, так как пока этот префикс уникален, а затем нажмите клавишу Enter. А что, если это_действительно_длинное_имя должно было иметь значение 1234, а не 777. Можно использовать другое сочетание клавиш, чтобы исправить его. Введите «это» и нажмите Ctrl + ↑. Появится список всех ранее набранных команд, которые начинаются с таких букв. Воспользовавшись стрелками навигации и нажав Enter, выбранная команда наберется повторно. Тогда можно будет изменить значение параметра с 777 на 1234 и выполнить ввод.
Еще один поучительный эксперимент, вместо х введём
икс
#> Ошибка: объект 'икс' не найден
X
#> Ошибка: объект 'X' не найден
Существует негласная договоренность между пользователем и R: за вас будут делать все рутинные вычисления, но взамен, нужно быть абсолютно точным в своих инструкциях. Как видим, система чувствительна к регистру.
R имеет обширную коллекцию встроенных функций, которые вызываются так:
имя_функции(аргумент1 = значение1, аргумент2 = значение2, …)
Давайте попробуем вызвать функцию seq(), которая генерирует регулярные последовательности чисел, и на её примере узнать больше полезных особенностей RStudio. Введите se и нажмите Tab. Всплывающее окно покажет возможные завершения. Укажите seq(), введя дополнительное «q», чтобы снять двусмысленность, или используйте стрелки ↑/↓ для выбора из предложенных вариантов. Обратите внимание на всплывающую подсказку, в ней перечислены аргументы функции и их назначение. Если хотите открыть справку, то нажмите клавишу F1, чтобы получить все подробности на соответствующей вкладе в правой нижней части панели управления. Нажмите клавишу Tab еще раз, когда выбрали функция, которую хотите вызвать. RStudio добавит соответствующие открывающиеся «(» и закрывающиеся «)» скобки. Введите аргументы 1, 5 и нажмите Enter.
seq(1, 5)
#> [1] 1 2 3 4 5
Введите следующий код и обнаружите, что RStudio также помогает с кавычками:
x <– "привет мир!"
Дело в том, что кавычки и круглые скобки всегда должны следовать в паре. RStudio делает всё возможное, чтобы помочь с их расстановкой. Если произойдет какое-либо несоответствие, то R подскажет:
> x >
+
Символ «+» говорит о том, что консоль R ожидает продолжения ввода. Обычно это означает, что забыли закрыть кавычки «"», либо скобки «)». Добавьте недостающие символы, либо нажмите клавишу Esc, чтобы начать ввод заново.
При решении задач не терпится узнать результат вычислений, поэтому вводят имя объекта, чтобы увидеть его содержимое:
y <– seq(1, 5, length.out = 4)
y
#> [1] 1.000000 2.333333 3.666667 5.000000
Это частое действие сокращается путём заключения команды в круглые скобки:
(y <– seq(1, 5, length.out = 4))
#> [1] 1.000000 2.333333 3.666667 5.000000
Теперь посмотрим на панель в правом верхнем углу окна RStudio:
Здесь можно увидеть все объекты, которые были созданы ранее.
Упражнения
1. Скопируйте и вставьте в консоль:
label <– 1
lаbel
# > Ошибка: объект 'lаbel' не найден
Почему этот код не работает? Смотрите внимательно! Может показаться бессмысленным, но разница в написании a-латиницей и а-кириллицей для R существенна.
2. Нажмите Alt + Shift + K (латинское). Что произошло? Как добраться до того же экрана из главного меню приложения?
До сих пор использовали консоль для запуска код. Это неплохо для начала, но восприятие его оказывается невозможным довольно быстро, как только создаются более сложные конструкции ggplot2 при построении графиков с применением каналов dplyr. Чтобы использовать больше рабочего пространства, нужно открыть редактор скриптов. Откройте его, выбрав пункт меню «File», а затем «New File» и «R Script», либо с помощью сочетания клавиш Ctrl + Shift + N. Появится новая панель:
Редактор отлично подходит для просмотра кода и его набора. Можно экспериментировать в консоли, но как только написан код, который работает и делает то, что задумывалось, поместите его в редактор скриптов. RStudio автоматически сохранит содержимое редактора при выходе и будет автоматически загружать его при следующем входе. Тем не менее, чтобы не потерять набранное, лучше сохранять скрипты регулярно.
В редакторе скриптов отлично проходит сборка и отладка сложных графиков ggplot2 из длинных последовательностей команд dplyr. Ключом к эффективному использованию любого редактора является запоминание горячих клавиш и клавиатурных сокращений. Наиболее востребованным сочетанием клавиш редактора скриптов RStudio является Ctrl + Enter, оно выполняет текущее выражение R в консоли. Например, возьмем любой код из предыдущей главы. Если курсор находится внутри некоторой команды, то нажатие Ctrl + Enter запустит команду целиком и переместит курсор к началу следующей команды. Эта возможность используется для пошагового выполнения сценариев, путём многократного нажатия Ctrl + Enter.
Вместо того, чтобы запускать сценарий шаг за шагом, можно выполнить сохраненный сценарий целиком, нажав Ctrl + Shift + S. Рекомендуется делать это регулярно, чтобы проверить, все ли важные части кода сохранены. Начинать свой код желательно с команд подключения необходимых для запуска пакетов. Таким образом, если поделитесь кодом с другими исследователями, то они смогут легко увидеть, какие пакеты предстоит установить при необходимости. Однако никогда не нужно включать команды принудительной установки пакетов install.packages() или изменения рабочего каталога setwd() в распространяемом скрипте, признаком дурного тона является изменение настроек на чужом компьютере.
Работая с фрагментами кода в последующих главах настоятельно рекомендуется открывать их редактором и использовать различные клавиатурные сокращения. Со временем отправка кода на исполнение в консоль станет настолько естественной, что даже не будете думать об этом.
Редактор скриптов хорош тем, что выделяет синтаксические ошибки красной волнистой линией и крестиком на боковой панели. Наведите указатель мыши на крестик, чтобы увидеть, в чем проблема. RStudio укажет и потенциальные ошибки в программе.
Упражнения
1. Найти один совет, который выглядит интересный. Практикуйтесь в его использовании.
2. Какие распространенные ошибки показывает RStudio при диагностике кода?
В завершении главы скажем немного слов об организации и структуре хранения данных для крупных проектов. Порой приходится переключаться с R на сопутствующие задачи, возвращаясь к анализу данных на следующий день. Или вовсе работать над несколькими задачами одновременно, каждая из которых задействует R независимо друг от друга. Наступит момент, когда в R нужно будет загрузить данные с внешних источников и отправить вычисленные результаты обратно на внешние носители. Чтобы справиться с этими жизненными ситуациями, нужно ответить для себя на два вопроса:
1. Что является результатом выполненного анализа, то есть что будет сохранено в итоговом отчете о проделанной работе?
2. Где это сохранить?
Для начинающего пользователя R нормально рассматривать окно RStudio как основную рабочую область R, в которой хранятся все необходимые данные и строки кода. Однако в конечном счете гораздо лучше основными считать R-скрипты. С помощью R-скриптов и файлов исходных данных всегда можно восстановить рабочее окружение, но намного сложнее восстановить не сохранившиеся R-скрипты. Для этого либо придется перепечатать код заново, допуская ошибки при наборе, либо тщательно перебирать записи в истории консоли R. Если настроить RStudio так, чтобы рабочее пространство не сохранялось между сеансами, это причинит некоторое кратковременное неудобство, потому что теперь, когда перезапускается RStudio, не будет открываться код, который запустился в прошлый раз. Но это спасёт от мучений в будущем, так как заставляет все важные манипуляции с данными прописывать в коде и сохранять отдельно. Нет ничего хуже, чем обнаружить через несколько месяцев сохранившиеся лишь результаты важного расчета в рабочем окне RStudio, а не сам расчет.
Существует пара клавиатурных сокращений, используемых чтобы убедиться в сохранности важной части кода в редакторе RStudio:
1. Нажмите Ctrl + Shift + F10, чтобы перезагрузить сеанс RStudio.
2. Нажмите Ctrl + Shift + S, чтобы повторно запустить текущую команду скрипта.
Для R есть понятие «рабочий каталог». Именно в рабочем каталоге ищутся файлы при загрузке, сохраняются по умолчанию файлы, которые отправляют на сохранение. RStudio показывает текущий рабочий каталог в верхней части окна консоли. Можно увидеть путь к рабочему каталогу отдельно, запустив в коде R функцию getwd(). Начинающие пользователи R выбирают в качестве рабочего каталог рабочего стола, каталог документов, или любой другой странный каталог на компьютере. Но очень скоро эволюционируют в плане организации расположения проектов по каталогам и при работе над крупным проектом меняют рабочий каталог R на более подходящий. Можно сменить рабочий каталог из кода R запустив команду setwd("/путь/до/нового/рабочего/каталога"). Но никогда не делайте так, это не тот способ, которым пользуются профессионалы R для настройки пути до рабочего каталога. Адресация путей и каталогов осложнена тем, что в операционных системах Mac, Linux и Windows применяются разные форматы для их записи. Есть три основных отличия:
1) Самое главное отличие заключается в разделителях компонентов путей. Mac и Linux используют косую черту «/», а Windows использует обратную косую черту «\». R может работать с любым типом разделителя, независимо от используемой платформы, но обратные косые черты зарезервированы для ввода управляющих символов, в частности, чтобы получить одну обратную косую черту, в строке пути нужно вводить две обратные косые черты. Поэтому рекомендуется всегда использовать стиль Linux/Mac и разделять фрагменты пути символом «/».
2) Абсолютные пути, то есть пути, которые указывают на фиксированное место, независимо от рабочего каталога, выглядят по-разному. В Windows они начинаются с буквы диска, например «C:», или с двух обратных косых черт, например, «\\имя_сервера», а в Mac/Linux они начинаются с косой черты «/», например, «/users/RStudio». Никогда не используйте абсолютные пути в скриптах, потому что они мешают обмену результатами исследований с другими разработчиками, ведь ни у кого нет в точности совпадающий структур каталогов.
3) Последнее отличие – ссылки на домашний каталог. Символ «~» является удобным обозначением для домашнего каталога, но в Windows на самом деле нет понятия «домашний каталог», поэтому «~» указывает на папку документов текущего пользователя.
Специалисты хранят все файлы, связанные общими целями и задачами (входные данные, R скрипты, аналитические результаты, рисунки) в одном каталоге. Эта житейская мудрость является распространенной практикой, так как RStudio имеет встроенную поддержку для её реализации посредством создания проектов.
Для создания нового проекта, который будет использоваться при работаете с оставшейся частью книги, достаточно выбрать в главном меню приложения пункт «File», а затем «New Project…». Назовите проект «практикум по статистике» и хорошенько подумайте, в какой каталог его поместить. Если не сделаете это сознательно, то потом очень трудно будет его найти. Как только создание проекта завершено, проверьте, что путь до каталога проекта совпадает с рабочим каталогом. Всякий раз, когда в коде ссылаются на файл через относительный путь, он будет искаться в рабочем каталоге.
Теперь введите в редакторе скрипа следующие команды
library(tidyverse)
ggplot(diamonds, aes(carat, price)) +
geom_hex()
ggsave("алмазы.pdf")
write_csv(diamonds, "алмазы.csv")
И сохраните файл, назвав его «алмазы.R». Далее, запустите этот скрипт, чтобы создать файлы PDF и CSV в каталоге проекта. Не беспокойтесь о деталях, их разберем подробнее чуть позже. А пока, выйдите из RStudio и откройте папку проекта, обнаружите там файл «практикум по статистике» с расширением «.Rproj». Дважды кликните по нему для повторного открытия проекта. Заметьте, что вернулись на место, где остановились, это тот же самый рабочий каталог и история команд, открылись все файлы, над которыми работали. Следуя описанным инструкциям имейте ввиду, что начинать новый проект лучше с пустого системного окружения, как чистого листа.
Если теперь выполнить поиск файл алмазы.pdf, то найдется PDF рядом со скриптом, который его создал (алмазы.R). Одновременно сохранились график и данные, по которым он строился. Предпочтительно сохранять данные кодом R, а не с помощью мыши или через буфер обмена, чтобы не исказить информацию.
Проекты RStudio формируют крепкую основу рабочего процесса. Для повышения эффективности стоит придерживаться следующих рекомендаций:
• Создавать отдельный проект RStudio для каждого аналитического проекта.
• Хранить файлы данных в папке проекта, для удобной загрузки их в R.
• Храните там же и скрипты, редактируя их, запуская по частям или целиком.
• Сохранять там же и выходных данных (графики, очищенные данные).
• Использовать только относительные пути, а не абсолютные.
В результате, всё необходимое для работы будет находится в одном месте, изолированном от других проектов.