计算生物学习——Code_创建异构图②

根据上一篇博客安装好dgl:计算生物学习——Code_创建异构图_①安装dgl-CSDN博客

一. 读取数据集

import torch as th
print(th.__version__)
import pandas as pd
import dgl
print(dgl.__version__)

# 1. 读取数据集_路径根据实际情况替换
dti_path = '/home/embark/rain/H/BindingDB_all.csv'
ddi_path = '/home/embark/rain/H/drugbank_ddi.csv'
ppi_path = '/home/embark/rain/wenxue/H/HuRI_ppi.csv'

dti_data = pd.read_csv(dti_path)
ddi_data = pd.read_csv(ddi_path)
ppi_data = pd.read_csv(ppi_path)

# 打印数据集的前几行以确认读取成功
print("DTI Data:")
print(dti_data.head())

print("\nDDI Data:")
print(ddi_data.head())

print("\nPPI Data:")
print(ppi_data.head())

结果如下:

二. 转换ID列

将ID列转换为类别型数据并将类别转换为数值编码的作用是将原本可能是字符串类型的ID(如Drug_IDTarget_ID等)转换成数值类型。这样做的目的是便于后续在图计算中处理这些ID,因为大多数图计算库(包括DGL)要求节点和边的ID是数值类型。

  • 类别型数据转换

    • astype('category'):将ID列转换为类别型数据category)。
    • cat.codes:将类别型数据的每个唯一值映射为一个整数代码。这些整数代码是连续的,从0开始,每个唯一值对应一个唯一的整数代码。
  • 保持相同ID的一致性

    • 同一个ID(例如,同一个Drug_IDProtein_ID会被转换成相同的整数代码。这确保了在不同的数据集中(如DTI和PPI数据集中)出现的相同ID会被映射成相同的整数值。
# 将ID列转换为类别型,然后转换为数值型
dti_data['Drug_ID'] = dti_data['Drug_ID'].astype('category').cat.codes
dti_data['Target_ID'] = dti_data['Target_ID'].astype('category').cat.codes
ddi_data['Drug1_ID'] = ddi_data['Drug1_ID'].astype('category').cat.codes
ddi_data['Drug2_ID'] = ddi_data['Drug2_ID'].astype('category').cat.codes
ppi_data['Protein1_ID'] = ppi_data['Protein1_ID'].astype('category').cat.codes
ppi_data['Protein2_ID'] = ppi_data['Protein2_ID'].astype('category').cat.codes

三. 创建异构图的边数据

# 创建异构图的边数据
graph_data = {
    ('drug', 'interacts_with', 'protein'): (th.tensor(dti_data['Drug_ID'].values, dtype=th.long), th.tensor(dti_data['Target_ID'].values, dtype=th.long)),
    ('drug', 'interacts_with', 'drug'): (th.tensor(ddi_data['Drug1_ID'].values, dtype=th.long), th.tensor(ddi_data['Drug2_ID'].values, dtype=th.long)),
    ('protein', 'interacts_with', 'protein'): (th.tensor(ppi_data['Protein1_ID'].values, dtype=th.long), th.tensor(ppi_data['Protein2_ID'].values, dtype=th.long))
}

四. 创建异构图

# 创建DGL异构图
hetero_graph = dgl.heterograph(graph_data)

# 打印异构图的信息
print(hetero_graph)

# 打印节点和边类型信息
print("Node types:", hetero_graph.ntypes)
print("Edge types:", hetero_graph.etypes)

print(hetero_graph)

Graph(num_nodes={'drug': 10636, 'protein': 6454},
      num_edges={('drug', 'interacts_with', 'drug'): 191808, ('drug', 'interacts_with', 'protein'): 52274, ('protein', 'interacts_with', 'protein'): 52369},
      metagraph=[('drug', 'drug', 'interacts_with'), ('drug', 'protein', 'interacts_with'), ('protein', 'protein', 'interacts_with')])

1. num_nodes:每种类型的节点的数量。

  • drug: 10636个药物节点
  • protein: 6454个蛋白节点

2. num_edges:每种类型的边的数量。每种边类型由三元组(源节点类型,边类型,目标节点类型)表示。

  • ('drug', 'interacts_with', 'drug'): 药物-药物之间的边有191808条。
  • ('drug', 'interacts_with', 'protein'): 药物-蛋白之间的边有52274条。
  • ('protein', 'interacts_with', 'protein'): 蛋白-蛋白之间的边有52369条。

3. metagraph:节点类型和边类型之间的关系。

  • ('drug', 'drug', 'interacts_with'): 表示drug节点之间存在interacts_with关系。
  • ('drug', 'protein', 'interacts_with'): 表示drug节点与protein节点之间存在interacts_with关系。
  • ('protein', 'protein', 'interacts_with'): 表示protein节点之间存在interacts_with关系。


  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值