Очистка данных

Марит Брэйдеманн и Даянна Грегори

Теперь у вас есть подготовленный набор данных, и вы готовы приступать к его очистке. Но что это, собственно, означает? Что такое чистые данные, и что мы должны сделать, чтобы они стали такими?

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

Так что же мы делаем?

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

Контроль диапазонов

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

ИН студентаОценка
679372531 980
67354028899
674082892 97
673923590 96

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

Визуальное сканирование данных во время проверки диапазона может вскрыть и другие потенциальные проблемы даже внутри официальных границ данных:

ИН студентаОценка
67447201978
679029425 75
67182239074
6712789279

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

Проверки диапазона будут работать, независимо от того, какой собственно у вас диапазон. Возможно, вам нужны десятичные числа между 0 и 1, или ваша переменная − нормальная температура тела по Фаренгейту, и вы ожидаете, что большинство значений будут между 97.0 и 99.0, с поправкой на людей с повышенной и пониженной температурой. Вы всегда можете проверить, есть ли в этой группе переменных слишком высокие или низкие значения.

Вы также всегда можете использовать команды «Фильтр», чтобы проверить все значения, выходящие за допустимые пределы диапазона переменной. Однако, это не поможет со значениями, которые находятся внутри вашего диапазона, но выглядят так, как будто им там не место. Например, обычный фильтр диапазона выделит оценку «980», но пропустит оценку «9». Если вы используете фильтры для проверки диапазона, хорошо бы использовать еще один метод для оценки общего распределения ваших данных, чтобы выделить любые значения, кажущиеся «странными», по сравнению с другими.

Проверка орфографии

Проверка орфографии − еще одна базовая проверка, которую вы можете использовать для поиска проблем в базе данных. Мы рекомендуем делать ее последовательно, поле за полем, а не пытаться охватить сразу весь набор данных. Делать это следует потому, что одно и то же слово может быть расценено как написанное с ошибкой для одной переменной и как верное − для другой. Хорошим примером здесь может послужить поле имен. Если в вашей базе данных есть поле имен, многие их внесенных данных могут быть забракованными системой проверки орфографии, несмотря на то, что это реально существующие имена. Если вы сосредоточитесь на одном поле за раз, вы сможете быстрее справиться со всей базой данных. Возьмем пример из главы о подготовке данных, где студенты указывали в опросе свою профильную дисциплину, и предположим, что один из них после бессонной ночи случайно написал «Mtahmeitcs» вместо «Mathematics». Проверка орфографии в этом поле быстро установила бы орфографическую ошибку, и вы бы изменили ее на «Math» или «Mathematics», в зависимости от того, какой унифицируемый термин вы используете.

Сравнение с образцом/Регулярные выражения

Другой, чуть более продвинутый тип проверки данных, включает в себя сравнение с образцом. Такой вид проверки можно использовать, например, чтобы удостовериться, что все записи в поле – электронные адреса. Для этого используются так называемые “регулярные выражения” (regular expressions – regex), с помощью которых вы говорите компьютеру: “Я хочу, чтобы в этой переменной были только {такие} значения. Скажи мне, если что-то будет выглядеть не {так}”. Способ, которым вы показываете, {как} это должно выглядеть, варьируется от программы к программе, и может показаться немного сложным, если вы никогда не делали этого раньше. Если вы когда-либо пользовались звездочкой (*) как символом обобщения при поиске, вы уже кое-что об этом знаете, ведь это тоже часть «регулярного выражения».

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

Сочетание полей

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

То же самое и с любым другим набором данных. В них могут быть поля, которые должны сочетаться и иметь смысл вместе. Представьте, что вы проводите медицинское исследование пациентов в больнице и отслеживаете принимаемые ежедневно лекарства, используя три отдельных поля для данных: название лекарства, назначенная доза и единица измерения дозы препарата. То есть, если в наборе данных указано «Аспирин, 500, мг», значит, что пациент ежедневно принимал 500 мг аспирина. Теперь представьте, что вы получили запись “Морфин, 200, фунт”. Какой будет ваша реакция? Вполне возможно, что пациент больницы принимал морфин, и 200 мг − вполне приемлемая доза, поэтому число само по себе не вызывает вопросов, но даже 1 фунт морфина убил бы человека, поэтому с этой записью определенно проблема. Вероятно, вы захотите вернуться к карте пациента или к человеку, который вводил эти данные, чтобы получить верные единицы.

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

Что произойдет, если мы не очистим наши данные?

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

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

И поэтому…

Примите тот факт, что большинство баз данных никогда не являются на 100% чистыми

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

Например, у вас есть список из 1000 контактов из базы данных, содержащей 100000 контактов, и вы заметили, что у двух из этой тысячи имена и фамилии написаны в одном разделе. Возьметесь ли вы прочесать и исправить все 100000 записей?

Тут возможны варианты.

Вы можете принять формальное решение, что данные достаточно чистые для ваших целей или же слишком грязные. Это, на самом деле, зависит от переменной и от того, какой результат вы хотите видеть на выходе. Если вы проверяете, правильно ли студенты указали свои профильные дисциплины, для внутреннего отчета и думаете, что процент ошибок в наборе данных составляет 0.01%, это, вероятно, будет намного менее важным, чем когда вы проверяете переменную, критически важную для отчета о безопасности, и вы предполагаете, что процент ошибок достигает 5%. Со временем вы станете лучше понимать, насколько грязная ваша база данных, и насколько трудоемким будет процесс очистки для конкретной группы переменных. В таком случае, имеет смысл проконсультироваться с ключевыми лицами, заинтересованными в создании конечного продукта, чтобы понять, в каком объеме целесообразно проводить чистку. Всегда нужно стремиться к максимально чистым данным, но помните, что они никогда не будут на 100% идеальными.

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

После очистки данных: будь добры, документируйте!

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

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

По мере вашего продвижения составляйте инструкции, в точности документируя каждый шаг, который вы предпринимали, чтобы обнаружить плохие данные, и какие части данных были удалены. Важно записывать это именно тогда, когда вы непосредственно занимаетесь очисткой данных: всегда проще документировать в процессе, чем пытаться вспомнить все свои шаги, когда дело уже сделано. Если для работы с данными вы используете программное обеспечение “point-and-click” (например, Excel), следует быть особенно внимательным и фиксировать все этапы очистки данных, поскольку все делается вручную, а не с помощью компьютерного кода, который можно легко перезапустить. Хорошее проверенное правило гласит: если вы сами не можете с легкостью следовать своим же инструкциям и достичь тех же результатов во второй раз, не стоит ожидать, что это сможет сделать кто-то другой.

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