Skip to content

Python package for managing OHDSI clinical data models. Includes support for LLM based plain text queries!

License

Notifications You must be signed in to change notification settings

dermatologist/pyomop

Folders and files

NameName
Last commit message
Last commit date

Latest commit

1e26dd6 · Nov 19, 2023
Nov 13, 2023
Nov 19, 2023
Oct 18, 2020
Nov 19, 2023
Aug 10, 2021
Nov 19, 2023
Nov 19, 2023
May 2, 2020
Oct 18, 2020
Nov 13, 2023
May 2, 2020
Aug 9, 2021
Nov 19, 2023
May 23, 2020
Sep 17, 2021
Nov 19, 2023
Aug 10, 2021
Nov 13, 2023
Jun 27, 2020
Aug 9, 2021
Nov 19, 2023
Nov 19, 2023
Aug 9, 2021
Nov 19, 2023
Nov 13, 2023

Repository files navigation

pyomop

Libraries.io SourceRank forthebadge made-with-python PyPI download total Build

Description

The OHSDI OMOP Common Data Model allows for the systematic analysis of healthcare observational databases. This is a python library to use the CDM v6 compliant databases using SQLAlchemy as the ORM. pyomop also supports converting query results to a pandas dataframe (see below) for use in machine learning pipelines. See some useful SQL Queries here.

Installation (stable)

pip install pyomop

Installation (current)

  • git clone this repository and:
pip install -e .

Usage >= 4.0.0 (Async)

from pyomop import CdmEngineFactory, CdmVocabulary, CdmVector, Cohort, Vocabulary, metadata
from sqlalchemy.future import select
import datetime
import asyncio

cdm = CdmEngineFactory()  # Creates SQLite database by default
# Postgres example (db='mysql' also supported)
# cdm = CdmEngineFactory(db='pgsql', host='', port=5432,
#                       user='', pw='',
#                       name='', schema='cdm6')

engine = cdm.engine
# Create Tables if required
asyncio.run(cdm.init_models(metadata))
# Create vocabulary if required
vocab = CdmVocabulary(cdm)
# vocab.create_vocab('/path/to/csv/files')  # Uncomment to load vocabulary csv files

# Add a cohort
async with cdm.session() as session:
    async with session.begin():
        session.add(Cohort(cohort_definition_id=2, subject_id=100,
            cohort_end_date=datetime.datetime.now(),
            cohort_start_date=datetime.datetime.now()))
    await session.commit()

# Query the cohort
stmt = select(Cohort).where(Cohort.subject_id == 100)
result = await session.execute(stmt)
for row in result.scalars():
    print(row)
    assert row.subject_id == 100

# Query the cohort pattern 2
cohort = await session.get(Cohort, 1)
print(cohort)
assert cohort.subject_id == 100

# Close session
await session.close()
await engine.dispose()

# Convert result to a pandas dataframe
vec = CdmVector()
vec.result = result
print(vec.df.dtypes)

# Execute SQL statetements
result = await vec.sql_df(cdm, 'TEST') # TEST is defined in sqldict.py
for row in result:
    print(row)

result = await vec.sql_df(cdm, query='SELECT * from cohort')
for row in result:
    print(row)

Usage <=3.2.0


from pyomop import CdmEngineFactory, CdmVocabulary, CdmVector, Cohort, Vocabulary, metadata
from sqlalchemy.sql import select
import datetime

cdm = CdmEngineFactory()  # Creates SQLite database by default

# Postgres example (db='mysql' also supported)
# cdm = CdmEngineFactory(db='pgsql', host='', port=5432,
#                       user='', pw='',
#                       name='', schema='cdm6')


engine = cdm.engine
# Create Tables if required
metadata.create_all(engine)
# Create vocabulary if required
vocab = CdmVocabulary(cdm)
# vocab.create_vocab('/path/to/csv/files')  # Uncomment to load vocabulary csv files

# Create a Cohort (SQLAlchemy as ORM)
session =  cdm.session
session.add(Cohort(cohort_definition_id=2, subject_id=100,
            cohort_end_date=datetime.datetime.now(),
            cohort_start_date=datetime.datetime.now()))
session.commit()

result = session.query(Cohort).all()
for row in result:
    print(row)

# Convert result to a pandas dataframe
vec = CdmVector()
vec.result = result
print(vec.df.dtypes)

# Execute a query and convert it to dataframe
vec.sql_df(cdm, 'TEST') # TEST is defined in sqldict.py
print(vec.df.dtypes) # vec.df is a pandas dataframe
# OR
vec.sql_df(cdm, query='SELECT * from cohort')
print(vec.df.dtypes) # vec.df is a pandas dataframe


command-line usage

pyomop -help

Other utils

Want to convert FHIR to pandas data frame? Try fhiry

Use the same functions in .NET and Golang!

Support

  • Postgres
  • MySQL
  • SqLite
  • More to follow..

Give us a star ⭐️

If you find this project useful, give us a star. It helps others discover the project.

Contributors