Skip to content
/ phemap Public

Functions to map between ICD-10 terms and PheCodes for UK Biobank hospital electronic health records

License

Notifications You must be signed in to change notification settings

spiros/phemap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Phemap Build Status

This utility provides some very basic functions to map between ICD-10 terms used in hospital diagnoses for UK Biobank and PheCodes as outlined in Wu P. et al. https://www.biorxiv.org/content/10.1101/462077v5

Requires the phecode definitions file and the icd10-to-phecode mapping file - you can grab the latest version of both files from https://phewascatalog.org/phecodes

Notes

UK Biobank secondary care data are coded using ICD-10 but the dot has been stripped out i.e. "I21.0 Ischaemic heart disease" is recorded as 'I210' so you will need to add the dot separator prior to attempting to match.

Not all ICD-10 terms are mapped to PheCodes and not all PheCodes which are mapped to ICD-10 terms appear to have a valid definition in the PheCodes definition file. Mappings are usually one-to-one but can also be one-to-many:

Of all possible ICD-10 codes, 9,165 (76.20%) mapped to at least one PheCode, and 289 (2.40%) mapped to >1 PheCode. ICD-10 code B21.1 (HIV disease resulting in Burkitt’s lymphoma) maps to two PheCodes: 071.1 (HIV infection, symptomatic) and 202.2 (Non-Hodgkin's lymphoma).

Examples

from phemap import Phemap

source_file = 'data/phecode_definitions1.2.csv'
mapping_file = 'data/phecode_map_v1_2_icd10_beta.csv'

phemap = Phemap(source_file=source_file, mapping_file=mapping_file)

>>> phemap.get_icd_for_phecode('495')
['J45.8', 'J45', 'J45.1', 'J45.0', 'J45.9']

>>> phemap.get_phecode_for_icd10('J45.1')
'495'

>>> phemap.get_phecode_info('495')
{'phecode': '495',
 'phenotype': 'Asthma',
 'phecode_exclude_range': '490-498.99',
 'sex': nan,
 'rollup': '1',
 'leaf': '0',
 'category_number': '9',
 'category': 'respiratory',
 'phecode_num': 495.0}

>>> phemap.get_phecode_exclusions('495')
['495',
 '495.1',
 '495.11',
 '495.2',
 '496',
 '496.1',
 '496.2',
 '496.21',
 '496.3',
 '497',
 '498']

>>> all_phecodes = phemap.get_all_phecodes()
>>> all_phecodes[10]
{'phecode': '038.1',
 'phenotype': 'Gram negative septicemia',
 'phecode_exclude_range': '010-041.99',
 'sex': 'Both',
 'rollup': '1',
 'leaf': '1',
 'category_number': '1',
 'category': 'infectious diseases',
 'phecode_num': 38.1}

Useful reading material

https://www.biorxiv.org/content/10.1101/462077v4

https://www.ncbi.nlm.nih.gov/pubmed/20335276

https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0175508

About

Functions to map between ICD-10 terms and PheCodes for UK Biobank hospital electronic health records

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages