Реализация кодирования для создания, аннотирования и визуализации сложных графов биологических знаний с помощью PyBEL

В этом руководстве мы рассмотрим, как использовать экосистему PyBEL для построения и анализа сложных графов биологических знаний непосредственно в Google Colab.

Шаг 1: установка необходимых пакетов

Сначала мы устанавливаем все необходимые пакеты, включая PyBEL, NetworkX, Matplotlib, Seaborn и Pandas.

“`python
!pip install pybel pybel-tools networkx matplotlib seaborn pandas -q
“`

Затем мы импортируем основные модули и подавляем предупреждения, чтобы наш блокнот был чистым и сосредоточенным на результатах.

“`python
import pybel
import pybel.dsl as dsl
from pybel import BELGraph
from pybel.io import topickle, frompickle
import networkx as nx
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from collections import Counter
import warnings
warnings.filterwarnings(‘ignore’)
“`

Шаг 2: построение графа биологических знаний

Мы начинаем с создания графа BEL с метаданными для пути болезни Альцгеймера и определяем белки и процессы с помощью DSL PyBEL.

“`python
print(“\n1. Building a Biological Knowledge Graph”)
print(“-” * 40)

graph = BELGraph(
name=”Alzheimer’s Disease Pathway”,
version=”1.0.0″,
description=”Example pathway showing protein interactions in AD”,
authors=”PyBEL Tutorial”
)

app = dsl.Protein(name=”APP”, namespace=”HGNC”)
abeta = dsl.Protein(name=”Abeta”, namespace=”CHEBI”)
tau = dsl.Protein(name=”MAPT”, namespace=”HGNC”)
gsk3b = dsl.Protein(name=”GSK3B”, namespace=”HGNC”)
inflammation = dsl.BiologicalProcess(name=”inflammatory response”, namespace=”GO”)
apoptosis = dsl.BiologicalProcess(name=”apoptotic process”, namespace=”GO”)

graph.add_increases(app, abeta, citation=”PMID:12345678″, evidence=”APP cleavage produces Abeta”)
graph.add_increases(abeta, inflammation, citation=”PMID:87654321″, evidence=”Abeta triggers neuroinflammation”)

tau_phosphorylated = dsl.Protein(name=”MAPT”, namespace=”HGNC”,
variants=[dsl.ProteinModification(“Ph”)])
graph.addincreases(gsk3b, tauphosphorylated, citation=”PMID:11111111″, evidence=”GSK3B phosphorylates tau”)
graph.addincreases(tauphosphorylated, apoptosis, citation=”PMID:22222222″, evidence=”Hyperphosphorylated tau causes cell death”)
graph.add_increases(inflammation, apoptosis, citation=”PMID:33333333″, evidence=”Inflammation promotes apoptosis”)

graph.add_association(abeta, tau, citation=”PMID:44444444″, evidence=”Abeta and tau interact synergistically”)

print(f”Created BEL graph with {graph.numberofnodes()} nodes and {graph.numberofedges()} edges”)
“`

Шаг 3: расширенный сетевой анализ

Мы вычисляем степени, центральности по посредничеству и близости, чтобы количественно оценить важность каждого узла в графе.

“`python
print(“\n2. Advanced Network Analysis”)
print(“-” * 30)

degreecentrality = nx.degreecentrality(graph)
betweennesscentrality = nx.betweennesscentrality(graph)
closenesscentrality = nx.closenesscentrality(graph)

mostconnectednode = max(degreecentrality, key=degreecentrality.get)
print(f”Most connected node: {mostconnectednode}”)
print(f”Degree centrality: {degreecentrality[mostconnected_node]:.3f}”)
“`

Шаг 4: классификация биологических сущностей

Мы классифицируем каждый узел по его функции, такой как белок или биологический процесс, и подсчитываем их количество.

“`python
print(“\n3. Biological Entity Classification”)
print(“-” * 35)

node_types = Counter()
for node in graph.nodes():
node_types[node.function] += 1

print(“Node distribution:”)
for func, count in node_types.items():
print(f” {func}: {count}”)
“`

Шаг 5: анализ путей

Мы разделяем все белки и процессы, чтобы измерить объём и сложность пути.

“`python
print(“\n4. Pathway Analysis”)
print(“-” * 20)

proteins = [node for node in graph.nodes() if node.function == ‘Protein’]
processes = [node for node in graph.nodes() if node.function == ‘BiologicalProcess’]

print(f”Proteins in pathway: {len(proteins)}”)
print(f”Biological processes: {len(processes)}”)

edge_types = Counter()
for u, v, data in graph.edges(data=True):
edge_types[data.get(‘relation’)] += 1

print(“\nRelationship types:”)
for rel, count in edge_types.items():
print(f” {rel}: {count}”)
“`

Шаг 6: анализ литературных доказательств

Мы извлекаем идентификаторы цитирования и строки доказательств из каждого ребра, чтобы оценить обоснованность нашего графа в опубликованных исследованиях.

“`python
print(“\n5. Literature Evidence Analysis”)
print(“-” * 32)

citations = []
evidences = []
for , , data in graph.edges(data=True):
if ‘citation’ in data:
citations.append(data[‘citation’])
if ‘evidence’ in data:
evidences.append(data[‘evidence’])

print(f”Total citations: {len(citations)}”)
print(f”Unique citations: {len(set(citations))}”)
print(f”Evidence statements: {len(evidences)}”)
“`

