Организованные процессы для очистки данных

34

Из моего ограниченного увлечения наукой данных с использованием R я понял, что очистка плохих данных является очень важной частью подготовки данных для анализа.

Существуют ли передовые практики или процессы для очистки данных перед их обработкой? Если да, существуют ли какие-либо автоматизированные или полуавтоматические инструменты, которые реализуют некоторые из этих передовых методов?

Джей Годсе
источник
1
вероятно, это хорошая идея, чтобы немного очистить, что вы имеете в виду под очисткой данных , на мой взгляд, выглядит немного запутанно
MolbOrg
2
Было бы полезно объяснить, что означают данные очистки. В контексте, где я работаю, очистка не имеет ничего общего с форматированием - я бы просто назвал это синтаксическим анализом / импортом - но скорее это означало бы разговор с зашумленными пользовательскими данными и проверку их на согласованность. Используемые методы специфичны для набора данных, от простых статистических правил до нечетких алгоритмов, особенно когда данных мало.
AdrianBR

Ответы:

21

R содержит некоторые стандартные функции для манипулирования данными, которые могут быть использованы для очистки данных, в базовом пакете ( gsub, transformи т.д.), а также в различные пакеты сторонних разработчиков , такие как stringr , перекроить / 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совершенно другой подход к манипулированию данными. Оба Хедли Уикхем.
борец с тенью
@ssdecontrol: согласен - обновил ответ. Хэдли является автором dplyrпакета, но не data.tableодного.
Александр Блех
16

С моей точки зрения, этот вопрос подходит для двухэтапного ответа. Первая часть, назовем ее мягкой программной обработкой , может рассматриваться как использование различных алгоритмов интеллектуального анализа данных для предварительной обработки данных таким образом, что это делает их пригодными для дальнейшего анализа. Обратите внимание, что это может быть сам анализ, если цель достаточно проста, чтобы ее можно было решить одним выстрелом.

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

Например, для людей, которые имеют дело с данными, поступающими с социальных сайтов (твиттер, фейсбук, ...), поиск данных обычно приводит к файлам с очень специфическим форматом - хотя и не всегда хорошо структурированным, так как они могут содержать пропущенные поля и т. Д. , В этих случаях простой awkсценарий может очистить данные, создав верный входной файл для последующей обработки. Из множества волшебном, можно также отметить grep, sed, cut, join, paste, sort, и все множество других инструментов.

В случае, если в простом исходном файле слишком много мелочей, может также потребоваться создать набор методов для очистки данных. В таких случаях обычно лучше использовать языки сценариев (кроме оболочек), такие как Python, Ruby и Perl. Это позволяет создавать API для выбора определенных данных очень простым и многократно используемым способом. Такие API иногда публикуются их авторами, такими как IMDbPY , Stack Exchange API и многими другими.

Итак, отвечая на вопрос: есть ли лучшие практики? Обычно это зависит от вашей задачи. Если вы всегда будете иметь дело с одним и тем же форматом данных, обычно лучше написать организованный скрипт для его предварительной обработки; тогда как, если вам просто нужна простая и быстрая очистка некоторого набора данных, положитесь на инструменты POSIX для кратких сценариев оболочки, которые будут выполнять всю работу намного быстрее, чем сценарий Python, или около того. Поскольку очистка зависит как от набора данных, так и от ваших целей, сложно все уже сделать. Тем не менее, существует множество API, которые ставят вас на полпути к решению проблемы.

Рубенс
источник
hm - получить данные, отформатировать данные (awk sed grep stuff), удалить шум в качестве первого шага, а затем углубиться. Это не сложно, предварительная обработка начинается сначала, если вы используете свои
термины
@MolbOrg Да, это то, что я имел в виду. Я назвал жесткий предварительной обработки на стороне сценариев , и мягкий предобработки использование алгоритмов интеллектуального анализа данных, как правило , уменьшить размер проблемы (очищает базу данных). Я также отметил, что вторая часть, жесткая предварительная обработка, на самом деле предшествует любому другому процессу . Если с такими терминами не очень понятно, я бы с удовольствием рассмотрел любые другие предложения по улучшению ответа.
Рубенс
1
ах да, не уделяли достаточного внимания первичной обработке необработанных данных . Протестировано atm - да, perl oneliner в 3 раза медленнее, чем grep) для строк длиной 3,5 Кк в 300 МБ, для perl это заняло 1,1 секунды, для grep 0,31 секунды. Я видел статью, в которой говорится, что регулярное выражение perl медленное, намного медленнее, чем на практике (я подозреваю, что это также относится и к grep) http://swtch.com/~rsc/regexp/regexp1.html
MolbOrg
@MolbOrg Хорошая ссылка! AFAIK, grepиспользует базовое регулярное выражение POSIX по умолчанию и допускает расширенное регулярное выражение POSIX при запуске как grep -E, и для PCRE при запуске как grep -P.
Рубенс
1
Это очень хороший пост. R отлично подходит для манипулирования данными, но может быть довольно громоздким при очистке данных из-за его подробного синтаксиса для манипулирования строками и довольно жесткого соблюдения списков и матриц для структур данных.
Shadowtalker
11

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

