Організовані процеси очищення даних


34

З мого обмеженого спілкування з інформацією про використання R, я зрозумів, що очищення поганих даних є дуже важливою частиною підготовки даних до аналізу.

Чи є найкращі практики чи процеси очищення даних перед їх обробкою? Якщо так, чи є автоматизовані або напівавтоматизовані інструменти, які реалізують деякі з цих найкращих практик?


1
напевно, це гарна ідея трохи зрозуміти, що ви маєте на увазі під очищенням даних , на мою думку виглядає трохи заплутано
MolbOrg

2
Подальше пояснення, що означають дані очищення, було б корисним. У контексті, де я працюю, очищення не має нічого спільного з форматуванням - я б просто закликав цей аналіз / імпорт - Але це означало б говорити галасливі дані користувачів та перевіряти їх на узгодженість. Використовувані методи є специфічними для набору даних, від простих статистичних правил, до нечітких алгоритмів, особливо коли дані є рідкими.
АдріанБР

Відповіді:


21

R містить деякі стандартні функції для обробки даних, які можна використовувати для очищення даних, у своєму базовому пакеті ( gsub, transformтощо), а також у різних сторонніх пакетах, таких як stringr , reshape / reshape2 та plyr / dplyr . Приклади та кращі практики використання цих пакунків та їх функцій описані в наступній роботі: http://vita.had.co.nz/papers/tidy-data.pdf .

Крім того, R пропонує деякі пакети, спеціально орієнтовані на очищення та трансформацію даних:

Комплексний та узгоджений підхід до очищення даних в R, включаючи приклади та використання команд редагування та дедукційного виправлення , а також опис робочого процесу ( рамки ) очищення даних в R, представлений у наступному документі, який я настійно рекомендую: http : //cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf .


2
Я також додам dplyr, що це оптимізоване перефразовування певних plyrінструментів, а data.tableце зовсім інший підхід до маніпулювання даними. Обоє - Хедлі Вікхем.
shadowtalker

@ssdecontrol: Я згоден - відповідь оновлена. Хедлі є автором dplyrпакету, але не data.tableодного.
Олександр Блех

16

З моєї точки зору, це питання підходить для відповіді на два кроки. Перша частина, назвемо це м'якою попередньою обробкою , може сприйматися як використання різних алгоритмів виведення даних для попередньої обробки даних таким чином, що робить її придатною для подальшого аналізу. Зауважте, що це може бути сам аналіз, якщо мета досить проста, щоб її можна було вирішити в одному кадрі.

Друга частина, жорстка попередня обробка , насправді відбувається перед будь-яким іншим процесом і може сприйматися як використання простих інструментів або скриптів для очищення даних, вибору конкретного вмісту для обробки. До цієї проблеми POSIX надає нам чудовий набір магічних інструментів, за допомогою яких можна складати стислі та дуже потужні сценарії попередньої обробки.

Наприклад, для людей, які мають справу з даними, що надходять із соціальних веб-сайтів (twitter, facebook, ...), для пошуку даних зазвичай виходять файли із дуже конкретним форматом - хоча і не завжди добре структуровані, оскільки вони можуть містити пропущені поля тощо. . У цих випадках простий awkскрипт може очистити дані, створивши дійсний вхідний файл для подальшої обробки. З безлічі чарівному, можна також відзначити grep, sed, cut, join, paste, sort, і все безліч інших інструментів.

У випадку, якщо у простому вихідному файлі є занадто багато азотистих пісень, може знадобитися також створити пакет методів очищення даних. У таких випадках зазвичай краще використовувати мови скриптів (крім оболонок), такі як Python, Ruby та Perl. Це дозволяє будувати API для вибору конкретних даних дуже простим та багаторазовим способом. Такі API іноді оприлюднюються своїми письменниками, такими як IMDbPY , API обміну стеками та багато інших.

Отже, відповідаючи на питання: чи є найкращі практики? Зазвичай це залежить від вашого завдання. Якщо ви завжди матимете один і той же формат даних, зазвичай краще написати впорядкований скрипт для його попередньої обробки; тоді як, якщо вам просто потрібна проста і швидка очистка на якомусь наборі даних, розраховуйте на інструменти POSIX для стислих скриптів оболонки, які виконають всю роботу набагато швидше, ніж сценарій Python тощо. Оскільки очищення залежить як від набору даних, так і від ваших цілей, важко все вже зробити. Тим не менш, є багато API, які ставлять вас на півдорозі з проблемою.


hm - отримати дані, форматувати дані (awk sed grep stuff), видалити шум як перший крок, а потім заглибитись. так чи не важко попередня обробка приходить спочатку, якщо використовувати ваші терми
MolbOrg

@MolbOrg Так, саме це я мав на увазі. Я назвав жорсткий попередньої обробки на стороні сценаріїв , і м'який предобработки використання алгоритмів інтелектуального аналізу даних, як правило , зменшити розмір проблеми (очищає базу даних). Я також зазначив, що друга частина, жорстка попередня обробка, насправді відбувається перед будь-яким іншим процесом . Якщо з такими термінами це не зовсім зрозуміло, я б радий розглянути будь-які інші пропозиції щодо покращення відповіді.
Рубенс

1
ах так, не приділяли належної уваги, необроблені дані попередньої обробки . Випробуваний атм - так, perl oneliner в 3 рази повільніше, ніж греп) для струн 3,5 кк у 300 Мб, для perl потрібно 1,1 сек, для грепу 0,31 сек. Я побачив статтю, де точки, що perge regexp повільно, набагато повільніше, ніж це може бути на практиці (я підозрюю, що це теж для grep) http://swtch.com/~rsc/regexp/regexp1.html
MolbOrg,

