使用CSV文件建立PYG数据集,进行分子预测
使用自己的分子数据集(csv,sdf,mol2)来创建适用于PyG的任务。
需要的第三方库
rdkit, pytorch, pyg,
文章目录
前言
在使用图神经网络进行任务是,我们有些仅仅使用轮子,所以要使用自己的数据集来预测某些指标。所以我们就需要用自己的数据集建立适合PyG的Dataset。
一.步骤
PyG有两种方法建立数据集,一种是直接读到内存中去的InMemoryDataset,限制是你的内存大小,还有一种是建立比较大的数据集的Dataset。这次我主要向分享比较全能使用的Dataset。
代码如下(示例):
import pandas as pd
import torch
from torch_geometric.data import Dataset, Data
import numpy as np
from scipy.sparse import coo_matrix
import os
from rdkit import Chem
from rdkit.Chem.rdmolops import GetAdjacencyMatrix
class mydataset(Dataset):
def __init__(self, root, transform=None, pre_transform=None):
super(mydataset, self).__init__(root, transform, pre_transform)
@property
def raw_file_names(self):
return 'fda1.csv'
@property
def processed_file_names(self):
self.data = pd.read_csv(self.raw_paths[0]).reset_index()
return [f'data_{i}.pt' for i in list(self.data.index)]
def download(self):
pass
def process(self):
data = pd.read_csv(self.raw_paths[0])
smiles = data['smiles'].values.tolist()
label = self.get_label(data['values']).tolist()[0]
for index, (smi, y) in enumerate(zip(smiles, label)):
mol = Chem.MolFromSmiles(smi)
n_nodes = mol.GetNumAtoms()
n_edges = 2 * mol.GetNumBonds()
unrelated_smiles = 'O=O'
unrelated_mol = Chem.MolFromSmiles(unrelated_smiles)
n_node_features = len(self.get_atom_features(unrelated_mol.GetAtomWithIdx(0)))
n_edge_features = len(self.get_bond_feature(unrelated_mol.GetBondBetweenAtoms(0, 1)))
x = np.zeros((n_nodes, n_node_features))
y = np.array(y)
y = torch.tensor(np.array