У нас есть истории болезней пациентов в электронном виде, в которых содержатся произвольные текстовые описания и структурированная информация (идентификаторы пациентов, идентификаторы случаев госпитализации, дата/время). История болезни пациента может дополняться за время пребывания в лечебном учреждении, поэтому можно встретить несколько записей с одним и тем же идентификатором пациента и идентификатором поступления в лечебное учреждение, но с другими метками времени и содержанием.
Проблема
Мы хотим использовать в медицинских записях текст на естественном языке, чтобы спрогнозировать, когда у пациента выявится сепсис. Мы знаем, у кого из пациентов был в конечном итоге определен сепсис, но мы хотим исключить записи, сделанные после обнаружения сепсиса у пациента, так же мы можем получить ненужные предикаторы, например, «начало курс приема антибиотиков для лечения сепсиса». Если сепсис уже выявлен, то нет смысла в данных для раннего прогнозирования. Каким образом удалить истории болезней, где упоминается сепсис, и истории болезней с более поздними метками времени, даже если в более поздних записях не будет напрямую упоминаться сепсис?
План
Мы собираемся решить проблему с помощью программного обеспечения по обработке данных PolyAnalyst, разработанного компанией Megaputer. Ниже скриншот скрипта, построенного с применением PolyAnalyst. Иконки представляют собой индивидуальные этапы. Каждая иконка описывается ниже.
- Начнем с таблицы электронных историй болезней. Для того чтобы удостовериться в том, что наши шаги правильные, сначала протестируем их на небольшом примере. Узел: Выборка.
- Найдем упоминания сепсиса в тексте и получим выборку записей из историй болезней. Записи послужат временным интервалом для пациентов, соответствующих этому критерию. Важно помнить, что наша цель получить только те записи, которые пациенты получили до записей с упоминанием сепсиса. Узлы: Поисковый запрос и Подмножество. Чтобы создать Узел Подмножество, при просмотре результатов узла Поисковый запрос кликните правой кнопкой мыши на соответствующий запрос выберите «Сгенерировать подмножество».
- Отсортируйте записи по времени: сначала наиболее ранние даты. Узел: Сортировка строк.
- Создайте новую колонку, чтобы делать временные метки в каждой строке, назовите ее «Самое ранее упоминание сепсиса». В нашем случае некоторые элементы метки времени были пустыми и их нужно было заполнить более общими датами. Узел: Производные колонки.
- Для любой пары идентификатор пациента/ идентификатор госпитализации, оставьте только первую запись. Вы получили список пациентов, каждый из которых имеет значение в колонке «Самое ранее упоминание сепсиса», содержащую временную метку для первой записи о сепсисе. Узел: Агрегирование.
- Объедините эту таблицу данных (справа) с вашей первоначальной таблицей (слева). Первоначальную таблицу к узлу Объединение необходимо присоединять слева, чтобы для каждой записи в первоначальной таблице он проверял новый список на наличие совпадающих идентификаторов пациентов и госпитализаций. В случае совпадения появится метка времени в колонке «Самое раннее упоминание сепсиса» у соответствующего пациента. Если такого пациента или информации о госпитализации нет в новом списке (никогда не упоминался сепсис в их записях), колонка «Самое раннее упоминание сепсиса» останется пустой. Узел: Объединение.
- И напоследок самое легкое! Отфильтруйте строки так, чтобы остались записи с пустым значением в колонке Самое раннее упоминание сепсиса или с такой меткой времени записи, которая является более ранней , чем метка в колонке Самое раннее упоминание сепсиса пациента. Узел: Фильтрация строк.
Результат
Мы проанализировали наши данные на упоминание сепсиса, выбрав из полученного списка записи с самым ранним упоминанием сепсиса по каждому пациенту, затем применили выборку к каждой записи пациента из первоначальной таблицы данных. А дальше не составило труда сравнить метки времени медицинских записей с метками первого упоминании сепсиса по выбранному пациенту, имея ввиду, что мы имеем новую маленькую таблицу данных, где мы устранили как все записи упоминании сепсиса, так и записи, следующие после указанной метки времени.
Иными словами, мы отметили все записи метками времени после определенного события в их истории болезни, теперь их можно исключить из наших тренировочных данных.