P3 // Датафреймы. Исследование данных

Основные задания

#1

Создайте проект (RStudio Project), в котором будете складывать материалы курса. Откройте его и создайте первый скрипт в этом проекте.

Подсказки

Как создать проект, описано тут

#2

Загрузите данные в R. По ссылке расположен CSV-файл.

Это данные эксперимента на зрительный поиск, в котором испытуемые должны были как можно быстрее найти целевой стимул. Сохраните данные в переменную fs.

Подсказки

readLines() поможет прочитать несколько строк, чтобы посмотреть, какова структура файла.

#3

Посмотрите, корректно ли загрузился файл.

  1. Выведите первые 10 строк датасета в консоль
  2. Выведите посление 5 строк датасета в консоль
Подсказки

head()

tail()

#4

Изучите структуру загруженного датасета.

  • Сколько в нем наблюдений?
  • Сколько в нем переменных?
  • Какого они типа?
Подсказки

str()

#5

Посмотрите базовые описательные статистики по всем переменным датасета. Используйте одну функцию.

Почему для разных переменных формат аутпута различается?

Подсказки

summary()

#6

  1. Мы знаем, что файлы данных считываются функциями типа read...() в датафрейм. Но давайте в этом дополнительно убедимся. Проверьте, какой структурой данных является объект fs.
  2. Выведите названия столбцов датасета. с. Выведите названия строк датасета.
Подсказки

class()

colnames() и rownames()

#7

Продолжаем работать с датафреймом fs:

  1. Выведите содержимое столбца time — должен вернуться вектор.
  2. Выведите содержимое первого столбца — должен вернуться вектор.
  3. Выведите содержимое первого столбца — должен вернуться датафрейм.
  4. Выведите содержимое столбца cond — должен вернуться датафрейм.
Подсказки

Вспомните об особенностях индексации списков.

#8

Всё ещё продолжаем работать с датафреймом fs:

  1. Выведите три первые столбца датафрейма
  2. Выведите первые 30 строк датафрейма
  3. Выведите содержимое третьей и четвертой колонок из первых десяти строк датафрейма
  4. Выведите значение, которое лежит во втором столбце 340-ой строки
Подсказки

Вспомните об особенностях индексации матриц.

#9

  1. Выведите типы данных столбцов датафрейма с помощью одной команды.
  2. Выясните, есть ли пропущенные значения в данных.
Подсказки
  1. sapply() + class()
  2. sum() + is.na()

#10

До этого момента мы жили в прекрасном мире, когда у нас был целый датасет. Однако часто данные разбросаны по нескольким файлам.

Скачайте архив, в котором лежит несколько файлов данных от разных испытуемых, которые прошли один и тот же эксперимент. Разархивируйте его в папку проекта, которую мы создали в задании 1.

  1. Выведите названия файлов, которые лежат в разархивированной папке.
  2. Сколько файлов содержится в скачаной папке?

dir()

#11

Имеющиеся в нашем распоряжении файлы данных имеют одинаковую структуру, так как собирались с помощью одного и того же ПО.

Загрузите все данные из скачанных файлов, объединив их в один датафрейм. Сохраните результат в переменную fs5.

for (...) {...} + rbind()

#12

  1. В столбце cond содержатся закодированные сочетания экспериментальных условий. Сколько таких сочетаний было в эксперименте?
  2. Сколько в данных наблюдений, относящихся к каждому из сочетаний экспериментальных условий?
  3. Отберите из данных наблюдения, которые относятся к сочетанию условий f3_p.
  4. Отберите из данных числовые переменные.
Подсказки

Вспомните, как мы индексировали массивы по условию.

#13

В данных fs5 содержится колонка date — это дата и время начала прохождения эксперимента.

  1. Эта переменная выглядит как текстовая. Проверьте, так ли это.
  2. При необходимости приведите её к типу datetime.
Подсказки

Понадобится пакет lubridate. Установить его можно командой

install.packages("lubridate")

Однако данный пакет являются частью tidyverse, который нам понадобится уже на следующей практике, поэтому лучше сделать

install.packages("tidyverse")

Чтобы привести текст к дате пригодится as_datetime().

#14

Изучите колонку date датасета fs5:

  1. В каком году собраны данные?
  2. В каком месяце собраны данные?
  3. Сколько дней собирались данные?
Подсказки

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.

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