You are on page 1of 60

Експорт та імпорт даних

Лекція 2
Питання

1. Типи даних в R
2. Заміна відсутніх значень у таблицях даних в R
3. Експорт даних в R
4. Імпорт даних в R
1. Типи даних
 Усі типи даних можна представити двома групами: контейнери (структури даних) та первинні
типи даних.
 Будь-яка змінна у мові R може набувати лише значення типу контейнера, елементами можуть
бути значення первинних типів даних.
Типи даних контейнерів
Тип Опис
(вектор). фундаментальна річ в R, на все можна дивитись через вектор
vector Пронумерований кінцевий набір елементів однакового первинного типу є найбільш простим у R. Вибирайте цей тип даних, якщо
потрібно зберігати одне або кілька значень, з якими планується виконувати однакові операції.

factor (фактор) схожий на вектори, але з певним набором рівнів.

matrix (матриці) схожі на вектори, але зі специфічними інструкціями для виведення, нагадують матриці в математиці.

array (масиви) схожі на матриці, але можуть мати розмірність більше двох.

list (список) є вектором для об'єктів R.


(набір даних) схожий на матрицю, але не вимагає, щоб усі колонки були ідентичні за типом, є переліком змінних/векторів однакової
data.frame довжини.
Первинні типи даних

Тип Опис Приклади значень


NULL Це спеціальний тип, що має лише одне значення NULL

Логічний тип. Приймає значення NA, NaN, FALSE, TRUE. NA (not available)
позначає, що тут не доступне якесь значення для операції. Будь-які операції з
logical NA, FALSE, TRUE
NA повертають NA і таким чином можна буде легко детермінувати помилку
відсутності даних.
integer Цілий тип даних. Спец значення NA, NaN as.integer(NA), 26L

double Тип чисел з плаваючою точкою. Серед спеціальних значень NA, Inf, -Inf, NaN as.double(NA), 26

Рядок або окремий символ. Спеціального типу для одиночного символу не


character
передбачено. Спеціальне значення NA.
Вектор
 типи векторів: logical, character, integer, double, complex.

c(..., …, …)

numeric_vector <- c(1, 10, 49)


boolean_vector <- c(TRUE, FALSE, TRUE)
character_vector<- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday")

Операції з векторами:

x <- c(10, 2, 3, 7, 4)
y <- c(2, -1, 3, 2, 6)
# додавання/віднімання (поелементно)
x+y
12 1 6 9 10

x-y
8 3 0 5 -2
# множення на скаляр
2*x
20 4 6 14 8
# застосування функції до кожного елемента
sqrt(x)
3.162278 1.414214 1.732051 2.645751 2.000000
# сума елементів
sum(x)
26
# довжина вектора
length(x)
5
# об'єданання векторів
z <- c(x, y)
z
10 2 3 7 4 2 -1 3 2 6
# інший спосіб задання вектора, вказуємо послідовність від 1 до 20
x <- 1:20
x
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Доступ до елементів вектора.


# п'ятий елемент (нумерація елементів вектора з одиниці)
x[5]
5

# діапозон елементів (з 6 по 12)


x[6:12]
6 7 8 9 10 11 12

# конкретні елементи: 6-й, 10-й, 13-й


x[c(6, 10, 13)]
6 10 13

# елементи за винятком 6-го та 13-го


x[-c(6, 13)]
1 2 3 4 5 7 8 9 10 11 12 14 15 16 17 18 19 20

# елементи, які більше 5-го


x[x > 5]
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

# елементи, які більше 5 і менші 15


x[x > 5 & x < 15]
6 7 8 9 10 11 12 13 14

# елементи, які менші 5 або більші 15


x[x < 5 | x > 15]
1 2 3 4 16 17 18 19 20

Відсутні значення позначаються як NA (Not avaliable). Впливають на результат обчислень.


x <- c(10, 20, NA, 4, NA, 2)
sum(x)
NA
sum(x, na.rm = TRUE)
36
Текстовий вектор:
y<-c("A", "Hello", "world!")
y
"A" "Hello" "world!"

Об’єднати 2 вектори в одну структуру - cbind():

Об‘єднання двох рядків в одну структуру - rbind():


Матриця
matrix(), приймає три аргументи:

 data: колекція елементів, які R розміщуватиме в рядках та стовпцях матриці


 nrow: кількість рядків
 ncol: кількість стовпців
 byrow: `byrow = FALSE` (значення за замовчуванням), матриця заповнювалася
