Разбор и очистка дат рождения

Персональные данные являются одними из самых «загрязненных». Как показал опрос, проведенный научным сообществом Kaggle, около 16,7 тыс. опрошенных из 1,3 млн. членов сообщества чаще всего называли "грязные данные" одним из самых больших барьеров в работе. Проблемы с качеством встречаются в отдельных наборах данных (файлы, базы данных) как результат ошибок при вводе, потери при конвертации из разных форматов и по другим причинам. Неочищенные данные не могут быть объектом анализа, поэтому для их практического использования требуется проведение предварительной очистки.

В текущем примере демонстрируется, как очистить даты рождения и привести их к единому формату с помощью Loginom.

Запустить демо

Установить локально

Описание алгоритма

1. Импорт данных

Импорт набора данных

Набор данных насчитывает более 1000 записей с датами рождений.

Имя поля Метка поля
birthDate Дата рождения

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

Процесс очистки состоит из двух этапов:

  • разбор даты на составляющие: день, месяц и год (подмодель Очистка и разбор дат на день, месяц и год)
  • приведение очищенной записи к виду dd.mm.yyyy (подмодель Приведение к стандартному формату)

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

Разбор даты рождения — месяц задан строкой

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

Примечание: регулярные выражения считаются ресурсоёмкими операциями. Для увеличения производительности проверка всех форматов записи дат (dd.mm.yyyy, dd.mm.yy, mm.dd.yyyy и тд.) будет выполняться с помощью оператора if, т.к. он работает по принципу ленивых вычислений.

Проверка соответствию форматов регулярных выражений. Шаг 1
Рисунок 1. Проверка соответствию форматов регулярных выражений. Шаг 1

Данное регулярное выражение извлекает день из даты рождения, если формат записи даты рождения d/month/yy или dd/month/yyyy.

Функция RegExMatchedSubExp — возвращает группу части строки, соответствующую регулярному выражению.

Проверка соответствию форматов регулярных выражений. Шаг 2
Рисунок 2. Проверка соответствию форматов регулярных выражений. Шаг 2

Если день после прохождения первого регулярного выражения не был выделен из записи, тогда следует проверка следующих форматов: yy-month-d, yyyy-month-dd. Однако если день в предыдущем регулярном выражении уже был определен, то проверка дальнейших форматов не будет производиться. Именно так работает принцип ленивых вычислений.

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

Аналогично в отдельные поля извлекаются месяц и год.

Разветвление алгоритма

В узле Фильтр строк в отдельный набор выделяются записи, которые были разобраны на предыдущем шаге.

Замена текстового месяца

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

Кодировка месяца
Рисунок 3. Кодировка месяца

В узле Присоединение кодировки месяца буквенной записи месяца сопоставлены его номер и полное название.

Разбор даты рождения — месяц задан числом

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

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

  • d/m/yy и dd/mm/yyyy
  • m/d/y и mm/dd/yyyy
  • yy/m/d и yyyy/mm/dd
  • dmyy и ddmmyyyy
  • mdy и mmddyyyy

Разобранные даты выглядят следующим образом:

Результат разбора дат, в которых месяц задан числом
Рисунок 4. Результат разбора дат, в которых месяц задан числом
Объединение результатов разбора

На выходе узлов Разбор даты рождения — месяц задан числом и Присоединение кодировки месяца содержатся разобранные данные, которые необходимо объединить. Из указанных наборов в объединении участвуют только те поля, которые задают следующую структуру результирующего набора:

Имя поля Метка поля
birthDate Дата рождения
birthDay День рождения
birthMonth Месяц рождения
birthYear Год рождения
Набор данных, полученный в результате разбора дат на составляющие
Рисунок 5. Набор данных, полученный в результате разбора дат на составляющие

Полученные записи с помощью узла Разделение на разобранные и некорректные разделены на 2 набора: полностью разобранные даты и строки с пустыми полями.

На выходе из подмодели Очистка и разбор дат на день, месяц и год образовалось 2 порта

  • Успешно разобранные даты
  • Некорректные данные

Подмодель Очистка и разбор дат на день, месяц и год выглядит следующим образом:

Подмодель Очистка и разбор дат на день, месяц и год
Рисунок 6. Подмодель Очистка и разбор дат на день, месяц и год

На следующем шаге даты приводятся к единому формату dd.mm.yyyy с типами данных: Строковый и Дата/Время.

Приведение к стандартному формату

В узле Формат дня и года день приводится к формату dd, год — к yyyy, а также помечаются записи с некорректно заданным годом, например, если год рождения больше текущего года или если невозможно однозначно определить год (12 год 1912 или 2012?).

Подмодель Приведение к стандартному формату
Рисунок 7. Подмодель Приведение к стандартному формату

Некорректные даты фильтруются с помощью узла Фильтр строк.

На данном шаге имеются однозначно разобранные поля, которые в узле Дата в формате 'dd.mm.yyyy' с помощью функции concat соединяются в одну строку.

C помощью функции StrToDate сформировано поле типа Дата/Время с записью даты в формате dd.mm.yyyy.

В итоговой таблице 3 поля:

Имя поля Метка поля
birthDate Дата рождения
strResultDate Итоговая дата в формате строка
resultDate Итоговая дата в формате Дата

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


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

Скачайте и откройте файл в Loginom. При необходимости Loginom CE можно скачать бесплатно

Скачать демопример

Минимальные требования к системе:

  • Операционная система: Windows 7 и выше.
  • Процессор x86: 1 core.
  • Оперативная память: 1 GB.
  • Жесткий диск: 10 GB.

Результаты поиска по запросу «» ()

    Нет результатов поиска по запросу ""