You are on page 1of 53

Дослідження та аналіз даних

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

1. Об’єднання фреймів даних


2. Пакет Dplyr
3. Data Manipulation
4. Дослідження та очищення даних
5. Пакет Tidyr
6. Розгалуження
7. Цикли
8. Функції apply(), sapply(), lapply(), tapply() в R
9. Парадокс Сімпсона
1. Об’єднання фреймів даних

Аналіз даних можна поділити на три етапи

•Вилучення даних: потрібно зібрати дані з багатьох джерел та об'єднати їх.

•Перетворення даних: включає очищення та маніпулювання даними.

•Візуалізація даних: візуалізація даних після проведеного аналізу.


Об’єднання фреймів даних

 Декілька джерел даних


 Щоб виконати аналіз, потрібно об'єднати фрейми даних разом за
однією або декількома загальними ключовими змінними.
 Таке об’єднання може бути:
1. Повне співпадіння повертає значення, які мають аналог у
таблиці призначення. Значення, які не співпадають, не будуть
повернені до нового фрейму даних.
2. Часткове співпадіння повертає відсутні значення (NA).
Повне співпадіння

 Для об'єднання двох наборів даних можемо використовувати функцію merge().

 x: перший фрейм даних


 y: фрейм даних для об’єднання
 by.x: стовпець, який використовується для об’єднання фрейму даних x.
Стовпець x для об’єднання
 by.y: стовпець, який використовується для об’єднання у фреймі даних y.
Стовпець y для об’єднання
 Приклад. Створити перший набір даних із змінними прізвище та національність
продюсерів. Створити другий набір даних із змінними прізвище продюсера та його фільми.
 Загальною ключовою змінною є прізвище.
 Об'єднаємо фрейми даних з різними іменами ключових змінних.
 Змінюємо прізвище на ім'я у фреймі даних фільмів.

 Використовуємо функцію identifier(x1, x2), щоб перевірити, чи ідентичні


обидва фрейма даних.
Часткове співпадіння

Розмірність нового фрейму даних 8×3 проте 7×3 для m1 і m2.


R включає NA для зниклого автора у фреймі даних книг.
2. Пакет Dplyr
R має пакет dplyr для маніпулювання та очищення даних:

https://cran.r-project.org/web/packages/dplyr/
3. Маніпуляції з даними в Dplyr.

 Зручність dplyr в тому, що він обробляє такі типи з'єднань:


1) Left_join()
2) Right_join()
3) Inner_join()
4) Full_join()
5) Semi_join()
6) Anti_join()

Розглянемо всі типи з'єднань на прикладах.


 Насамперед, побудуємо два набори даних.
 Таблиця 1 містить дві змінні, ID та y, тоді як Таблиця 2 збирає ID та z. У кожній
ситуації нам потрібна змінна пара ключів. У нашому випадку ID
є ключовою змінною.
left_join ()

left_join(df_primary, df_secondary, by ='ID')


right_join ()

right_join(df_primary, df_secondary, by = 'ID')


Inner_join ()

inner_join(df_primary, df_secondary, by ='ID')


full_join()
 Функція full_join() зберігає всі спостереження та замінює відсутні значення на NA.

full_join(df_primary, df_secondary, by = 'ID')


semi_join(), anti_join()
 Результат semi_join міститиме лише ті рядки з першого набору даних, для
яких є відповідні у другому.
 Результат anti_join - лише ті рядки з першого набору даних, для яких немає
відповідні у другому.
4. Очищення даних в Dplyr

 head() - відображає першу частину об'єкта:

 tail() відображає останню частину структури даних:

 names() – отримання імен змінних у структурі даних:


 Функція glimpse() – узагальнена інформація про структуру даних.
Вбудовані набори даних

datasets.xlsx
 Набір даних iris (іриси Фішера) - містить 150 вимірювань за 3 різними видами
ірисів та 4 атрибутами (довжина і ширина зовнішньої частки оцвітини та
довжина і ширина внутрішньої частки оцвітини).
 Набір даних mtcars — містить 32 вимірювання різних автомобілів за 11
атрибутами.
mpg Милі/(США) галон

cyl Кількість циліндрів


disp Об’єм двигуна (куб.дюйм)

hp Загальна потужність
wt Вага (1000 фунтів)
vs Двигун

am Коробка передач (0 = автоматична, 1 = ручна)

gear Кількість передач переднього ходу

… …
Кількість входжень у структурі даних

 Функція count() – рахує кількість входжень у структурі даних.


 Наприклад, кількість кожного виду ірисів у наборі даних.
Вибірка даних та додавання нових змінних до структури даних
1. Вибрати перши три записи довжини і ширини зовнішньої частки оцвітини та
довжини внутрішньої частки оцвітини ірисів.

