install.packages("lubridate")
P3 // Датафреймы. Исследование данных
Основные задания
#1
Создайте проект (RStudio Project), в котором будете складывать материалы курса. Откройте его и создайте первый скрипт в этом проекте.
Подсказки
Как создать проект, описано тут
#2
Загрузите данные в R. По ссылке расположен CSV-файл.
Это данные эксперимента на зрительный поиск, в котором испытуемые должны были как можно быстрее найти целевой стимул. Сохраните данные в переменную fs
.
Подсказки
readLines()
поможет прочитать несколько строк, чтобы посмотреть, какова структура файла.
#3
Посмотрите, корректно ли загрузился файл.
- Выведите первые 10 строк датасета в консоль
- Выведите посление 5 строк датасета в консоль
Подсказки
head()
tail()
#4
Изучите структуру загруженного датасета.
- Сколько в нем наблюдений?
- Сколько в нем переменных?
- Какого они типа?
Подсказки
str()
#5
Посмотрите базовые описательные статистики по всем переменным датасета. Используйте одну функцию.
Почему для разных переменных формат аутпута различается?
Подсказки
summary()
#6
- Мы знаем, что файлы данных считываются функциями типа
read...()
в датафрейм. Но давайте в этом дополнительно убедимся. Проверьте, какой структурой данных является объектfs
. - Выведите названия столбцов датасета. с. Выведите названия строк датасета.
Подсказки
class()
colnames()
и rownames()
#7
Продолжаем работать с датафреймом fs
:
- Выведите содержимое столбца
time
— должен вернуться вектор. - Выведите содержимое первого столбца — должен вернуться вектор.
- Выведите содержимое первого столбца — должен вернуться датафрейм.
- Выведите содержимое столбца
cond
— должен вернуться датафрейм.
Подсказки
Вспомните об особенностях индексации списков.
#8
Всё ещё продолжаем работать с датафреймом fs
:
- Выведите три первые столбца датафрейма
- Выведите первые 30 строк датафрейма
- Выведите содержимое третьей и четвертой колонок из первых десяти строк датафрейма
- Выведите значение, которое лежит во втором столбце 340-ой строки
Подсказки
Вспомните об особенностях индексации матриц.
#9
- Выведите типы данных столбцов датафрейма с помощью одной команды.
- Выясните, есть ли пропущенные значения в данных.
Подсказки
sapply()
+class()
sum()
+is.na()
#10
До этого момента мы жили в прекрасном мире, когда у нас был целый датасет. Однако часто данные разбросаны по нескольким файлам.
Скачайте архив, в котором лежит несколько файлов данных от разных испытуемых, которые прошли один и тот же эксперимент. Разархивируйте его в папку проекта, которую мы создали в задании 1.
- Выведите названия файлов, которые лежат в разархивированной папке.
- Сколько файлов содержится в скачаной папке?
dir()
#11
Имеющиеся в нашем распоряжении файлы данных имеют одинаковую структуру, так как собирались с помощью одного и того же ПО.
Загрузите все данные из скачанных файлов, объединив их в один датафрейм. Сохраните результат в переменную fs5
.
for (...) {...}
+ rbind()
#12
- В столбце
cond
содержатся закодированные сочетания экспериментальных условий. Сколько таких сочетаний было в эксперименте? - Сколько в данных наблюдений, относящихся к каждому из сочетаний экспериментальных условий?
- Отберите из данных наблюдения, которые относятся к сочетанию условий
f3_p
. - Отберите из данных числовые переменные.
Подсказки
Вспомните, как мы индексировали массивы по условию.
#13
В данных fs5
содержится колонка date
— это дата и время начала прохождения эксперимента.
- Эта переменная выглядит как текстовая. Проверьте, так ли это.
- При необходимости приведите её к типу
datetime
.
Подсказки
Понадобится пакет lubridate
. Установить его можно командой
Однако данный пакет являются частью tidyverse
, который нам понадобится уже на следующей практике, поэтому лучше сделать
install.packages("tidyverse")
Чтобы привести текст к дате пригодится as_datetime()
.
#14
Изучите колонку date
датасета fs5
:
- В каком году собраны данные?
- В каком месяце собраны данные?
- Сколько дней собирались данные?
Подсказки
year()
month()
day()
#15
На основе имеющихся данных составьте датасет, в котором будут содержаться идентификаторы испытуемых и даты, когда они проходили эксперимент. Количество строк в итоговом датасете должно совпадать с количеством испытуемых. Сохраните его в переменную fs_dates
.
Подсказки
duplicated()
#16
Нам надо проверить испытуемых на честность. Известно, что эксперимент занимает 30–40 минут — если человек проходит его быстрее, вероятно, он был недостаточно внимаетелн или вовсе просто прокликал все пробы. Справедливо не учитывать такого испытуемого в анализе.
Данные о начале эксперимента у нас есть — это дата и время создания файла (date
). Однако информации о том, когда эксперимент закончился у нас нет. Или?
Эксперимент завершился тогда, когда все данные были записаны в файл — то есть в тот момент, когда произошло последнее изменение файла.
Возмите для примера файл des_fs_1.csv
и вытащите его метаданные, в которых содержится информацию о дате его создания, изменения и последнего доступа.
Подсказки
file.info()
#17
Взяв за основу цикл из задания 11, соберите метаданные из всех файлов в единый датафрейм. Назовите его fs_meta
.
Подсказки
#18
Объедините данные из датафреймов fs_dates
и fs_meta
. Итоговый датасет должен содержать следующие колонки: id
, date
, mtime
. Перезапишите объект fs_dates
.
Подсказки
cbind()
#19
Вычислите, сколько времени затратил каждый испытуемый на прохождение эксперимента. Сохраните результаты вычислений в новую колонку duration
датафрейма fs_dates
.
Есть ли испытуемые, которых необходимо исключить из анализа?
Подсказки
difftime()
#20
Экспортируйте получившийся датасет в формате CSV.
Подсказки
write.csv()
Дополнительные задания
#1
Познакомьтесь с работой функции View()
. Попробуйте вызвать её на объекте fs
. При необходимости ознакомьтесь с документацией по этой функции
Подсказки
#2
Иногда — хотя последнее время всё реже — встречаются файлы данных, которые пришли нам из других статистических программ. Например, файлы SPSS имеют собственное расширение .sav
. Они загружаются в R с помощью функции read.spss
из пакета foreign
или read_sav
из пакета haven
.
По ссылке есть данные в формате .sav
. Скачайт их и загрузите в R с помощью какой-либо из указанных выше функций. Обратите внимание на особенности загрузки данных. При необходимости изучите документацию к функциям.
Подсказки
#3
На предыдущих практиках мы рассматривали функцию Map()
, которая может заменять цикл. Реализуйте с её помощью загрузку нескольких файлов из задания 11.
Подсказки
<<-
#4
Возьмите датасет fs_dates
из задания 19 и создайте в нем переменные start
и end
, которые будут содержать в себе временную метку (timestamp) из колонок date
и mtime
соответственно. Посчитайте продолжительность прохождения эксперимента в минутах на основе переменных start
и end
. Сравните с содержимым переменной duration
.
Подсказки
as.numeric()
#5
В лекции упоминался формат файлов JSON. Попробуем загрузить датасет fs
, с которым мы работали на этой практике, но теперь из JSON-файла. Для этого нужна будет функция read_json
из пакета jsonlite
.
Загрузка JSON-файла имеет свои особенности. Обратитесь к документации функции, чтобы их изучить.
Подсказки
#6
В лекции упоминался формат файлов данных с особой разметкой XML. Попробуем загрузить датасет fs
, с которым мы работали на этой практике, но теперь из XML-файла. Для этого нужна будет функция xmlToDataFrame
из пакета XML
.
Загрузка XML-файла имеет свои особенности. Обратитесь к документации функции, чтобы их изучить.
Подсказки
#7
R позволяет управлять структурой проекта, не выходят из скрипта. Найдите функцию, которая создает папку внутри рабочей директории. Создайте с её помощью папку scripts
и сложите в неё скрипты, который успели накопиться за время курса.
Подсказки
#8
Иногда бывает так, что мы обнаруживаем битый файл среди файлов данных. Нам ничего не остается, как удалить его. Можно сделать это вручную, однако потом мы вполне можем забыть, что у нас был такой файл и мы его удаляли — и количество респондентов и файлов не сойдется. Отыщите функцию, которая позвляет удалить файл прямо из скрипта. Она позволит оставить в скрипте след о том, что файл был удален, что позволит нам не забыть о произошедшем проишествии.
Подсказки
#9
Выйдите из проекта курса и проверьте, какую папку R считает рабочей директорией по умолчанию.
Подсказки
getwd()
#10
Скорее всего, он считает рабочей директорией по умолчанию папку пользователя операционной системы. Чтобы файлы, которые вы будете создавать по той или иной причине вне проектов не болтались просто в папке пользователя и не путались с другими файлами, создайте папку R
, которая будет дефолтной рабочей директорией. Задайте её в качестве таковой через настройки: Tools > Global Options... > General > R Session > Default working directory
.
Можете выбрать другое название папки, которое считаете удобным для работы.