🌞欢迎来到AI+生物医药的世界
🌈博客主页:卿云阁💌欢迎关注🎉点赞👍收藏⭐️留言📝
🌟本文由卿云阁原创!
🌠本阶段属于练气阶段,希望各位仙友顺利完成突破
📆首发时间:🌹2024年3月16日🌹
✉️希望可以和大家一起完成进阶之路!
🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!
机器学习算法
逻辑回归算法原理
朴素贝叶斯算法原理
最近邻算法原理
支持向量机算法原理
随机森林算法原理
梯度提升算法原理
应用域
分子表示
ADMET-CYPs抑制剂预测实战
论文地址:
gkaa166.pdf (silverchair.com)
CYPs功能和抑制剂
细胞色素P450(cytochromeP450或CYP450,简称CYP450)属于单氧酶的一类,。它参与内源性物质和包括药物、环境化合物在内的外源性物质的代谢。
根据氨基酸序列的同源程度,其成员又依次分为家族、亚家族和酶个体三级。细胞色素P450酶系统可缩写为CYP,其中家族以阿拉伯数字表示,亚家族以大写英文字母表示,酶个体以阿拉伯数字表示,如CYP2D6、CYP2C19、CYP3A4等。人类肝细胞色素P450酶系中至少有9种P450与药物代谢相关。
细胞色素P450主要分布在内质网和线粒体内膜上,研究表明细胞色素P450是药物代谢过程中的关键酶,而且对细胞因子和体温调节都有重要影响。
RDKit 介绍
化合物(compounds)药物是一种主要的药物类型,通常进行相关研究时通常需要对其结构进行操作,展示,及分子量,化学描述符等计算。这里介绍一个操作简便友好的开源工具,RDKit。
RDKit是一个用于化学信息学的开源工具包,基于对化合物2D和3D分子操作,利用机器学习方法进行化合物描述符生成,fingerprint生成,化合物结构相似性计算,2D和3D分子展示等。基于PYTHON语言进行调取使用。
该工具官网:https://rdkit.org
也可以根据从 The RDKit Documentation 网站进入了解RDKit并熟悉RDKit的指令操作。
以下介绍RDKit的一些基础操作。
RDKit安装
这里介绍一种最快速的安装方法,由于RDKit是基于python语言使用的,所以可以在anaconda上快速进行RDKit的安装。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple rdkit-pypi
安装完成后,可以在python界面进行import,来check RDKit 是否安装成功。如果可能顺利import,则说明安装成功。
import rdkit
读分子操作
RDKit 支持从Smiles、mol、sdf 文件中读入分子获得分子对象。 |Smiles、mol 是通常用于保存单个分子;而sdf格式当初是作为分子库形式设计的。 因此读入sdf得到的是分子迭代器,读入Smiles 和mol 文件是分子对象。
SMILES简介
SMARTS(SMiles ARbitrary Target Specification)是一种用于描述分子模式和属性的语言。SMILES所有的符号和属性在SMARTS中同样适用,因此它也是SMILES的延伸。此外,SMARTS还包括了逻辑操作符和额外的分子描述符,后文会一一介绍。
(1)从SMILES/SMARTS直接读取
smi='CC(C)OC(=O)C(C)NP(=O)(OCC1C(C(C(O1)N2C=CC(=O)NC2=O)(C)F)O)OC3=CC=CC=C3'
: 这行代码定义了一个字符串变量smi
,其中包含了一个SMILES表示的化合物的信息。SMILES(Simplified Molecular Input Line Entry System)是一种用于表示分子结构的文本字符串表示法。
mol = Chem.MolFromSmiles(smi)
: 这行代码使用RDKit的MolFromSmiles()
函数将SMILES字符串转换为RDKit的分子对象。MolFromSmiles()
函数将SMILES字符串解析并创建一个分子对象mol
。
sms = Chem.MolFromSmarts('Cc1ccccc1')
: 这行代码使用RDKit的MolFromSmarts()
函数将SMARTS模式字符串转换为RDKit的分子对象。SMARTS(SMILES Arbitrary Target Specification)是一种类似于SMILES的表示法,用于描述分子的子结构模式。
print(mol)
: 这行代码打印了分子对象mol
的信息,通常包括分子的原子、键和立体化学信息。
print(sms)
: 这行代码打印了分子对象sms
的信息,通常包括SMARTS模式的表示信息。<rdkit.Chem.rdchem.Mol object at 0x0000025E71FBC970> <rdkit.Chem.rdchem.Mol object at 0x0000025E730D1120>
<rdkit.Chem.rdchem.Mol object at 0x0000025E71FBC970>
和<rdkit.Chem.rdchem.Mol object at 0x0000025E730D1120>
表示了两个分子对象的内存地址,而不是它们的化学结构。要打印出分子的化学结构,你可以使用RDKit提供的其他方法来获得分子的具体信息,比如通过Draw
模块来绘制化学结构。(2)文件批量读取
- 从.smi批量读取:SmilesMolSupplier(data, delimiter, smilesColumn, nameColumn, titleLine, sanitize)
data:数据文件
delimiter:分隔符,默认为' '
smilesColumn:SMILES所在列,默认为0
nameColumn:SMILES名称所在列,默认为1
titleLine:是否含有标题行,默认True
sanitize:是否检查正确性,默认Truesuppl = 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']
(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']
(4)DataFrame批量读取
- 读取DataFrame中的SMILES:PandasTools.AddMoleculeColumnToFrame(frame, smilesCol, molCol, includeFingerprints)
frame:DataFrame对象
smilesCol:SMILES所在列
molCol:新列名,将存放产生的rdkit mol对象
includeFingerprints:是否生成指纹df = pd.read_csv('data/smiles_df.csv') PandasTools.AddMoleculeColumnToFrame(df,'SMILES','mol',includeFingerprints=True) df['MW'] = df['mol'].apply(Descriptors.MolWt) print(df.head(2))
读.sdf
文件批量读取
- 从.sdf里批量读取:Chem.SDMolSupplier(fileName, sanitize, removeHs, strictParsing)
fileName:文件名
sanitize:检查化合价,计算芳香性、共轭、杂化、kekule,默认True
removeHs:是否隐藏氢原子,默认True
strictParsing:是否使用严格模式进行解析,默认Truesuppl = 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']
压缩包批量读取
gz_file = gzip.open('data/batch.sdf.gz', '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']
读.mol
m = Chem.MolFromMolFile('data/output.mol') print(Chem.MolToSmiles(mol))
c1cocc1