{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Loading an OBO ontology into a `networkx` graph" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ontology are commonly represented as knowledge graphs, and the OBO language can express an ontology as an RDF graph, with terms as nodes and relationships as edges. \n", "\n", "As an example, here is how the *hexose biosynthetic process* and its superclasses in the [Gene Ontology](http://geneontology.org/docs/ontology-documentation/) can be represented as a graph, with edges showing the `rdfs:subClassOf` relationships:\n", "\n", "[![graph.png](./graph.png)](https://amigo.geneontology.org/amigo/term/GO:0019319)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`fastobo` can be used to load the data from an OBO document and to build a graph using [NetworkX](https://networkx.org/), a graph library for Python. For this example, we will use the [Phenotype And Trait Ontology](http://www.obofoundry.org/ontology/pato.html). Let's start by creating an empty `DiGraph`:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import networkx\n", "knowledge_graph = networkx.DiGraph()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To load the latest version of PATO, we can use the Persistent URL form the OBO library which always resolves to the most up-to-date version:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import urllib.request\n", "import fastobo\n", "\n", "with urllib.request.urlopen(\"http://purl.obolibrary.org/obo/pato.obo\") as response:\n", " pato = fastobo.load(response)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we can populate the knowledge graph with all the terms that were just loaded, and add a link for every `is_a` clause appearing:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "for frame in pato:\n", " if isinstance(frame, fastobo.term.TermFrame):\n", " knowledge_graph.add_node(str(frame.id))\n", " for clause in frame: \n", " if isinstance(clause, fastobo.term.IsAClause):\n", " knowledge_graph.add_edge(str(frame.id), str(clause.term))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Most OBO ontologies are DAGs, and PATO should be one as well:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "networkx.is_directed_acyclic_graph(knowledge_graph)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we can have a look at only a portion of the graph, just like in the GO term example. Let's use `networkx.descendants` to extract the superclasses of an arbitrary PATO term:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "superclass_nodes = networkx.descendants(knowledge_graph, \"PATO:0000297\")\n", "superclass_nodes.add(\"PATO:0000297\")\n", "super_graph = knowledge_graph.subgraph(superclass_nodes)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can then draw the subgraph of `PATO:0000297` and its superclasses using the drawing capabilities of `networkx`:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from networkx.drawing.nx_agraph import graphviz_layout\n", "networkx.draw(super_graph, pos=graphviz_layout(super_graph, prog=\"dot\"), with_labels=True, arrows=True)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.1" } }, "nbformat": 4, "nbformat_minor": 4 }