Skip to main content

A Python package to work with the HPO Ontology

Project description

A Python library to work with, analyze, filter and inspect the Human Phenotype Ontology

Visit the PyHPO Documentation for a more detailed overview of all the functionality.

Main features

It allows working on individual terms HPOTerm, a set of terms HPOSet and the full Ontology.

Internally the ontology is represented as a branched linked list, every term contains pointers to its parent and child terms. This allows fast tree traversal functioanlity.

The library is helpful for discovery of novel gene-disease associations and GWAS data analysis studies. At the same time, it can be used for oragnize clinical information of patients in research or diagnostic settings.

It provides an interface to create Pandas Dataframe from its data, allowing integration in already existing data anlysis tools.


An individual HPOTerm contains all info about itself as well as pointers to its parents and its children. You can access its information-content, calculate similarity scores to other terms, find the shortest or longes connection between two terms. List all associated genes or diseases, etc.


An HPOSet can be used to represent e.g. a patient’s clinical information. It allows some basic filtering and comparisons to other HPOSet s.


The Ontology represents all HPO terms and their connections and associations. It also contains pointers to associated genes and disease.

Installation / Setup

The easiest way to install PyHPO is via pip

pip install pyhpo


Some features of PyHPO require pandas. The standard installation via pip will not include pandas and PyHPO will work just fine. (You will get a warning on the initial import though). As long as you don’t try to create a pandas.DataFrame, everything should work without pandas. If you want to use all features, install pandas yourself:

pip install pandas


For a detailed description of how to use PyHPO, visit the PyHPO Documentation.

Getting started

from pyhpo.ontology import Ontology

ontology = Ontology()

# Iterate through all HPO terms
for term in ontology:
    # do something, e.g.

There are multiple ways to retrieve a single term out of an ontology:

# Retrieve a term via its HPO-ID
term = ontology.get_hpo_object('HP:0002650')

# ...or via the Integer representation of the ID
term = ontology.get_hpo_object(2650)

# ...or via shortcut
term = ontology[2650]

# ...or by term name
term = ontology.get_hpo_object('Scoliosis')

You can also do substring search on term names and synonyms:

# returns an Iterator over all matches
for term in'Abn'):

Find the shortest path between two terms:

    'Abnormality of the nervous system',

Working with terms

# check the relationship of two terms

# get the information content for OMIM diseases

# ...or for genes

# compare two terms
term.similarity_score(term2, method='resnik', kind='gene')

Working with sets

# Create a clinical information set of HPO Terms
clinical_info = pyhpo.HPOSet([

# Extract only child nodes and leave out all parent terms
children = clinical_info.child_nodes()

# Calculate the similarity of two Sets
sim_score = clinical_info.similarity(other_set)

and many more examples in the PyHPO Documentation


Yes, please do so. I would appreciate any help, suggestions for improvement or other feedback. Just create a pull-request or open an issue.


PyHPO is released under the MIT license.

PyHPO is using the Human Phenotype Ontology. Find out more at

Sebastian Köhler, Leigh Carmody, Nicole Vasilevsky, Julius O B Jacobsen, et al. Expansion of the Human Phenotype Ontology (HPO) knowledge base and resources. Nucleic Acids Research. (2018) doi: 10.1093/nar/gky1105

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for pyhpo, version 1.1.2
Filename, size File type Python version Upload date Hashes
Filename, size pyhpo-1.1.2-py3-none-any.whl (6.7 MB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size pyhpo-1.1.2.tar.gz (6.6 MB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page