Шаг 7: анализ подграфов

Мы изолируем подграф воспаления, собирая его прямых соседей, что даёт нам сфокусированный взгляд на воспалительном взаимодействии.

“`python
print(“\n6. Subgraph Analysis”)
print(“-” * 22)

inflammation_nodes = [inflammation]
inflammation_neighbors = list(graph.predecessors(inflammation)) + list(graph.successors(inflammation))
inflammationsubgraph = graph.subgraph(inflammationnodes + inflammation_neighbors)

print(f”Inflammation subgraph: {inflammationsubgraph.numberofnodes()} nodes, {inflammationsubgraph.numberofedges()} edges”)
“`

Шаг 8: расширенный запрос графиков

Мы перечисляем простые пути между APP и апоптозом, чтобы изучить механизмы и выявить ключевые промежуточные звенья.

“`python
print(“\n7. Advanced Graph Querying”)
print(“-” * 28)

try:
paths = list(nx.allsimplepaths(graph, app, apoptosis, cutoff=3))
print(f”Paths from APP to apoptosis: {len(paths)}”)
if paths:
print(f”Shortest path length: {len(paths[0])-1}”)
except nx.NetworkXNoPath:
print(“No paths found between APP and apoptosis”)

apoptosis_inducers = list(graph.predecessors(apoptosis))
print(f”Factors that increase apoptosis: {len(apoptosis_inducers)}”)
“`

Шаг 9: экспорт данных и визуализация

Мы готовим матрицы смежности и метки узлов для последующего использования и генерируем многопанельную фигуру, показывающую структуру сети, распределения центральности, пропорции типов узлов и количество типов отношений.

“`python
print(“\n8. Data Export and Visualization”)
print(“-” * 35)

adjmatrix = nx.adjacencymatrix(graph)
node_labels = [str(node) for node in graph.nodes()]

plt.figure(figsize=(12, 8))

plt.subplot(2, 2, 1)
pos = nx.spring_layout(graph, k=2, iterations=50)
nx.draw(graph, pos, withlabels=False, nodecolor=’lightblue’,
nodesize=1000, fontsize=8, font_weight=’bold’)
plt.title(“BEL Network Graph”)

plt.subplot(2, 2, 2)
centralities = list(degree_centrality.values())
plt.hist(centralities, bins=10, alpha=0.7, color=’green’)
plt.title(“Degree Centrality Distribution”)
plt.xlabel(“Centrality”)
plt.ylabel(“Frequency”)

plt.subplot(2, 2, 3)
functions = list(node_types.keys())
counts = list(node_types.values())
plt.pie(counts, labels=functions, autopct=’%1.1f%%’, startangle=90)
plt.title(“Node Type Distribution”)

plt.subplot(2, 2, 4)
relations = list(edge_types.keys())
relcounts = list(edgetypes.values())
plt.bar(relations, rel_counts, color=’orange’, alpha=0.7)
plt.title(“Relationship Types”)
plt.xlabel(“Relation”)
plt.ylabel(“Count”)
plt.xticks(rotation=45)

plt.tight_layout()
plt.show()
“`

В этом руководстве мы продемонстрировали возможности и гибкость PyBEL для моделирования сложных биологических систем. Мы показали, как легко можно построить курируемый граф взаимодействий при болезни Альцгеймера, выполнить сетевой анализ для выявления ключевых узлов-хабов и извлечь биологически значимые подграфы для целенаправленного изучения.

1. Какие инструменты и библиотеки используются для построения и анализа графов биологических знаний в данном руководстве?

В данном руководстве используются следующие инструменты и библиотеки: PyBEL, NetworkX, Matplotlib, Seaborn, Pandas.

2. Какие шаги необходимо выполнить для построения графа биологических знаний с помощью PyBEL?

Для построения графа биологических знаний с помощью PyBEL необходимо выполнить следующие шаги:
* установить все необходимые пакеты;
* импортировать основные модули;
* создать граф BEL с метаданными для пути болезни Альцгеймера;
* определить белки и процессы с помощью DSL PyBEL;
* добавить связи между узлами графа.

3. Какие виды анализа можно провести с помощью графа биологических знаний, построенного с помощью PyBEL?

С помощью графа биологических знаний, построенного с помощью PyBEL, можно провести следующие виды анализа:
* вычисление степеней, центральности по посредничеству и близости для количественной оценки важности каждого узла в графе;
* классификация каждого узла по его функции, такой как белок или биологический процесс;
* подсчёт количества узлов каждого типа;
* анализ путей для измерения объёма и сложности пути;
* анализ литературных доказательств для оценки обоснованности графа в опубликованных исследованиях;
* анализ подграфов для изучения механизмов и выявления ключевых промежуточных звеньев.

4. Какие методы визуализации используются для представления структуры сети в данном руководстве?

Для представления структуры сети в данном руководстве используется метод визуализации с помощью Matplotlib. Создаётся многопанельная фигура, показывающая структуру сети, распределения центральности, пропорции типов узлов и количество типов отношений.

5. Какие данные экспортируются для последующего использования после анализа графа биологических знаний?

После анализа графа биологических знаний экспортируются следующие данные:
* матрица смежности;
* метки узлов;
* результаты сетевого анализа (степени, центральности).

Источник

Оставьте комментарий