@MolbOrg Приємна довідка! AFAIK grepвикористовує базовий регулярний вираз по POSIX за замовчуванням і дозволяє розширювати регулярні вирази POSIX при запуску як grep -Eі для PCRE при запуску як grep -P.
Рубенс

1
Це дуже хороший пост. R відмінно підходить для обробки даних, але може бути досить громіздким при очищенні даних через багатослівний синтаксис для маніпуляцій з рядками та досить жорстке дотримання списків та матриць для структур даних.
shadowtalker

11

Однією з причин того, що чистка даних рідко є повністю автоматизованою, полягає в тому, що потрібно стільки суджень, щоб визначити, що означає "чистий", враховуючи вашу конкретну проблему, методи та цілі.

Це може бути таким же простим, як введення значень для будь-яких відсутніх даних, або може бути таким же складним, як діагностування помилок введення даних або помилок перетворення даних з попередніх автоматизованих процесів (наприклад, кодування, цензури, перетворення). У цих останніх двох випадках дані виглядають добре зовнішнім виглядом, але це дійсно помилково. Такий діагноз часто вимагає ручного аналізу та обстеження, а також позадіапазонної інформації, такої як інформація про джерела даних та методи, які вони використовували.

Крім того, деякі методи аналізу даних краще працюють, коли помилкові або відсутні дані залишаються порожніми (або N / A), а не імпульсуються або надається значення за замовчуванням. Це вірно, коли є явні уявлення про невизначеність та незнання, наприклад, функції віри Демпстера-Шафера.

Нарешті, корисно мати специфічну діагностику та показники для процесу очищення. Чи відсутні випадкові або помилкові значення, розподілені випадковим чином, або вони зосереджені будь-яким чином, що може вплинути на результат аналізу. Корисно перевірити вплив альтернативних стратегій чи алгоритмів очищення, щоб побачити, чи впливають вони на кінцеві результати.

Враховуючи ці побоювання, я дуже підозріло ставляться до будь-якого методу чи процесу, який обробляє очищення даних поверхнево, кавалерно або повністю автоматизовано. У цих деталях ховається багато чортів, і це приділяє їм серйозну увагу.


1
В якості побічного коментаря: я думаю, що виявлення помилкових даних, викликаних певною проблемою в майбутньому, є золотим майстерністю. Я багато разів замислювався над тим, чому мій аналіз дав дивні результати, і коли я подивився на конвеєр, я виявив якусь помилку. Напр .: Мені було цікаво, чому всі мої дані, коли вони сильно перекошені у бік високих цін, - ВІДМОВЛЕННЯ своєї ментальної моделі. Коли я поцікавився, я дізнався, що хтось із субпідрядників неправильно зрозумів інструктаж та надав дані для груп з високим рівнем доходу, тоді як ми бажали змішаних даних ...
Крістіан Зауер

Так! Помилки даних часто є ознаками проблем процесу. Знання, де в процесі були введені помилки, а також механізм, значно допоможе в процесі очищення. Але краще все-таки виправити проблеми з процесом, щоб вони видавали чисті (чистіші) дані.
MrMeritology

5

Про автоматичне очищення: Ви дійсно не можете автоматично очистити дані, оскільки кількість помилок та визначення помилки часто залежать від даних. Напр .: Ваш стовпець "Дохід" може містити негативні значення, які є помилкою. Ви повинні щось робити у випадках. З іншого боку, стовпець "щомісячні заощадження" може розумно містити негативні значення.

Такі помилки дуже залежать від домену - тому, щоб їх знайти, ви повинні мати доменні знання, те, на чому людина перевершує, автоматизованих процесів не так багато.

Де можна повторити проекти, де можна і потрібно автоматизувати. Наприклад, звіт, який повинен складати щомісяця. Якщо ви виявите помилки, вам слід встановити автоматизований процес, який може виявити подібні помилки в наступні місяці, звільняючи час.


5

Я думаю, що не існує універсальної техніки "очищення" даних, перш ніж проводити фактичні дослідження. З іншого боку, я прагну зробити якомога більше відтворюваних досліджень . Проводячи відтворювані дослідження, якщо ви використовували методи очищення від помилок або з поганими параметрами / припущеннями, вони можуть виявити інші.

Є приємний плеєр пакету R, який дуже допомагає у відтворюваних дослідженнях.

Звичайно, не всі дослідження можуть бути повністю відтворені (наприклад, живі дані Twitter), але принаймні ви можете легко документувати етапи очищення, форматування та попередньої обробки.

Ви можете перевірити мою оцінку, підготовлену до курсу «Відтворювальне дослідження» в Курсі .


3

OpenRefine (раніше Google Refine) - це чудовий інструмент, де можна інтерактивно проводити очищення та перетворення даних. Ваш кінцевий вихід може бути експортований до різноманітних стандартних форматів (json, csv) або до будь-якого спеціального формату (наприклад: wiki).

Точні дублікати можна обробляти в OpenRefine шляхом сортування + за допомогою функції "пусто". Крім того, він має приблизну (нечітку) функцію кластеризації, де ви можете згрупувати схожі дублікати, такі як назви компаній або адреси. Сама ця функція робить її приголомшливою.


1
Це фантастичний недоотриманий інструмент.
thanks_in_advance

2

Цьому курсу присвячений Курсера. Можливо, ви захочете перейти техники, про які вони згадують, і важливою частиною є знати, коли використовувати.

https://www.coursera.org/learn/data-cleaning

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.