2. Створити новий стовпець, який зберігає логічні значення для ширини


зовнішньої частки оцвітини, якщо вона більше за половину довжини
зовнішньої частки оцвітини ірису.
Впорядкування даних

 Впорядкувати за зростанням ширини внутрішньої частки оцвітини ірису.


Фільтрування даних за умовою
1. Виберемо перших десять записів виду «virginica» ірисів.

2. Виберемо останні три записи ірисів, що не виду «setosa» та довжиною зовнішньої


частки оцвітини іриса більше 5.
 Якщо потрібно виконати послідовно кілька операцій в dplyr можна використати
«конвеєрний» оператор %>%, який дозволяє застосувати наступну команду до
результатів виконання поточної.
 Наприклад,
1. Відфільтруємо набір даних про авто за кількістю циліндрів, що дорівнює 6, та
вагою менше 3.440.

2. Додаємо ще підрахунок кількості таких авто залежно від виду коробки передач
та виведемо цей список за зростанням.
https://cran.r-project.org/web/packages/tidyr/index.html
4. Пакет Tidyr
 Чотири функції для створення охайних даних з пакету Tidyr:
1) gather(): перетворення даних з широких на довгі
2) spread(): перетворення даних з довгих на широкі
3) separete(): розділити одну змінну на дві
4) unit(): об'єднати дві змінні в одну
 Пакет Tidyr належить до колекції пакетів для маніпулювання та очищення
даних.
install.packages (“tidyr”) Довгі дані подані таким чином, що є
один стовпчик, що містить усі
значення, та інший, де подано
контекст значення.
Широкі дані подані таким чином,
що кожна змінна даних має
окремий стовпчик.
gather(), spread()

 Data: фрейм даних


 Key: назва нового стовпця, що створюється
 Value: назва стовпця зі значеннями
 Na.rm: Якщо TRUE, буде видалено рядки, в яких містяться відсутні
значення (NA).
 Приклад 1. збирання значень з двох стовпців
df <- data.frame(player=c('A', 'B', 'C', 'D'),
year1=c(12, 15, 19, 19),
year2=c(22, 29, 18, 12))

gather(df, key="year", value="points", 2:3)


 Приклад 2. Збір значень більш ніж з двох стовпців.
 Data: фрейм даних, який будемо змінювати
 Key: стовпець, значення якого стануть іменами змінних
 Value: стовпець, з якого значення будуть заповнені у нові змінні

 Приклад розподілення значень одного стовпця у два стовпця

щоб перетворити значення


в стовпці stat у власні
стовпці
separate()

 data: назва фрейму даних


 col: назва стовпця, який потрібно розділити
 into: Ім'я нових змінних
 sep: значення для розділення стовпця
 remove: видалити старий стовпець. За замовчуванням встановлено значення TRUE
Приклад розділення стовпця «stats» на два нових «points» та «assists»:
unite()

 data : назва фрейму даних


 col : назва нового об’єднаного стовпця
 conc: вектор імен для об’єднаних стовпців
 sep: вид роздільника в об’єднаному стовпці

 Приклад об’єднання двох стовпців «points» і «assists» в один «points-assists»


Об'єднати більше двох стовпців
5. Розгалуження
Оператор if-else
Оператор ifelse

ifelse(умова, yes, no)


Оператор switch

switch(керуючий вираз, альтернативні дії)


 Приклад. Створити числовий вектор x довжини 5, елементи
якого приймають значення залежно від значення i або cos(π), або
e, або log2(4), або log10(0.01), або число, що відповідає логічному
значенню TRUE.
6. Цикли
Оператор циклу for
 Цикл може використовуватися для ітерації за списком, фреймом даних,
вектором, матрицею.

for(змінна in послідовність) вираз

 Приклад.
Для циклу над списком

• Зациклювання списку так само просто та зручно, як зациклювання вектора.

Для циклу над матрицею

•Матриця має двомірність, рядки та стовпці. Щоб перебрати матрицю, визначаємо два цикли for,
один для рядків, інший для стовпця.
Оператор while

while(умова) вираз
Оператор repeat
repeat вираз

 Для виходу із цього циклу потрібно використати break, а також умовний


оператор у якості одного з виразів.
 Приклад.
7. apply(), sapply(), lapply(), tapply() в R

 Колекцію функцій apply можна розглядати як заміну циклу.


 Колекція apply встановлюється з основним пакетом r.

 Якщо маємо великий обсяг впорядкованих даних для обробки.


 Якщо використовуємо фрейм даних (data frame), всі дані повинні мати той
самий тип, в іншому випадку буде застосовано перетворення.
 Якщо у фреймі даних є символьні та числові дані, числові дані будуть
приведені до символьного типу, і операції над числами можуть видавати
неочікувані результати.
apply()

 apply () приймає фрейм даних або матрицю як вхідні дані і дає вихід у векторі,