стовпцями.
Матриця з byrow = TRUE та з byrow = FALSE.
 Розмір матриці за допомогою dim():

 Додати стовпець у матрицю за допомогою cbind()

Наприклад, створена матриця 5×2, додаємо третій стовпець та перевіряємо розмір:


 cbind() - додає стовпці, rbind() - додає рядки.
Множення матриць (%*%) Транспонування матриць (t())
Інші функції для роботи матрицею
Список

list(...)
 Функція list() дає можливість перетворити вектор на список, для оберненої операції
використовується функція unlist(). При цьому відбувається конвертація типів кожного
елементу до одного типу в наступній послідовності пріоритетів:
NULL < logical < integer < real < complex < character< list

 Посилання на елементи списку проводяться за допомогою [i] або [[i]].


 Якщо елементи списку мають назви (визначити можна за допомогою функції names()),
то посилання на елементи можуть здійснюватися за допомогою символу $.

Елементи вектора повинні бути одного типу,


то елементи списку можуть мати різні типи!
Доступ до елементів та імені (якщо елемент має ім'я)
Фактор

 x : вектор даних.
 levels: вектор можливих значень, необов'язковий.
 labels: додати мітку до даних.
 order: визначити, чи слід упорядкувати рівні.
Нехай маємо звичайний вектор:

Створимо впорядкований фактор, в параметрі level задаємо порядок:

Визначимо March < April


Фрейм даних

 Фрейми складаються з різноманітних типів даних (числових, текстових, логічних


тощо).

 df : набір даних
 stringsAsFactors : конвертувати рядок у фактор за замовчуванням. Для того, щоб
включити елементи типу "character" без подальшої конвертації в інший тип
вказати додатковий аргумент stringsAsFactors=FALSE.

Традиційно, стовпчики розглядаються як змінні,


рядки містять характеристики об’єктів.
Три способи створити data frame.
1. Об'єднати вектори однакової довжини, використовуючи функцію data.frame
Приклад 1.

Приклад 2.

Змінити ім'я стовпця за допомогою функції names():

names(df) <- c('ID', 'items', 'store', 'price')


df
2. Використовувати вбудовані набори даних.

3. Зчитати з файла.
Базові операції
Додати стовпець до фрейму даних

 Для додавання нової змінної використовуємо $:

Число елементів у векторі повинно дорівнювати кількості елементів у фреймі


даних!
Вибрати стовпець з фрейму даних

 Для вибору стовпеця з фрейму даних використовуємо $:

Підмножина фрейму даних


 Використовуємо функцію subset().
 Наприклад, повернути товари з ціною вище 10:
Сортування фрейма даних
 sort()
 Розташування даних може бути в порядку зростання або спадання.

 x: вектор, що містить безперервну або факторну змінну


 Decreasing (спадання): контроль порядку сортування методу. За замовчуванням для
зменшення встановлено значення «FALSE».
 last : вказує, чи має значення `NA` вказуватися останнім чи ні
# swiss - Швейцарські дані народжуваності та соціально-економічних показників (1888)
2. Заміна відсутніх значень в даних

бібліотека dplyr

Заміна відсутніх значень в даних:


1) виключити пропущені значення у фреймі даних
2) змінювати пропущені значення на середнє та медіану (mutate())
1) Виключити пропущені значення (немає даних)

 Метод na.omit() із бібліотеки dplyr – це простий спосіб виключити відсутні


спостереження.
 Приклад, виключимо пропущені спостереження з набору даних test.csv (інформація про
пасажирів на борту Титаніка під час трагедії).
1. завантажимо файл CSV з Інтернету,
2. перевіримо, які стовпці мають NA.

Відкидаємо
відсутні значення

 Ім'я стовпців, які мають відсутні дані - “Age” та “Fare”.

 Відкидаємо відсутні значення за допомогою na.omit().

df_titanic_drop <-df_titanic %>%


na.omit()
2) Замінити відсутні дані середнім та медіаною

 Cтворюємо дві окремі змінних для середнього значення та медіани. Після створення
можемо замінити відсутні значення знову сформованими змінними.
 Використаємо функцію apply() для обчислення середнього значення стовпця з NA.
 Приклад:
Крок 1) Збережемо ім'я стовпця з відсутніми значеннями у списку під назвою
list_na.

Крок 2) Тепер потрібно обчислити середнє значення. Використовуємо аргумент


