Как стать автором
Обновить

Комментарии 11

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

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

Очень интересно. Выкладывайте.

И такой вот вопрос: не думали как вычищать/исправлять нетехнический мусор - ошибки ввода данных, противоречивые показания, халатности, подтасовки, халатности записанные на ковид, не ковидные смерти записанные как ковидные и наоборот, и т.д.?

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

Но это было до ковида. Случаи были редкие, но довольно уникальные, поэтому тогда не получилось нормально автоматизировать их выявление.

К сожалению пришлось проводить вручную много проверок и перепроверок. За время работы в каждый файл пришлось зайти как минимум 2 раза, плюс при добавлении файла изначально проверялись и исправлялись некоторые моменты. К примеру: 1. первый три даты dd.dd.dddd во всех файлах вручную проверялись и исправлялись. 2. Таблицы внутри word не переводятся в текст, каждый файл проверялся вручную, таблицы удалялись 3. Некоторые файлы содержат несколько выписных эпикризов разных пациентов - лишнее удалялось вручную. 4. Лимфоциты крови и лимфоциты мочи могут подтягиваться регуляркой как одно и то же

И таких ошибок очень много, все и не перечислить. Я не представляю как это автоматизировать/закодить, мне кажется это невозможно. Единственный вариант который я посчитал наиболее правильным - вручную перепроверять каждый показатель по несколько раз, глядя на то что первично получается (до data tydying). И сомневаюсь что специалист без медицинского образования качественно разберётся в этих помоях)

    if re.search(r'\d\d[.]\d\d[.]\d{4}', x):
        birthdate = re.search(r'\d\d[.]\d\d[.]\d{4}', x).group()
    else:
        birthdate = "NA"

Если документ не создан людьми, то простая регулярка может пропускать часть случаев, когда дата написанна по другому. Например 22, вместо 2022.

Так можно потерять часть данных. Для особо важных полей можно собрать все пропущенные данные и попробовать глянуть на статистику.

Такой подход уже отчищает данные, хотя отчистку вы делаете следующим шагом.



re.findall(r'[Тт]...


Гляньте на флаг для регуоярок, вроде он должен работать с русским. https://docs.python.org/3/library/re.html#re.IGNORECASE

re.findall(r'\D?\D?\D?


Можно упростить повторяющиеся символы
re.findall(r'\D{0,3}

        if re.findall(r'ИБС|'
                  r'[Ии]шемическая болезнь сердца', x):
        IHD = re.findall(r'ИБС|'
                         r'[Ии]шемическая болезнь сердца', x)

Повторение регулярок, путь к ошибкам.

Можно вот так упростить, а еще лучше при сохраненни заменить на NA или оставить это на шаг отчистки.

IHD = re.findall(r'ИБС|[Ии]шемическая болезнь сердца', x)
IHD = IHD if IHD else "NA"

    if re.findall(r'ИОЛП.\s?\S?\s?[0-9]{2}', x):
        LAVI = re.findall(r'ИОЛП.\s?\S?\s?[0-9]{2}', x)
    else:
        LAVI = "NA"

Я за декларативный стиль описания. Вместо всех этих IF напишите цикл.

expressions = {   "LAVI": re.compile(r'ИОЛП.\s?\S?\s?[0-9]{2}')}
data = {}

for name, exr in expressions.items():
    data[name] = exr.findall(x)    


И тогда columns для DataFrame возьмёте из data.

Такой подход спасёт вас от copy-paste ошибок при добавлении новых проверок.

Спасибо большое за все Ваши замечания, я подозревал, но не знал как это можно было сделать. Эти решения сильно сократят количество кода и повысят его качество. Буду учиться)

Почитайте про библиотеку yargy, хорошо подходит для поиска сущностей в тексте:

https://github.com/natasha/yargy

Я делал похожую задачу для диплома в магистратуре , может полезно будет:

https://github.com/ezhkovskii/graduate_work_nlp_in_ehr

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации