Source code for pyhealth.medcode.codes.atc
from typing import List
from pyhealth.medcode.inner_map import InnerMap
from pyhealth.medcode.utils import download_and_read_csv
[docs]class ATC(InnerMap):
"""Anatomical Therapeutic Chemical."""
def __init__(self, **kwargs):
super(ATC, self).__init__(vocabulary="ATC", **kwargs)
self.ddi = dict()
[docs] @staticmethod
def convert(code: str, level=5):
"""Convert ATC code to a specific level."""
if type(level) is str:
level = int(level)
assert level in [1, 2, 3, 4, 5]
if level == 1:
return code[:1]
elif level == 2:
return code[:3]
elif level == 3:
return code[:4]
elif level == 4:
return code[:5]
else:
return code
[docs] def get_ddi(
self, gamenet_ddi: bool = False, refresh_cache: bool = False
) -> List[str]:
"""Gets the drug-drug interactions (DDI).
Args:
gamenet_ddi: Whether to use the DDI from the GAMENet paper,
which is a subset of the DDI from the ATC.
refresh_cache: Whether to refresh the cache. Default is False.
"""
filename = "DDI_GAMENet.csv" if gamenet_ddi else "DDI.csv"
if filename not in self.ddi or refresh_cache:
df = download_and_read_csv(filename, refresh_cache)
ddi = []
for idx, row in df.iterrows():
ddi.append([row["ATC i"], row["ATC j"]])
self.ddi[filename] = ddi
return self.ddi[filename]
if __name__ == "__main__":
code_sys = ATC(refresh_cache=True)
code_sys.stat()
print(code_sys.lookup("N01AB07"))
print(code_sys.lookup("N01AB07", attribute="level"))
print(code_sys.lookup("N01AB07", attribute="description"))
print(code_sys.lookup("N01AB07", attribute="indication"))
print(code_sys.lookup("N01AB07", attribute="smiles"))
print(code_sys.lookup("N01AB07", attribute="drugbank_id"))
print(code_sys.get_ancestors("N01AB07"))
print(code_sys.get_descendants("N01AB"))
print(len(code_sys.get_ddi(gamenet_ddi=True)))
print(len(code_sys.get_ddi(gamenet_ddi=False)))