RDKit一站式搞定分子读取、输出、可视化

RDKit⼀站式搞定分⼦读取输出、可视化
⽂章⽬录
⼀、简介
让计算机识别分⼦结构是计算化学码农的必备技能,也是对分⼦进⾏后续操作的基础。本⽂整理和总结了rdkit进⾏读取、输出和可视化的⼀些⽅法,包含对SMILES、SDF、MOL、MOL2、CSV等⽂件的处理,以及分⼦的结构展⽰。
⼆、读取分⼦
2.1.读SMILES/SMARTS
2.1.1.直接读字符串
从SMILES/SMARTS直接读取
很简单了,不必多说
>>>from rdkit import Chem
>>> m = Chem.MolFromSmiles('C[C@H](O)c1ccccc1')
>>> m = Chem.MolFromSmarts('Cc1ccccc1')
2.1.2.⽂件批量读取
⽂件类似这样(格式化的就⾏):
SMILES Name
C1=CC=CC=CC=C10
c1ccccc11
c1cocc12
从.smi批量读取:SmilesMolSupplier(data, delimiter, smilesColumn, nameColumn, titleLine, sanitize)
data:数据⽂件
delimiter:分隔符,默认为’ ’
笼天地于形内 挫万物于笔端
smilesColumn:SMILES所在列,默认为0
nameColumn:SMILES名称所在列,默认为1
titleLine:是否含有标题⾏,默认True
sanitize:是否检查正确性,默认True
>>> suppl = Chem.SmilesMolSupplier('data/batch_smiles.smi', delimiter='\t')
>>> mols =[Chem.MolToSmiles(mol)for mol in suppl]
>>>print(mols)
['C1=CC=CC=CC=C1','c1ccccc1','c1ccoc1']
2.1.
3.⽂本批量读取
从⽂本批量读取:SmilesMolSupplierFromText()
参数基本同上
>>>with open('data/batch_smiles.smi','r')as f:
>>>    mols_text = f.read()
>>> suppl = Chem.SmilesMolSupplierFromText(mols_text, delimiter='\t')
>>> mols =[Chem.MolToSmiles(mol)for mol in suppl]
>>>print(mols)
['C1=CC=CC=CC=C1','c1ccccc1','c1ccoc1']
2.1.4.DataFrame批量读取
读取DataFrame中的SMILES:AddMoleculeColumnToFrame(frame, smilesCol, molCol, includeFingerprints) frame:DataFrame对象
smilesCol:SMILES所在列
molCol:新列名,将存放产⽣的rdkit mol对象
includeFingerprints:是否⽣成指纹
顺便计算下分⼦量:Descriptors.MolWt()
>>>import pandas as pd
>>>from rdkit.Chem import Descriptors
>>>from rdkit.Chem import PandasTools
>>> df = pd.read_csv('data/smiles_df.csv')
>>> PandasTools.AddMoleculeColumnToFrame(df,'SMILES','mol',includeFingerprints=True)
>>> df['MW']= df['mol'].apply(Descriptors.MolWt)
>>> df.head(2)
Name                SMILES                        mol        MW
0    Lanreotide    c1(c2c(cccc2)[nH...<img data-content="rd...1096.347
1  Lansoprazole    Cc1c(OCC(F)(F)F)...<img data-content="rd...369.368
2.2.读.sdf
2.2.1.⽂件批量读取
从.sdf⾥批量读取:SDMolSupplier(fileName, sanitize, removeHs, strictParsing)sciencedirect
fileName:⽂件名
sanitize:检查化合价,计算芳⾹性、共轭、杂化、kekule,默认True
removeHs:是否隐藏氢原⼦,默认True
strictParsing:是否使⽤严格模式进⾏解析,默认True
>>> suppl = Chem.SDMolSupplier('data/batch.sdf')
>>> mols =[Chem.MolToSmiles(mol)for mol in suppl if mol]
>>>print(mols)
['C1=C\\C=C/C=C\\C=C/1','c1ccccc1','c1ccoc1']
2.2.2.压缩包批量读取
从file object/.gz⾥读取
>>>import gzip
>>> gz_file = gzip.open('data/','r')
>>> suppl = Chem.ForwardSDMolSupplier(gz_file)
>>> mols =[Chem.MolToSmiles(mol)for mol in suppl if mol]
>>>print(mols)
>>> f.close()
['C1=C\\C=C/C=C\\C=C/1','c1ccccc1','c1ccoc1']
2.3.读.mol
从.mol⾥读取:MolFromMolFile(fileName, sanitize, removeHs, strictParsing)
参数同上
>>> m = Chem.MolFromMolFile('l')
>>>print(Chem.MolToSmiles(mol))
c1cocc1
2.4.读.mol2
不推荐,容易出bug:MolFromMol2File(…)
参数同上
>>> m = Chem.MolFromMol2File('l2')
>>>print(Chem.MolToSmiles(mol))
c1cocc1
2.5.读其他格式:pdb, fasta, peptide, …
其他格式⼤同⼩异,不再赘述了,⽅法如下,感兴趣可⾃⼰尝试
# PDB
>>> Chem.MolFromPDBFile()
>>> Chem.MolFromPDBBlock()
# FASTA
>>> Chem.MolFromFASTA()地质剖面图
# peptide
>>> Chem.MolFromSequence()
三、输出分⼦
3.1.输出SMILES/SMARTS
3.1.1.输出默认式济源研修茶座
输出SMILES:MolToSmiles(mol, isomericSmiles, kekuleSmiles, canonical, …)
kekuleSmiles:默认False,不使⽤kekule时:脂肪族碳⽤"C"表⽰(⼤写),芳⾹族⽤"c"表⽰(⼩写)isomericSmiles:默认True,区分同分异构体("@“表⽰⼿性,”\“和”/"表⽰顺反异构)
canonical:默认True,输出标准SMILES
>>> m1 = Chem.MolFromSmiles('C1=CC=CC=CC=C1')
>>> m2 = Chem.MolFromSmiles('C1=CC=CC=C1')
>>> m3 = Chem.MolFromSmiles('C1=COC=C1')
>>> mols =[m1, m2, m3]
>>>print([Chem.MolToSmiles(mol)for mol in mols])
['C1=CC=CC=CC=C1','c1ccccc1','c1ccoc1']
3.1.2.输出kekule式
输出kekule形式
kekule形式:在符合4N+2规则的芳⾹体系中,通过使⽤双键代替⼩写的碳原⼦来表⽰芳⾹性
4N+2规则:也叫Hueckel规则,在闭环共轭体系中,当π电⼦数为4n+2时,才具有芳⾹性
>>>for mol in mols:
>>>    Chem.Kekulize(mol)
>>>print([Chem.MolToSmiles(mol, kekuleSmiles=True)for mol in mols])
['C1=CC=CC=CC=C1','C1=CC=CC=C1','C1=COC=C1']
注:m1有共轭结构,但不属于芳⾹系统。m3中氧提供了2个π电⼦,碳各提供1个,总数为6,属于芳⾹系统3.1.3.设置⽴体参数
不区分同分异构体
通过isomericSmiles控制
>>> m4 = Chem.MolFromSmiles('C[C@H](O)c1ccccc1')
>>>print(Chem.MolToSmiles(m4))
C[C@H](O)c1ccccc1
>>>print(Chem.MolToSmiles(m4, isomericSmiles=False))
CC(O)c1ccccc1
3.1.
4.批量输出SMILES
批量输出SMILES:SmilesWriter(fileName, delimiter, includeHeader, nameHeader, isomericSmiles, kekuleSmiles) fileName:输出⽂件名
delimiter:分隔符,默认为空格’ ’
includeHeader:是否写⼊表头,默认True
nameHeader:分⼦名⼀列的列名,默认’Name’
isomericSmiles:⽴体信息,默认True
kekuleSmiles:kekule形式,默认False
>>> writer = Chem.SmilesWriter('data/batch.smi', delimiter='\t')
琼斯模型>>>for i, mol in enumerate(mols):
>>>    writer.write(mol)
>>> writer.close()
输出结果:就是2.1.2.表格中的样⼦
3.1.5.批量输出SMILES和属性
批量输出SMILES及属性,通过以下函数进⾏操作:
mol.GetPropNames(),查看分⼦属性列表
mol.GetProp(),获取相应属性
mol.SetProp(key, val),新增属性名key、对应属性值val
writer.SetProps(),设置哪些属性要输出
以输出分⼦量和LogP为例
使⽤Descriptors计算属性,并添加
>>> writer = Chem.SmilesWriter('data/batch_smiles.smi', delimiter='\t', nameHeader='mol_id')
>>> writer.SetProps(['LOGP','MW'])
>>>for i, mol in enumerate(mols):
>>>    mw = Descriptors.ExactMolWt(mol)
>>>    logp = Descriptors.MolLogP(mol)
>>>    mol.SetProp('MW','%.2f'%(mw))
>>>    mol.SetProp('LOGP','%.2f'%(logp))
>>>    mol.SetProp('_Name','No_%s'%(i))
>>>    writer.write(mol)
>>> writer.close()
>>>print('number of mols:', writer.NumMols())
number of mols:3
>>>print('mol properties:',[i for i in mol.GetPropNames()])
mol properties:['MW','LOGP']
输出结果:在2.1.2.表格中,多了“MW”和“LOGP“两列,不在这⾥展⽰了,想要代码和源⽂件的。
3.1.6.输出SMARTS
输出SMARTS:MolToSmarts()
这个也不多说了
>>> Chem.MolToSmarts(m3, isomericSmiles=True)
'[#6]1:[#6]:[#8]:[#6]:[#6]:1'
3.2.输出.sdf
3.2.1.批量输出到.sdf
批量输出到⽂件:SDWriter()
使⽤⽅法类似于SMILES的批量输出
巴士之家
可以像3.1.5.⼀样⾃定义属性信息,并记录在.sdf⽂件中
>>> writer = Chem.SDWriter('data/batch.sdf')
>>> writer.SetProps(['LOGP','MW'])
>>>for i, mol in enumerate(mols):
>>>    mw = Descriptors.ExactMolWt(mol)
>>>    logp = Descriptors.MolLogP(mol)
>>>    mol.SetProp('MW','%.2f'%(mw))
>>>    mol.SetProp('LOGP','%.2f'%(logp))
>>>    mol.SetProp('_Name','No_%s'%(i))
>>>    writer.write(mol)
>>> writer.close()
输出结果:⽐较长,不展⽰了,需要的。
3.2.2.批量输出到.gz
批量输出到.gz
>>> outf = gzip.open('data/','wt+')
>>> writer = Chem.SDWriter(outf)
>>>for mol in mols:
>>>    writer.write(mol)
>>> writer.close()
>>> outf.close()
3.3.输出.mol
3.3.1输出连接表
直接输出:MolToMolBlock()
>>> m1 = Chem.MolFromSmiles('C1CCC1')
>>>print(Chem.MolToMolBlock(m1))
RDKit          2D
4400000000999 V2000
1.06070.00000.0000 C  000000000000
.
..
4110
M  END
3.3.2.输出到.mol
输出到⽂件:MolToMolFile(mol, filename, includeStereo, …) mol:mol对象
filename:⽂件名
includeStereo:⽴体信息,默认True

本文发布于:2024-09-21 12:32:44,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/532580.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:LH1517中文资料
标签:默认   输出   属性   批量   读取
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议