Введение. В сфере здравоохранения стандарт Fast Healthcare Interoperability Resources (FHIR) стал ведущей основой для обмена электронными медицинскими картами. FHIR определяет набор ресурсов и форматов данных для представления медицинской информации. Однако работа с данными FHIR иногда может быть сложной из-за их иерархической структуры. В этом сообщении блога мы рассмотрим, как мощная функция нормализатора JSON библиотеки Pandas может упростить процесс сериализации данных FHIR в Panda DataFrame и наоборот. Особое внимание мы уделим технике рекурсивного выравнивания для эффективной обработки сложных вложенных структур.
Понимание данных FHIR. Прежде чем углубляться в технические детали, давайте кратко разберемся со структурой данных FHIR. Ресурсы FHIR представлены с помощью иерархической модели с вложенными элементами. Каждый тип ресурсов имеет свой собственный набор свойств и взаимосвязей, что затрудняет непосредственную обработку и анализ данных.
Представляем Panda JSON Normalizer: Pandas — это популярная библиотека Python, которая предоставляет высокопроизводительные инструменты для обработки и анализа данных. Одной из его менее известных функций является нормализатор JSON, который позволяет нам преобразовывать вложенные структуры JSON в плоские таблицы. Эта возможность оказывается бесценной при работе с данными FHIR.
Рекурсивное выравнивание. Рекурсивное выравнивание — это метод, который итеративно выравнивает вложенные структуры, расширяя каждый уровень иерархии. Используя нормализатор Panda JSON с рекурсивным выравниванием, мы можем легко преобразовать сложные данные FHIR в Pandas DataFrame, который представляет собой двумерную табличную структуру данных.
Давайте рассмотрим пример, в котором у нас есть ресурс FHIR, такой как запись пациента, который содержит вложенные элементы, такие как адреса, контактные данные и наблюдения. С помощью рекурсивного выравнивания мы можем преобразовать эти вложенные структуры в единую плоскую таблицу, что упрощает обработку и анализ данных.
Сериализация FHIR в Panda DataFrame: Чтобы сериализовать данные FHIR в Panda DataFrame, мы можем выполнить следующие шаги:
- Импортируйте необходимые библиотеки. Импортируйте необходимые библиотеки, включая Pandas и любые специфичные для FHIR библиотеки, такие как библиотека FHIR-py для работы с ресурсами FHIR.
from pandas import json_normalize import ndjson import pandas as pd import json import torch
- Извлечение данных FHIR. Извлеките данные FHIR, либо запросив API, либо прочитав их из файла. В этом случае мы открываем файл NDJSON, где каждая строка является ресурсом FHIR.
- Преобразование JSON в DataFrame: используйте нормализатор Pandas JSON для преобразования данных FHIR из формата JSON в DataFrame. Примените рекурсивное выравнивание для эффективной обработки вложенных структур.
#MIT License def flatten_json(nested_json): out = {} def flatten(x, name=''): if type(x) is dict: for a in x: flatten(x[a], name + a + '_') elif type(x) is list: i = 0 for a in x: flatten(a, name + str(i) + '_') i += 1 else: out[name[:-1]] = x flatten(nested_json) return out
Он также нормализовал рекурсивно сплющенную структуру:
df = pd.json_normalize(flat)
Выполнение анализа и манипуляций: когда данные FHIR находятся в формате DataFrame, мы можем легко выполнять различные манипуляции с данными, такие как фильтрация, сортировка, агрегирование и визуализация данных.
Десериализация Panda DataFrame в FHIR: С другой стороны, если мы хотим преобразовать Panda DataFrame обратно в формат FHIR, мы можем выполнить следующие шаги:
#MIT License def unnest_row(row): unnested = {} for col in row.index: keys = col.split('_') current = unnested for k in keys[:-1]: if k not in current: current[k] = {} current = current[k] current[keys[-1]] = row[col] return unnested
Полная процедура для запуска теста этого выглядит следующим образом:
#MIT License with open('Patient.ndjson', encoding='utf-8') as f: data = ndjson.load(f) for line in data: # json_data is the JSON object df = json_normalize(line) flat = flatten_json(line) df = pd.json_normalize(flat) # Iterate through each row in the DataFrame for index, row in df.iterrows(): print(f"Index: {index}") print(f"Row data: \n{row}") print("-----") # Unnest each row and convert back to JSON unnested_json = df.apply(unnest_row, axis=1).to_json() print(json.dumps(json.loads(unnested_json), separators=(',', ':')))
Как видите, FHIR трансформируется в Panda DataFrame и обратно!
Вывод: использование нормализатора Panda JSON с рекурсивным выравниванием значительно упрощает процесс сериализации данных FHIR в Panda DataFrame и наоборот. Используя этот метод, медицинские работники и разработчики могут эффективно работать с данными FHIR, выполнять анализ данных и создавать передовые приложения для взаимодействия в сфере здравоохранения. Сочетание FHIR и Panda позволяет нам раскрыть весь потенциал данных о здоровье структурированным и управляемым образом.