3 tidyverse: Загрузка и трансформация данных

tidyverse — это набор пакетов:

  • ggplot2, для визуализации
  • tibble, для работы с тибблами, современный вариант датафрейма
  • tidyr, для формата tidy data
  • readr, для чтения файлов в R
  • purrr, для функционального программирования
  • dplyr, для преобразованиия данных
  • stringr, для работы со строковыми переменными
  • forcats, для работы с переменными-факторами

Полезно также знать о следующих:

  • readxl, для чтения .xls и .xlsx
  • jsonlite, для работы с JSON
  • rvest, для веб-скреппинга
  • lubridate, для работы с временем
  • tidytext, для работы с текстами и корпусами
  • broom, для перевода в tidy формат статистические модели
library("tidyverse")
## ── Attaching packages ──────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.2     ✓ purrr   0.3.4
## ✓ tibble  3.0.3     ✓ dplyr   1.0.2
## ✓ tidyr   1.1.2     ✓ stringr 1.4.0
## ✓ readr   1.3.1     ✓ forcats 0.5.0
## ── Conflicts ─────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()

3.1 Загрузка данных

3.1.1 Рабочая директория

Все в R происходит где-то. Нужно загружать файлы с данными, нужно их куда-то сохранять. Желательно иметь для каждого проекта некоторую отдельную папку на компьютере, куда складывать все, отнсящееся к этому проекту. Две команды позволят опредить текущую рабочую дерикторию (getwd()) и (setwd(.../path/to/your/directory)).

3.1.2 Форматы данных: .csv

Существет много форматов данных, которые придумали люди. Большинство из них можно загрузить в R. Так как центральный объект в R – таблица \(n \times k\), то и работать мы большую часть времени будем с таблицами. Наиболее распространенные способы хранить данные сейчас это .csv (разберем в данном разделе) и .json (разберем в разделе (???){lists}).

.csv (comma separated values) – является обычным текстовым файлом, в котором перечислены значения с некоторым фиксированным разделителем: запятой, табуляцией, точка с запятой, пробел и др. Такие файлы обычно легко открывает LibreOffice, а в Microsoft Excel нужны некоторые трюки.

3.1.3 Загрузка данных: readr, readxl

Стандартной функцией для чтения .csv файлов в R является функция read.csv(), но мы будем использовать функцию read_csv() из пакета readr.

read_csv("...")

Вместо многоточия может стоять:

  • название файла (если он, есть в текущей рабочей дериктории)
read_csv("my_file.csv")
  • относительный путь к файлу (если он, верен для текущей рабочей дериктории)
read_csv("data/my_file.csv")
  • полный путь к файлу (если он, верен для текущей рабочей дериктории)
read_csv("/home/user_name/work/data/my_file.csv")
  • интернет ссылка (тогда, компьютер должен быть подключен к интернету)
read_csv("https://my_host/my_file.csv")

Для чтения других форматов .csv файлов используются другие функции:

  • read_tsv() – для файлов с табуляцией в качестве разделителя
  • read_csv2() – для файлов с точкой с запятой в качестве разделителя
  • read_delim(file = "...", delim = "...") – для файлов с любым разделителем, задаваемым аргументом delim

Стандартной практикой является создавать первой строкой .csv файлов названия столбцов, поэтому по умолчанию функции read_...() будут создавать таблицу, считая первую строку названием столбцов. Чтобы изменить это поведение следует использовать аргумент col_names = FALSE.

Другая проблема при чтении файлов – кодировка и локаль. На разных компьютерах разные локали и дефолтные кодировки, так что имеет смысл знать про аргумент locale(encoding = "UTF-8").

Попробуйте корректно считать в R файл по этой ссылке.

Благодаря readxl пакету Также данные можно скачать напрямую из файлов .xls (функция read_xls) и .xlsx (функция read_xlsx), однако эти функции не умеют читать из интернета.

library("readxl")
xlsx_example <- read_xlsx("...")

Существует еще один экстравагантный способ хранить данные: это формат файлов R .RData. Создадим data.frame:

my_df <- data.frame(letters = c("a", "b"),
                    numbers = 1:2)
my_df

Теперь можно сохранить файл…

save(my_df, file = "data/my_df.RData")

удалить переменную…

rm(my_df)
my_df
## Error in eval(expr, envir, enclos): object 'my_df' not found

и загрузить все снова:

load("data/my_df.RData")
my_df

3.1.3.1 Misspelling dataset

Этот датасет я переработал из данных, собранных для статьи The Gyllenhaal Experiment, написанной Расселом Гольденбергом и Мэттом Дэниэлсом для издания pudding. Они анализировали ошибки в правописании при поиске имен и фамилий звезд.

misspellings <- read_csv("https://raw.githubusercontent.com/agricolamz/DS_for_DH/master/data/misspelling_dataset.csv")
## Parsed with column specification:
## cols(
##   correct = col_character(),
##   spelling = col_character(),
##   count = col_double()
## )
misspellings

В датасете следующие переменные:

  • correct – корректное написание фамилии
  • spelling – написание, которое сделали пользователи
  • count – количество случаев такого написания

3.1.3.2 diamonds

diamonds