Що таке tidy data
Структуруємо дані
Дата-саєнтисти кажуть, що 80 % часу витрачають на підготовку даних, а на аналіз — лише 20 %. Якісна інформація дає змогу побудувати ефективну модель і провести точні обчислення.
Розповідаємо, у чому суть tidy data і як спростити структурування даних.
Хто описав концепцію tidy data
Термін запровадив дата-саєнтист Гедлі Вікем у 2014 році.
Вікем — творець кількох десятків бібліотек для мови R. У публікації для JSS (Journal of Statistical Software) він каже, що tidy data (охайні дані) — це стандартизований спосіб з’єднати структуру набору даних і його семантику. Іншими словами — фізичне втілення інформації (наприклад, у вигляді таблиці) і значення в наборі даних (числа, назви, номери, характеристики). Кожне значення залежить від двох параметрів: змінної та спостереження. Змінна — це одна характеристика набору даних (наприклад, вік, місто, професія). Спостереження — це групування значень змінних за однією спільною ознакою. Наприклад, інформація про одну людину.
У більшості датасетів дані — у вигляді таблиць. Вікем вказує три умови, за яких дані називають охайними (tidy).
#1. Усі змінні створюють стовпці.
#2. Усі спостереження створюють рядки.
#3. Кожен тип спостереження створює одну таблицю.

Джерело: Displayr
Якщо будь-яку з умов порушено, то дані вважають неохайними (dirty data).
Більшість завдань дата-аналітиків зосереджена на масивах інформації, операції з якими вимагають різних інструментів і команд. Іноді обробку даних ускладнюють аномалії БД:
- модифікації (зміна даних впливає на інші записи з таблиці);
- видалення (за видалення стовпця зникає інформація, не пов’язана з ним безпосередньо);
- додавання (неможливість додати інформацію в базу).
Якщо формат даних правильний, аномалії не проявляються.
Використання інструментів, які під час обробки створюють охайні дані, скорочує час на рефакторинг БД. Його основне завдання — спрощення роботи з моделлю без зміни функцій. Зазвичай він потрібний у роботі з таблицями, у яких занадто велика кількість рядків або стовпців для баз конкретного типу або міститься різнорідна чи несортована інформація. Більшість цих проблем усуває tidy data.
Охайні дані добре працюють з R, тому що це векторна мова програмування. Інформація в R зберігається у вигляді кадрів даних. Якщо ваші дані охайні, показники кожної змінної потрапляють у власний вектор стовпця.
Неструктуровані дані не виконують одну або більше умов «охайності». Вікем виділяє п’ять ознак безладної інформації:
- Одиниця спостереження наявна в різних таблицях.
Приклад: у каталозі бібліотеки інформація про книгу міститься одночасно в таблицях «зарубіжна література» і «класика». - В одній таблиці — багато типів спостереження.
Приклад: в одному файлі міститься і список книг, і список відвідувачів. - І в рядках, і в стовпцях записано змінні.
Приклад: у рядках каталогу, де міститься інформація про назву книги, помилково вказано видавництво. Таким чином, зіставляються дві змінні, а не спостереження і змінна. - В одному стовпці — кілька показників.
Приклад: у стовпці «автор книги» також є інформація про рік друку. - Заголовки стовпців — це значення, а не імена змінних.
Приклад: у списку книг створено стовпці «1997» і «1998», які можна об’єднати в одну змінну — «рік».
Як поліпшити дані: R vs Python
Є різні плагіни для нормалізації даних. Tidyverse — у десятці найпопулярніших бібліотек для R. Її теж створив Гедлі Вікем.
Це бібліотека з простим синтаксисом. Вона схожа на мову SQL.
Tidyverse складається з восьми пакетів: ggplot2, dplyr, tidyr, readr, purrr, tibble, strinf, forcatcs. Пакети відрізняються функціоналом виконання завдань, але мають спільний дизайн, граматику і структуру.
Наприклад, ggplot2 використовують для створення графіки та візуалізації даних, purrr — для роботи з функціями та векторами, а tidyr — для нормалізації охайних даних.
Крім того, в R є власний репозиторій з відкритим кодом CRAN (Comprehensive R Archive Network) із 17 тис. пакетів.
Основні функції для очищення даних у tidyr:
#1. Pivotting — функція перетворення даних із широкого формату в довгий і навпаки (за допомогою команд pivot_longer() і pivot_wider()).
Функцію використовують, наприклад, у випадках, коли заголовки стовпців — не змінні, а їхні значення (у таблиці — дванадцять стовпчиків із назвою місяців, хоча це одна змінна — рік або дата). Застосовуємо команду pivot_longer(), щоб «подовжити» таблицю і скоротити кількість стовпців.
pivot_wider() задіюють, якщо кілька змінних розташовано в одному стовпчику (наприклад, дані про зріст і вагу не розділені). За допомогою цієї команди можна «розширити» таблицю.
#2. Fill — функція заповнення пропусків значеннями з наявних записів стовпця. Команда — Fill(). Для функції також можна задавати напрямок «вгору» або «вниз». Тоді автозаповнення використовуватиме попередній або наступний показник у стовпці.
#3. Unite — функція, яка об’єднує кілька клітинок в одне поле, команда — unite().
#4. Separate — функція, протилежна unite. Команда separate() розділяє поле на кілька клітинок.
#5. Nested data
Команда nest() створює стовпчик-список із фреймом даних з однієї групи або таблиці. Таким чином можна порівнювати набори даних, отримати швидкий доступ до датасету або коротку довідку про інформацію в ньому. Команда unnest() розкриває всю інформацію про набір.
У Python теж можна структурувати дані, працюючи з бібліотекою pandas.
Основні функції для очищення даних у pandas:
#1. Drop() — видалення зайвих стовпців і рядів. Також за допомогою функції можна видаляти вибіркову інформацію. Для цього потрібно прописати команду, щоб усунути поля, які містять певні мітки. Наприклад, числові або текстові показники.
#2. Merge() — об’єднання інформації з декількох таблиць в одну.
#3. Stack() — це команда для «розкриття» таблиці та конвертування колонок у рядки. Зворотною є команда Unstack(), яка «згортає» рядки в колонки.
#4. Melt() — функція, яка перетворює формат даних — з широкого в довгий.
#5. Pivot() — створення зведених таблиць. Застосовуючи цю команду, можна групувати дані за змінними, створюючи багаторівневі таблиці. Наприклад, відібрати з каталогу друкованих видань тільки щорічні британські журнали про географію, використовуючи параметри змінних.
Яку б мову ви не обрали, створення охайних даних заощадить ваш час.