OpenRefine

Как быстро чистить данные для анализа

Дата
23 мая 2020
OpenRefine
Wikimedia

В реальном мире редко везет работать с «чистыми» данными (то есть пригодными для анализа без предварительной обработки). Порой процесс чистки данных отнимает больше времени и сил, чем их анализ. Но с такими инструментами как OpenRefine чистить данные становится намного проще. 

Посмотрим, как все это работает. (Ниже приведены инструкции для работы с OpenRefine в операционной системе macOS, но для Windows они не сильно отличаются.)

Скачиваем и устанавливаем приложение

Переходим на официальную страницу OpenRefine, выбираем слева в меню пункт Download, далее следуем инструкциям:

  • выбираем Mac kit, нажимаем сохранить в окне загрузки;
  • после того как загрузится файл, идем в папку «Загрузки», выбираем файл, который должен называться примерно так, — openrefine-mac-3.3.dmg, — дважды кликаем по нему, ждем, когда он распакуется;
  • после того как архив распаковался, открывается окно с иконкой программы, перетаскиваем ее в папку «Программы» на вашем компьютере;
  • переходим в папку «Программы», находим приложение OpenRefine, дважды кликаем по нему — должно открыться вот такое окно в браузере.   

Меняем язык на русский 

  • выбираем слева в меню пункт Language settings, правее появится выпадающее меню со списком доступных языков;
  • выбираем из списка русский язык, нажимаем Change language, после этого окно обновится и программа станет доступной на русском.

Загружаем файл, начинаем проект

OpenRefine позволяет загружать данные разных форматов — Google таблицы, информацию из SQL-базы, ссылку на таблицу. Мы рассмотрим вариант загрузки файла с компьютера. Для этого мы создали тестовый файл (если хотите использовать его, то можете скачать здесь), в котором приведены данные о количестве заболевших за 10 дней коронавирусом в двух регионах России, — Ярославской и Владимирской областях.

Прежде чем загрузить файл и начать с ним работать, посмотрим, какие с ним проблемы. Во-первых, числа в столбце «число» — в разных форматах, а значит, мы не сможем посчитать их сумму или, допустим, среднее. Значит, нам нужно привести этот столбец в единый числовой формат. Во-вторых, даты в столбце «дата» — тоже в разных форматах (где-то месяц написан словами, где-то числами, где-то разделитель — точка, где-то — знак дроби). Чтобы иметь возможность сортировать этот столбец, нам нужно привести все даты в единый формат. И, наконец, главная проблема — в столбце «регион» названия Ярославской и Владимирской областей написаны по-разному. И нам нужно привести все варианты написания к единому формату.

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

  • нажимаем кнопку Browse, выбираем файл на компьютере, нажимаем «Следующий» (OpenRefine переведен на русский язык не лучшим образом);
  • появляется окно предпросмотра данных, а вверху чуть правее — окно, где мы можем задать название проекту, пишем любое название, затем нажимаем на кнопку «Создать проект» правее, после этого появляется меню проекта.

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

Сперва приведем все числа в столбце «число» в единый формат.

  • нажимаем на указатель стрелки в названии столбца, должно появиться выпадающее меню, выбираем «Правка ячеек», «Общие преобразования». Здесь представлены функции, которые используются наиболее часто. В данном случае нам нужна функция «В число» — выбираем ее;
  • почти все наши числа в столбце преобразовались. За исключением одного. Изменить его просто. Наводим на ячейку, кликаем кнопку edit, появляется окно, удаляем ненужный символ (@), а чуть выше меняем поле «текст» на «число» и жмем «Применить» — после этого все данные в нашем столбце должны преобразоваться в числа.

Функции для преобразования ячеек

Теперь попробуем преобразовать столбец «дата» в единый формат.

  • нажимаем на указатель стрелки в названии столбца, в выпадающем окне выбираем «Правка ячеек» — «Преобразование». У вас должно появиться вот такое окно. Сверху — поле для написания функций. Чуть ниже — поле с двумя столбцами: слева указаны данные из нашей таблицы, а справа данные будут меняться по мере применения нами функций;
  • мы будем использовать в этом примере функцию replace. (С полным набором функций можно ознакомиться в разделе «Помощь»). В верхнем окне, там где написано слово value (оно означает данные из каждой ячейки), пишем следующую функцию: value.replace(" мая ", ".05."). Первый параметр функции replace — это то, что мы хотим изменить, а второй параметр — то, на что мы хотим изменить. В данном случае мы хотим убрать слово «мая» с пробелами и заменить его цифровым обозначением месяца с точками. Если вы написали функцию правильно, то можете увидеть, как ваши данные меняются в правом столбце;
  • попробуйте по аналогии с предыдущим примером заменить знаки дроби на точки, а также убрать ненужную букву «а» из некоторых ячеек с датой. Подсказка: вам не нужно удалять предыдущую функцию, вы можете задавать новые функции replace после предыдущих в единой цепочке, — вам нужно только разделять их точками;
  • после того как вы преобразовали все даты в столбце, нажмите «ОК». 

«Кластеризуем» данные и приводим к единому формату

Теперь перейдем к самой сложной задаче: приведем к единому написанию названия регионов из столбца «Регион».

  • нажимаем на указатель стрелки в названии столбца, в выпадающем окне выбираем «Фасет» — «Текстовый фасет», слева должно появиться окно с данными из нашего столбца;
  • мы видим, что в нашем столбце названия двух регионов написаны самыми разными способами. У нас бы ушло очень много времени, если бы мы меняли название каждого региона вручную (представьте, что у вас сотни тысяч строк). Для автоматизации этого процесса в OpenRefine есть функция «Кластер». Нажимаем на нее и попадаем в такое меню;
  • OpenRefine пытается выявить, какие разные форматы написания могут представлять одно и то же. Для этого он использует несколько методов. По умолчанию — метод «несоответствия ключей». Это самый «строгий» метод, поэтому в нашем случае он определил совсем немного кластеров. Если мы увеличим погрешность определения, то сможем найти больше кластеров;
  • нажимаем на меню «Метод», выбираем «k-ближайших соседей». По умолчанию правее стоит расстояние Левенштейна (это метрика, позволяющая определить «схожесть» двух строк), а еще правее указан радиус — чем он выше, тем больше погрешность, то есть так может определиться больше кластеров, но возрастает и вероятность ошибки. Если мы увеличим радиус до 2, то количество найденных кластеров сразу увеличится;
  • попробуем поменять расстояние Левенштейна на ppm (для этого выбираем меню, где написано «Левенштейна») — количество кластеров сразу увеличилось;
  • если мы согласны с тем, что значения в кластере представляют собой одно и то же, нажимаем на маленькое окно в столбце «Слить». Правее от него окно с тем написанием, которое мы бы хотели видеть в своей таблице. Там где оно написано неверно (например, «Яр. обл.»), меняем на верное (например, «Ярославская область»);   
  • затем в правом нижнем углу нажимаем «Объединить выбранные & закрыть», вы должны вернуться в окно проекта, слева вы увидите все то же окно фасета. Если там остались какие-то неверно написанные данные, попробуйте их «кластеризовать» еще раз, поиграйте с дистанцией и разными методами. 

Экспортируем данные 

OpenRefine позволяет экспортировать очищенные данные в самые разные форматы — в HTML-таблицу, в CSV, в SQL. Мы экспортируем данные в Excel. 

  • в правом верхнем углу выбираем «Экспорт», выбираем Excel и сохраняем файл в нужное место на компьютере. 

Теперь ваши данные очищены и готовы для анализа.