Это может быть так же просто, как вложение значений для любых пропущенных данных, или это может быть так же сложно, как диагностика ошибок ввода данных или ошибок преобразования данных из предыдущих автоматизированных процессов (например, кодирование, цензура, преобразование). В этих двух последних случаях данные выглядят хорошо по внешнему виду, но они действительно ошибочны. Такой диагноз часто требует ручного анализа и проверки, а также внеполосной информации, такой как информация об источниках данных и методах, которые они использовали.

Кроме того, некоторые методы анализа данных работают лучше, когда ошибочные или отсутствующие данные оставлены пустыми (или нет), а не вменены или заданы значения по умолчанию. Это верно, когда есть явные представления неопределенности и невежества, такие как функции Веры Демпстера-Шафера.

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

Учитывая эти опасения, я очень подозрительно отношусь к любому методу или процессу, который рассматривает очистку данных поверхностным, кавалерным или полностью автоматическим способом. В этих деталях скрывается много дьяволов, и стоит уделить им серьезное внимание.

MrMeritology
источник
1
В качестве дополнительного комментария: я думаю, что обнаружение ошибочных данных, вызванных какой-то проблемой в дальнейшем, является золотым навыком. Много раз я удивлялся, почему мой анализ дал странные результаты, и когда я смотрел на конвейер, я обнаружил какую-то ошибку. Например: я задавался вопросом, почему все мои данные сильно искажены в сторону высоких цен - ПУТЬ из моей ментальной модели. Когда я расспросил, я обнаружил, что какой-то субподрядчик неправильно понял брифинг и предоставил данные для групп с высоким доходом, в то время как мы хотели получить смешанные данные ...
Кристиан Сауэр
Да! Ошибки данных часто являются признаками проблем процесса. Знание того, где в процессе были внесены ошибки, а также механизм, очень поможет в процессе очистки. Но еще лучше исправить проблемы процесса, чтобы они производили чистые (или более чистые) данные.
MrMeritology
5

Об автоматической очистке: вы действительно не можете очистить данные автоматически, потому что количество ошибок и определение ошибки часто зависят от данных. Например: ваш столбец «Доход» может содержать отрицательные значения, которые являются ошибкой - вы должны что-то сделать с делами. С другой стороны, столбец «ежемесячные сбережения» может содержать отрицательные значения.

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

Где вы можете и должны автоматизировать повторные проекты. Например, отчет, который должен составляться ежемесячно. Если вы обнаружите ошибки, вам следует запустить какой-то автоматизированный процесс, который может обнаружить ошибки такого рода в последующие месяцы, освобождая ваше время.

Кристиан Зауэр
источник
5

Я думаю, что не существует универсального метода «очистки» данных перед тем, как проводить собственное исследование. С другой стороны, я стремлюсь сделать как можно больше воспроизводимых исследований . Проводя воспроизводимые исследования, если вы использовали методы очистки с ошибками или с плохими параметрами / допущениями, это может быть обнаружено другими.

Есть хороший пакет knitr R, который очень помогает в воспроизводимых исследованиях.

Конечно, не все исследования могут быть полностью воспроизведены (например, прямые данные Twitter), но, по крайней мере, вы можете легко документировать этапы очистки, форматирования и предварительной обработки.

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

Дамиан Мельничук
источник
3

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

Точные дубликаты могут быть обработаны в OpenRefine путем сортировки + с помощью функции «очистки вниз». Также он имеет приблизительную (нечеткую) кластеризацию, которая позволяет группировать похожие дубликаты, такие как названия компаний или адреса. Одна только эта особенность делает это удивительным.

Thyag
источник
1
Это фантастический, недооцененный инструмент.
thanks_in_advance
2

Целый курс посвящен этому в Coursera. Возможно, вы захотите ознакомиться с методами, которые они упоминают, и важная часть состоит в том, чтобы знать, когда что использовать.

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

Всегда лучше делать это вручную, а не автоматизировать, так как каждый набор данных имеет свои проблемы и проблемы, и не все шаги применимы ко всем наборам данных.

Баран
источник