na.rm = TRUE, щоб виключити відсутні значення під час обчислення описової
статистики в R. Цей аргумент є обов'язковим, оскільки в стовпцях відсутні дані, і це
вказує на R ігнорувати їх.
average_missing <- apply (df_titanic[,colnames(df_titanic) %in% list_na],
2,
mean,
na.rm = TRUE)
average_missing

аргументи в apply()
 df: df_titanic [, colnames (df_titanic) % % list_na]. Цей код повертатиме ім'я стовпця
з об'єкта list_na (тобто, “вік” та “вартість проїзду”)
 2: обчислити функцію за стовпцями
 mean: обчислити середнє
 na.rm = TRUE: ігнорувати пропущені значення
Крок 3) Замінити значення NA

df_titanic_replace <- df_titanic %>%


mutate (replace_mean_age = ifelse(is.na(Age), average_missing[1], Age),
replace_mean_fare = ifelse(is.na(Fare), average_missing[2], Fare))

 створені дві змінні replace_mean_age та replace_mean_fare:


1. replace_mean_age = ifelse(is.na(Age), average_missing[1], Age),
2. replace_mean_fare = ifelse(is.na(Fare), average_missing[2], Fare)
 Крок 4) Заміна відсутніх значень медіаною.

> median_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],


2,
median,
na.rm = TRUE)

> df_titanic_replace <- df_titanic %>%

> mutate (replace_median_age = ifelse(is.na(Age), median_missing[1], Age),


replace_median_fare = ifelse(is.na(Fare), median_missing[2], Fare))
3. Експорт даних в R
 Зберігати дані можемо:
 Жорсткий диск
 Гугл драйв
 Dropbox
 R дозволяє користувачам експортувати дані до різних типів файлів:
 CSV
 XLSX
 RDS
 SAV
 SPSS
 STATA

Експорт на жорсткий диск


 У робочий каталог
Експорт CSV
 Створимо набір даних про працівників.

 Експортуємо створений набір даних у файл CSV за допомогою функції write.csv().


write.csv(df_employees, "employees.csv")
Експорт у файл Excel
install.packages("xlsx")
library(xlsx)

write.xlsx(df_employees, "employees.xlsx")

Експорт даних в інші формати файлів


library(haven)

write_sav(df_employees, "employees.sav")
write_sas(df_employees, "employees.sas7bdat")
write_dta(df_employees, "employees.dta")
Експорт файлу на Google Диску
 Потрібно встановити бібліотеку googledrive для доступу до функції, що дозволяє взаємодіяти
з Google Drive.
install.packages("googledrive")
library(googledrive)

 Для завантаження файлу на Google Диск використовуємо функцію drive_upload ():


drive_upload("table_car.sav", name = "table_car")
 Вводите 1 у консолі, щоб підтвердити доступ до облікового запису, або 0 для обрання іншого:
 Отримуємо дентифікатор файлу:

Можете побачити цей файл у Google Spreadsheet.


 Завантажити файл із Google Drive з ідентифікатором зручно. Якщо знаєте ім'я файлу, можете
отримати його ідентифікатор:

x <-drive_get("table_car")
as_id(x)
4. Імпорт даних у R
 Одним із найпоширеніших сховищ даних є формати файлів csv.
 Для відкриття CSV-файлів використовуємо read.csv:

 file: PATH, де зберігається файл


 header: підтвердить, чи має файл заголовок чи ні, за замовчуванням заголовок
встановлений у TRUE
 sep: символ, який використовується для розділення даних. За замовчуванням «,».

 Зверніть увагу, що завжди потрібно вказувати на розширення в імені файлу:


 .csv
 .xlsx
 .txt
 …
Читання файлів Excel

 В R є бібліотека readxl для імпорту електронних таблиць Excel:


library(readxl)

 Використуємо приклади, які включені в readxl, побачимо всі доступні таблиці у


бібліотеці:
 Для перевірки розташування таблиці з ім'ям geometry.xls, використаємо:

 Функція read_excel() використовується для відкриття файлів з розширенями xls та xlsx.

read_excel(PATH, sheet = NULL, range= NULL, col_names = TRUE)

•PATH: шлях до файлу Excel


