作为一个被化学折磨了十几年的转码人,最近在跑分子生成模型时,遇到了这样一个困扰,从分子生成模型中输出的是一个包含大量smiles编码的表格,就这样子的:
但我想看到的是这个样子的:
就是一列smiles编码,一列对应分子结构的模式,这样在浏览数据时可以通过化学结构更方便的对数据进行判断。
要满足这个需求,需要用到rdkit的中的Draw模块,此处贴上最好用的资料,官方文档:rdkit.Chem.Draw package — The RDKit 2022.03.1 documentation
接下来演示一下我实现这个过程用到的小demo:
import pandas as pd
import xlsxwriter
import openpyxl
from rdkit import Chem
from rdkit.Chem import Draw
from rdkit.Chem.Draw.MolDrawing import MolDrawing,DrawingOptions
# 读入要处理的数据
df = pd.read_excel('dataset.xlsx', engine='openpyxl',header=None)
# 根据smiles编码生成图片,生成的图片挡在generation文件夹中
def generation_images(data):
draw = data.smiles.tolist()
for i in draw:
mol = Chem.MolFromSmiles(i)
Draw.MolToFile(mol,f'./generation/img{i}.png',size=(150,100))
# 创建excel表格,将生成的图片读入
def load_images(data):
workbook = xlsxwriter.Workbook('dataset_with_iamges.xlsx')
worksheet = workbook.add_worksheet()
for i,j in enumerate(data.smiles.tolist()):
worksheet.write(f'A{i+1}', f'{j}')
worksheet.insert_image(f'B{i+1}', f'./generation/img{j}.png')
workbook.close()
generation_images(df)
load_images(df)