списку або масиві.

apply(X, MARGIN, FUN)


•x: масив або матриця
•MARGIN: вказується значення або діапазон значень
•MARGIN=1: маніпуляція виконується над рядками
•MARGIN=2`: маніпуляція виконується над стовпцями
•MARGIN=c(1,2): маніпуляція виконується над рядками та стовпцями
•FUN: вказуємо функцію, яку використали, наприклад, mean, median, sum,
min, max та функцію створену користувачем
lapply()
 lapply() приймає список, вектор або фрейм даних як вхідні дані і виводить їх у
вигляді списку.
 lappy() повертає список такої ж довжини, як і об'єкт введення, кожен елемент
якого є результатом застосування FUN до відповідного елемента списку.

lapply(X, FUN)

•X: вектор, список або фрейм даних


•FUN: функція, що застосовується до кожного елементу х
 Прикладом може бути заміна рядкового значення матриці в нижній регістр за
допомогою функції tolower().
 Побудуємо матрицю з назвами відомих фільмів. Назви введемо у верхньому
регістрі.

 Зкористаємось функцією unlist() для перетворення списку на вектор.


sapply()

 Функція sapply() приймає список, вектор або фрейм даних як вхідні дані і
виводить їх у вигляді вектора.
 Функція sapply() виконує ту ж функцію, що й функція lapply(), але повертає
вектор.

sapply(X, FUN)

•X: список, вектор або фрейм даних


•FUN: функція, що застосовується до кожного елементу х
 Приклад, здійснимо вимір мінімальної швидкості і гальмівного шляху
автомобілів з набору даних автомобілів.

Використання у користувацьких функціях


lapply() або sapply().
Створимо функцію avg для обчислення середньої
швидкості та гальмівного шляху.
Різниця між apply(), sapply() та lapply()

ФУНКЦІЯ АРГУМЕНТИ ЗАВДАННЯ ВХІДНІ ДАНІ ВИХІДНІ ДАНІ

Застосувати
apply(X, MARGIN, FUN) функцію до рядків вектор,
Фрейм даних
apply() або стовпців або список,
чи матриця
по рядкам та масив
стовпцям

Застосувати
Список,
функцію до всіх
lapply() lapply(X, FUN) вектор або список
елементів
фрейм даних
введення

Застосувати
Список,
функцію до всіх вектор або
sapply() sapply(X, FUN) вектор або
елементів матриця
фрейм даних
введення
tapply()
 tapply() обчислює міру (середнє, медіану, мінімальне, максимальне тощо)
або функцію для кожної факторної змінної у векторі.
 Корисна функція, яка дозволяє створити підмножину вектора, а потім
застосувати деякі функції до кожної підмножини.

tapply(X, INDEX, FUN = NULL)

•X: вектор, фрейм даних


•INDEX: список, що містить фактор
•FUN: функція, застосована до кожного елемента x
Приклад
Стандартна форма визначення функції в R.
 Загальний вид оператора визначення функції:

function(аргументи) {вираз}
 аргументи функції – список формальних аргументів (може мати довільну довжину), від яких залежить
вираз; аргументи розділяються комами. Формальним аргументом може бути: символ, вираз виду
символ=вираз, спеціальний формальний аргумент – три крапки «…»;
 вираз (тіло функції) – команда або блок команд (укладених у фігурні дужки {}), які залежать від
визначених раніше аргументів функції. Окремі команди в блоці пишуться з нового рядка (але можна й
на одному рядку через символ «;»).
 Функція як своє значення повертає результат останнього у фігурних дужках виразу.
 Звертання до функції має вигляд ім’я(арг1, арг2, ... ). Тут значення виразів арг1, арг2, ... є
фактичними аргументами, які підставляються замість відповідних формальних аргументів, визначених
при заданні функції.
 Приклад. Створимо функцію, що обчислює норму – квадратний корінь скалярного добутку векторів
x і y.
Функції перетворення для типів даних в R
Назва функції Опис
as.numeric() Перетворення будь-якого типу даних у дійсний тип даних
as.integer() Перетворення будь-якого типу даних у цілий тип даних
as.character() Перетворення будь-якого типу даних у символьний тип
даних
as.logical() Щоб порівняти змінні та перетворити будь-яке значення на
true або false.

as.date() Перетворення рядка у формат дати


Функції перетворення для структур даних в R
Назва функції Опис
as.data.frame() перетворити список векторів у data.frame

as.vector() перетворення матриці у вектор

as.matrix() перетворення структур даних у матрицю


8.Парадокс Сімпсона
 Едварда Сімпсона, 1951 рік.
 університет Берклі в 1973 році звинуватили в гендерній нерівності.

You might also like