•sheet: виберіть лист для імпорту. За замовчуванням усі.
•range: виберіть діапазон для імпорту. За замовчуванням усі ненульові клітинки.
•col_names: виберіть стовпці для імпорту. За замовчуванням усі ненульові стовпці.
excel_sheets ()
 Дізнатися, які листи доступні в книзі, використовуючи функцію excel_sheets():

 Якщо робоча книга включає багато листів, вибрати конкретний лист, використовуючи
назву листа або його індекс.
 Контроль діапазону читання.
1) Використовуємо аргумент n_max для повернення n рядків
2) Використовуйте аргумент діапазону разом із cell_rows або cell_cols.

 Наприклад
 Якщо col_names=FALSE, R автоматично створить заголовки.
 Вибрати діапазон від A1 до B5:
 Використаємо range = cell_rows (1: 5), заголовки присутні.
Імпорт даних із іншого статистичного програмного
забезпечення

 Наступні функції використовують для відкриття файлів цих типів відповідно до


розширення файлу:
 SAS: read_sas()
 STATA: read_stata()
 SPSS: read_sav() або read_por().
 Ця функція має лише один аргумент. Нам потрібно знати ШЛЯХ, де зберігається файл,
також приймають URL-адресу.
Читаємо формат SAS
 library(haven)
 PATH_sas <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.sas7bdat?raw=true'
 df <- read_sas(PATH_sas)
 head(df)
Читаємо формат STATA

 PATH_stata <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.dta?raw=true'


 df <- read_dta(PATH_stata)
 head(df)
Читаємо формат SPSS

 PATH_spss <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.sav?raw=true'


 df <- read_sav(PATH_spss)
 head(df)
Висновки

Аргументи за
Бібліотека Завдання функція
замовчуванням

file, header =, TRUE,


utils Читати файл CSV read.csv ()
sep = “,”

шлях, діапазон =
readxl Читати файл EXCEL read_excel() NULL, col_names =
TRUE

haven Читати файл SAS read_sas() шлях

haven Читати файл STATA read_stata() шлях

haven Читати файл SPSS read_sav() шлях


Різні способи імпорту вибору за допомогою функції
read_excel()

функція цілі аргументи

read_excel() Вибрати кількість рядків n_max = 10

Вибрати діапазон
range = "A1: D10"
комірок
Вибрати рядки з
range = cell_rows (1: 3)
індексами
Вибрати стовпці з
range = cell_cols (“A: C”)
літерами
Імпорт файлу з Google Диску
 Ви зберегли ідентифікатор змінної x. Функція drive_download() дозволяє завантажувати
файл із Google Drive.

drive_download(as_id(x), overwrite = TRUE)

 Файл зберігається у вашому робочому каталозі.


Імпорт з реляційних баз даних

 Пакет DBI забезпечує загальний інтерфейс, що дозволяє dbplyr працювати з багатьма


різними базами даних.
 DBI автоматично встановлюється за допомогою dbplyr, але необхідно окремо встановити
конкретний бекенд для бази даних, до якої хочемо підключитися:
– RMySQL підключається до MySQL та MariaDB;
– RPostgreSQL підключається до Postgres та Redshift;
– RSQLite вбудовує SQLite-базу даних;
– Odbc підключається до багатьох комерційних баз даних через протокол відкритої
бази даних;
– Bigrquery підключається до Google BigQuery.
 Для експериментів з БД найпростіше почати з SQLite, оскільки все необхідне включено
до стандартного пакету R. Задаємо шлях і зазначаємо, що потрібно створити нову БД:

library(dbplyr)
library(dplyr)
library(RSQLite)

my_db <- src_sqlite("my_db.sqlite3", create = T)

 src – колекція таблиць (src_sqlite(), src_mysql(), src_postgres(), src_bigquery()) для


з'єднання з різними базами даних, які підтримуються в dplyr.
 База даних my_db зараз не містить даних, тому завантажимо туди дані flights (зі
стандартного набору) з використанням функції copy_to().

library(nycflights13)
flights_sqlite1 <- copy_to(my_db, flights, temporary = FALSE,
indexes = list(c("year", "month", "day"), "carrier", "tailnum"))
SELECT – вибирати дані

 select(flights_sqlite, year:day, dep_delay, arr_delay)


FILTER – фільтрувати дані за умовою

 filter(flights_sqlite, dep_delay > 240)


ARRANGE - упорядкувати рядки за змінними

 arrange(flights_sqlite, year, month, day)


MUTATE – додавати нові змінні

 mutate(flights_sqlite, speed = air_time / distance)

You might also like