让我们使用 NetworkX 和 Plotly 使其具有交互性。
创建知识图谱
首先,我们定义代表知识图谱中关系的数据。我们有三个列表:head、relation和tail,分别表示起始实体、实体之间的关系和结束实体。我们从定义的列表创建一个数据框,并使用 NetworkX 创建关系的图形表示。
import pandas as pd
import networkx as nx
import plotly.graph_objects as go
# Define the heads, relations, and tails
head = ['drugA', 'drugB', 'drugC', 'drugD', 'drugA', 'drugC', 'drugD', 'drugE', '基因1', '基因2','基因3', '基因4', '基因50', '基因2', '基因3', '基因4']
#relation = ['treats', 'treats', 'treats', 'treats', 'inhibits', 'inhibits', 'inhibits', 'inhibits', 'associated', 'associated', 'associated', 'associated', 'associated', 'interacts', 'interacts', 'interacts']
relation = [ '治疗' , '治疗' , '治疗' , '治疗' , '抑制' , '抑制' , '抑制' , '抑制' , '相关' , '相关' , '相关' , '相关' , '相关' , '相互作用' , '相互作用' , '相互作用' ]
#tail = ['fever', 'hepatitis', 'bleeding', 'pain', 'gene1', 'gene2', 'gene4', 'gene20', 'obesity', 'heart_attack', 'hepatitis', 'bleeding', 'cancer', 'gene1', 'gene20', 'gene50']
tail = [ '发烧' , '肝炎' ,'出血' , '疼痛' , '基因1' ,'gene2' , 'gene4' , 'gene20' , 'obesity' , 'heart_attack' , 'hepatitis' , 'bleeding' , 'cancer' , 'gene1' , 'gene20' , 'gene50' ]
# Create a dataframe
df = pd.DataFrame({'head': head, 'relation': relation, 'tail': tail})
# Create a graph
G = nx.Graph()
for _, row in df.iterrows():
G.add_edge(row['head'], row['tail'], label=row['relation'])
节点定位
接下来,我们定义节点定位,这是图形可视化的一个重要方面。在这里,我们确定节点(实体)在画布上的放置位置,使图形更具视觉组织性和可读性。在此示例中,我们将使用 Fruchterman-Reingold 布局算法(一种力导向布局)来定位节点。
网友评论