Source code for pyhealth.tasks.patient_linkage
from pyhealth.data import Patient
[docs]def patient_linkage_mimic3_fn(patient: Patient):
"""
Patient linkage task for the mimic3 dataset (Simple Pair).
NOTE: This task only links the last visit with the second-to-last visit.
For the full MedLink configuration (linking last visit with ALL previous visits),
please use `pyhealth.tasks.patient_linkage_mimic3.PatientLinkageMIMIC3Task`.
"""
# exclude patients with less than two visits
if len(patient) < 2:
return []
samples = []
q_visit = patient.get_visit_by_index(len(patient) - 1)
d_visit = patient.get_visit_by_index(len(patient) - 2)
q_age = (q_visit.encounter_time - patient.birth_datetime).days // 365.25
d_age = (d_visit.encounter_time - patient.birth_datetime).days // 365.25
# exclude patients under 18
if (q_age < 18) or (d_age < 18):
return []
q_conditions = q_visit.get_code_list(table="DIAGNOSES_ICD")
d_conditions = d_visit.get_code_list(table="DIAGNOSES_ICD")
# exclude patients without conditions
if len(q_conditions) * len(d_conditions) == 0:
return []
# identifiers
gender = patient.gender
insurance = q_visit.attr_dict["insurance"]
language = q_visit.attr_dict["language"]
religion = q_visit.attr_dict["religion"]
marital_status = q_visit.attr_dict["marital_status"]
ethnicity = q_visit.attr_dict["ethnicity"]
insurance = "" if insurance != insurance else insurance
language = "" if language != language else language
religion = "" if religion != religion else religion
marital_status = "" if marital_status != marital_status else marital_status
ethnicity = "" if ethnicity != ethnicity else ethnicity
q_identifiers = "+".join(
[gender, insurance, language, religion, marital_status, ethnicity]
)
insurance = d_visit.attr_dict["insurance"]
language = d_visit.attr_dict["language"]
religion = d_visit.attr_dict["religion"]
marital_status = d_visit.attr_dict["marital_status"]
ethnicity = d_visit.attr_dict["ethnicity"]
insurance = "" if insurance != insurance else insurance
language = "" if language != language else language
religion = "" if religion != religion else religion
marital_status = "" if marital_status != marital_status else marital_status
ethnicity = "" if ethnicity != ethnicity else ethnicity
d_identifiers = "+".join(
[gender, insurance, language, religion, marital_status, ethnicity]
)
samples.append({
"patient_id": patient.patient_id,
"visit_id": q_visit.visit_id,
"conditions": ["<cls>"] + q_conditions,
"age": q_age,
"identifiers": q_identifiers,
"d_visit_id": d_visit.visit_id,
"d_conditions": ["<cls>"] + d_conditions,
"d_age": d_age,
"d_identifiers": d_identifiers,
})
return samples