MIMIC-III tutorialΒΆ

This notebook shows examples of how to use the cycquery tool on MIMIC-III v1.4.

Each query is limit to 100 rows (for quick results).

  • First, setup the MIMIC-III database according to the instructions in mimic-code.

  • The database is assumed to be hosted using postgres. Update the config parameters such as username and password, passed to MIMICIIIQuerier accordingly.

Imports and instantiate MIMICIIIQuerierΒΆ

[1]:
"""MIMICIII tutorial."""

import cycquery.ops as qo
from cycquery import MIMICIIIQuerier


querier = MIMICIIIQuerier(
    dbms="postgresql",
    port=5432,
    host="localhost",
    database="mimiciii",
    user="postgres",
    password="pwd",
)
# List all custom table methods.
querier.list_custom_tables()
2025-01-29 09:49:56,150 INFO cycquery.orm    - Database setup, ready to run queries!
[1]:
['chartevents', 'diagnoses', 'labevents']

Example 1. Get all male patients with a mortality outcome.ΒΆ

[2]:
ops = qo.Sequential(
    qo.ConditionEquals("expire_flag", 1),
    qo.ConditionEquals("gender", "M"),
)
patients = querier.mimiciii.patients()
patients = patients.ops(ops).run(limit=100)
print(f"{len(patients)} rows extracted!")
2025-01-29 09:50:02,146 INFO cycquery.orm    - Query returned successfully!
2025-01-29 09:50:02,147 INFO cycquery.utils.profile - Finished executing function run_query in 0.045226 s
100 rows extracted!

Example 2. Get all female patient encounters with diagnoses (gastroenteritis in ICD-9 long title).ΒΆ

[3]:
patients = querier.mimiciii.patients()
patients = patients.ops(qo.ConditionEquals("gender", "F"))
admissions = querier.mimiciii.admissions()
patient_admissions = patients.join(
    join_table=admissions,
    on="subject_id",
)
diagnoses = querier.diagnoses()
diagnoses = diagnoses.ops(qo.ConditionSubstring("long_title", "gastroenteritis"))
patient_admissions_diagnoses = patient_admissions.join(
    join_table=diagnoses,
    on=["subject_id", "hadm_id"],
).run(limit=100)
print(f"{len(patient_admissions_diagnoses)} rows extracted!")
2025-01-29 09:50:04,097 INFO cycquery.orm    - Query returned successfully!
2025-01-29 09:50:04,099 INFO cycquery.utils.profile - Finished executing function run_query in 0.077570 s
100 rows extracted!

Example 3. Get potassium lab tests for female patients.ΒΆ

[4]:
patients = querier.mimiciii.patients()
patients = patients.ops(qo.ConditionEquals("gender", "F"))
labs = querier.labevents()
labs = labs.ops(qo.ConditionEquals("label", "potassium"))
patient_labs = patients.join(labs, on="subject_id").run(limit=100)
print(f"{len(patient_labs)} rows extracted!")
2025-01-29 09:50:05,403 INFO cycquery.orm    - Query returned successfully!
2025-01-29 09:50:05,404 INFO cycquery.utils.profile - Finished executing function run_query in 0.060785 s
100 rows extracted!