HW3 // Датафреймы. Исследование данных
Основные задания
Описание данных
Сегодня мы работаем с данными опросника Тёмная дюжина (Dirty Dozen), которые собирались в одном из офлайн-исследований. Так как данные были собраны на разных компьютерах, несколько файлов были объединены в архив.
Тёмная дюжина — это опросник на Темную триаду из двенадцати пунктов. Данные содержат ответы респондентов на эти пункты (q1
— q12
), идентификатор респондента (id
) и дату, когда опросник был заполнен (date
).
#1
Скачайте архив с данными и разархивируйте его в проект курса, который мы создали на практическом занятии. В папке проекта должна появиться папка hw3
. Мы будем работать с ней.
Сколько всего файлов содержится в папке hw3
? Выведете число файлов с помощью кода.
Для самопроверки введите количество файлов в папке.
Подсказки
Как делать задание?
- Необходимо вывести названия файлов, содержащихся в папке
hw3
в виде вектора - И далее определить длину (количество элементов) этого вектора
Что надо сделать?
- Выведите названия файлов, содержащихся в папке
hw3
, с помощью функцииdir()
- Функция вернет вектор названий файлов
- Определите длину (количество элементов) этого вектора с помощью функции
length()
Код падает с ошибкой
- Проверьте, что вы разархивировали скачанный архив в папку проекта
- Проверьте, что вы работаете в проекте
- Проверьте, что вы не опечатались в названии папки
#2
Данные собирались на одном и том же программном обеспечении, поэтому структура файлов одинакова. Возьмите первый датасет set1.csv
из папки с данными и загрузите его в переменную set1
.
Для самопроверки в поле ниже введите число строк в датасете.
Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный
#3
Проверьте структуру полученного датафрейма. Выведите типы данных всех переменные и первые несколько значений каждой из них с помощью одной команды.
В качестве ответа для самопроверки введите название типа данных, переменных которого больше всего в датасете. Проверка примет только полное название типа.
Подсказки
Как делать задание?
- Выведете структуру датафрейма
- Посмотрите, переменных какого типа больше всего
Что надо сделать?
- С помощью функции
str()
вывести структуру датафрейма - Функция вернет список переменных, их тип и первые несколько значений каждой из них
- Определите, переменных какого типа больше всего
Ответ неверный
Проверьте, с помощью какой функции вы загружаете данные. В случае read.csv()
ответ будет верный, в случае read_csv()
из пакета tidyverse
ответ будет отличаться.
#4
- Выведите первые 15 строк датафрейма.
- Выведите 6 последних строк датафрейма.
Для самопроверки введите через запятую id
первого и последнего наблюдения (строки) в датасете.
Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный
#5
Выведите базовые описательные статистики по всем колонкам датасета с помощью одной функции.
Для самопроверки в поле ниже введите среднее (mean
) по переменной q6
, округлённое до трёх десятичных знаков.
Подсказки
Что надо сделать?
- Выведите базовые описательные статистики по всем переменных датафрейма с помощью функции
summary()
.
Ответ неверный
Проверьте, что вы вводите среднее значение именно для переменной q6
.
#6
Данные первично исследованы. Теперь можно объединить все файлы в единый датасет.
Загрузите все файлы данных и объедините их в один датафрейм. Назовите его dd
. Сделайте это с помощью цикла.
В качестве ответа для самопроверки введите количество строк в получившемся датафрейме.
Подсказки
Как делать задание?
- Напишите цикл, который проходится по вектору названий файлов, и читает каждый из указанных файлов
- Учтите, что функция
dir()
возвращает только названия файлов, а чтобы они были прочитаны, необходимо добавить к их названиям имя папки, в которой они лежат - В теле цикла необходимо присоединять только что прочитанный файл к уже прочитанным и перезаписывать переменную
- Не забудьте, что первый прочитанный файл также нужно к чему-то присоединить
Что надо сделать?
- Возьмите за основу функцию
read.csv()
, которая читает файлы, и возвращает датафрейм. - Используйте функцию
rbind()
, чтобы объединить два датафрейма по строкам. - Чтобы первый загруженный датафрейм было к чему присоединять, создайте пустой датафрейм функцией
data.frame()
. - Присоединить имя папки к названию файла, чтобы сформировать полный путь, можно с помощью функции
paste0()
.
Ответ неверный
- Проверьте, что цикл выполнился столько раз, сколько файлов есть в папке (посмотрите на значение переменной-итератора в Environment).
- Проверьте, что какой-либо из файлов не прочитался более одного раза.
#7
Проверьте, есть ли в файлах данные, собранные в разные года. Для этого поработайте с переменной date
. Обратите внимание на её тип.
Для выполнения понадобится библиотека lubridate
.
Для самопроверки в поле ниже введите нет, если в данных есть наблюдения из разных лет, и полученный год, если все данные собраны в одном году.
Подсказки
Как делать задание?
- Определите тип переменной
date
и скорректируйте его — измените наdatetime
при необходимости. - Выделите из даты год
- Посчитайте число уникальных значений
Что надо сделать?
- Проверьте тип переменной
date
с помощью функцииclass()
. - Перезапишите переменную, приведя её к типу
datetime
с помощью соответствующей функции из пакетаlubridate
. - Чтобы перезаписать переменную, необходимо использовать синтаксис с индексацией по имени вместе и оператором присваивания
<-
- Выделите из перезаписанной переменной
date
год с помощью соответствующей функции изlubridate
. - Определите число уникальных значений года
#8
Отберите из всего датасета только те данные, которые были собраны в осенний период — сентябрь, октябрь, ноябрь. Сохраните результат в переменную dd_fall
.
В качестве ответа для самопрверки введите количество строк в получившемся датафрейме.
Подсказки
Как делать задание?
- Выделите из переменной с датой месяц
- Проиндексируйте датафрей по необходимому условию аналогично индексации матрицы
- В датафрейме необходимо сохранить все колонки
- Сохраните результат в переменную
Что надо сделать?
Ответ неверный
Проверьте условия индексации — в сабсет должны попасть только месяца 9
, 10
и 11
.
#9
Создайте в рабочей директории папку с названием hw3-prepdata
.
Описание формата инпута.
Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный
#10
Экспортируйте датасет с осенними наблюдениями в созданную папку hw3-prepdata
.
Описание формата инпута.
Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный
Дополнительные задания
#1
На практике мы создали проект для нашего курса. Давайте создадим в нем структуру.
Создайте в директории проекта три папки: data
, scripts
и graphs
, в которых будут храниться данные, скрипты и визуализации, которые мы впоследствии будем создавать.
Распределите файлы, накопившиеся в ходе курса, по соответствующих папкам. Можете создать дополнительные подпапки внутри data
, scripts
и graphs
, если считаете нужным. Задание выполняется без кода.
Описание формата инпута.
Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный
#2
Напишите функцию, которая загружает все файлы из папки в один датафрейм.
Функция должна принимать на вход путь в папке и возвращать датафрейм, в котором будут содержать все данные из её файлов. Считайте, что папка содержит только файлы данных формата CSV, а их структура одинакова.
Описание формата инпута.
Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный
#3
Возьмите файл и загрузите его в R c помощью функции read.table()
. С ним есть проблема, которую вам необходимо решить. Тут есть полезный инструмент.
Описание формата инпута.
Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный
#4
Модифицируйте функцию из дополнительного задания 2 так, чтобы она могла обрабатывать различные кодировки файлов. Основное поведение функции должно остаться прежним.
Описание формата инпута.
Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный
#5
Превратите директорию проекта курса в git-репозиторий (локальный или облачный).
Выполните задание, если вы знакомы с git. Иначе, пропустите задание.
Если вы создали облачный репозиторий, добавьте в скрипт комментарием ссылку на него.
Описание формата инпута.