Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何利用RDKit计算微笑结构列表的分子指纹和相似性?

如何利用RDKit计算微笑结构列表的分子指纹和相似性?
EN

Stack Overflow用户
提问于 2018-08-03 17:15:22
回答 1查看 12.6K关注 0票数 4

我用RDKit计算了两个微笑结构的分子列表之间的分子相似度。现在,我能够从两个单独的csv文件中提取微笑结构。我想知道如何将这些结构放入RDKit中的指纹模块,以及如何计算两个分子列表之间的相似性。

代码语言:javascript
运行
AI代码解释
复制
from rdkit import DataStructs
from rdkit.Chem.Fingerprints import FingerprintMols
ms = [Chem.MolFromSmiles('CCOC'), Chem.MolFromSmiles('CCO'), ... Chem.MolFromSmiles('COC')]
fps = [FingerprintMols.FingerprintMol(x) for x in ms]
DataStructs.FingerprintSimilarity(fps[0],fps[1])

我想把我所有的微笑结构(超过10,000)放到“女士”名单中,并得到他们的指纹。然后比较两个列表中每对分子之间的相似性,也许这里需要一个for循环?

提前感谢!

我使用熊猫数据格式来选择和打印带有结构的列表,并将列表保存到list_1和list_2中。当它运行到ms1行时,它会出现以下错误:

代码语言:javascript
运行
AI代码解释
复制
TypeError: No registered converter was able to produce a C++ rvalue of type std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > from this Python object of type float

然后我检查了文件,在微笑栏里只有微笑。但是当我手动将一些分子结构放到测试列表中时,仍然存在一些错误

代码语言:javascript
运行
AI代码解释
复制
fpArgs['minSize']. 

例如,小枝酰胺的微笑是"O=C1O-234567O=C(CN2(CCN3(CC(O-4)=O)CCN5(CC(=O6)NC)CC(=O)O-7)C1)NC",,错误代码如下(运行fps行时):

代码语言:javascript
运行
AI代码解释
复制
ArgumentError: Python argument types in
rdkit.Chem.rdmolops.RDKFingerprint(NoneType, int, int, int, int, int, float, int)
did not match C++ signature:
RDKFingerprint(RDKit::ROMol mol, unsigned int minPath=1, 
unsigned int maxPath=7, unsigned int fpSize=2048, unsigned int nBitsPerHash=2, 
bool useHs=True, double tgtDensity=0.0, unsigned int minSize=128, bool branchedPaths=True, 
bool useBondOrder=True, boost::python::api::object atomInvariants=0, boost::python::api::object fromAtoms=0, 
boost::python::api::object atomBits=None, boost::python::api::object bitInfo=None).

如果原始csv文件如下所示,如何在输出文件中包括分子名称以及相似度值:

名字,微笑,价值,value2

molecule1,CCOCN(C)(C),0.25,A

molecule2,CCO,1.12,B

molecule3,COC,2.25,C

我添加了这些代码,以便在输出文件中包含分子名称,这是一些有关名称的数组值错误(特别是对于d2):

代码语言:javascript
运行
AI代码解释
复制
name_1 = df_1['id1']
name_2 = df_2['id2']
name_3 = pd.concat([name_1, name_2])
# create a list for the dataframe
d1, qu, d2, ta, sim = [], [], [], [], []
for n in range(len(fps)-1): 
    s = DataStructs.BulkTanimotoSimilarity(fps[n], fps[n+1:]) 
    #print(c_smiles[n], c_smiles[n+1:])
    for m in range(len(s)):
        qu.append(c_smiles[n])
        ta.append(c_smiles[n+1:][m])
        sim.append(s[m])
        d1.append(name_3[n])
        d2.append(name_3[n+1:][m])
    #print()
d = {'ID_1':d1, 'query':qu, 'ID_2':d2, 'target':ta, 'Similarity':sim}
df_final = pd.DataFrame(data=d)
df_final = df_final.sort_values('Similarity', ascending=False)
for index, row in df.iterrows():
    print (row["ID_1"], row["query"], row["ID_2"], row["target"], row["Similarity"])
print(df_final)
# save as csv
df_final.to_csv('RESULT_3.csv', index=False, sep=',')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-03 22:58:25

编辑了答案以捕捉所有评论.

RDKit具有很大的相似性功能,因此您可以将一个指纹与一个指纹列表进行比较。只需翻阅指纹清单。

如果CSV看起来像这样

第一个微笑无效的csv

代码语言:javascript
运行
AI代码解释
复制
smiles,value,value2
CCOCN(C)(C),0.25,A
CCO,1.12,B
COC,2.25,C

第二次正确微笑的csv

代码语言:javascript
运行
AI代码解释
复制
smiles,value,value2
CCOCC,0.55,D
CCCO,2.58,E
CCCCO,5.01,F

这是如何读出微笑,删除无效的,做指纹相似性没有重复和保存排序的值。

代码语言:javascript
运行
AI代码解释
复制
from rdkit import Chem
from rdkit import DataStructs
from rdkit.Chem.Fingerprints import FingerprintMols
import pandas as pd

# read and Conconate the csv's
df_1 = pd.read_csv('first.csv')
df_2 = pd.read_csv('second.csv')
df_3 = pd.concat([df_1, df_2])

# proof and make a list of SMILES
df_smiles = df_3['smiles']
c_smiles = []
for ds in df_smiles:
    try:
        cs = Chem.CanonSmiles(ds)
        c_smiles.append(cs)
    except:
        print('Invalid SMILES:', ds)
print()

# make a list of mols
ms = [Chem.MolFromSmiles(x) for x in c_smiles]

# make a list of fingerprints (fp)
fps = [FingerprintMols.FingerprintMol(x) for x in ms]

# the list for the dataframe
qu, ta, sim = [], [], []

# compare all fp pairwise without duplicates
for n in range(len(fps)-1): # -1 so the last fp will not be used
    s = DataStructs.BulkTanimotoSimilarity(fps[n], fps[n+1:]) # +1 compare with the next to the last fp
    print(c_smiles[n], c_smiles[n+1:]) # witch mol is compared with what group
    # collect the SMILES and values
    for m in range(len(s)):
        qu.append(c_smiles[n])
        ta.append(c_smiles[n+1:][m])
        sim.append(s[m])
print()

# build the dataframe and sort it
d = {'query':qu, 'target':ta, 'Similarity':sim}
df_final = pd.DataFrame(data=d)
df_final = df_final.sort_values('Similarity', ascending=False)
print(df_final)

# save as csv
df_final.to_csv('third.csv', index=False, sep=',')

打印出来的:

代码语言:javascript
运行
AI代码解释
复制
Invalid SMILES: CCOCN(C)(C)C

CCO ['COC', 'CCOCC', 'CCCO', 'CCCCO']
COC ['CCOCC', 'CCCO', 'CCCCO']
CCOCC ['CCCO', 'CCCCO']
CCCO ['CCCCO']

   query target  Similarity
9   CCCO  CCCCO    0.769231
2    CCO   CCCO    0.600000
1    CCO  CCOCC    0.500000
7  CCOCC   CCCO    0.466667
3    CCO  CCCCO    0.461538
8  CCOCC  CCCCO    0.388889
4    COC  CCOCC    0.333333
5    COC   CCCO    0.272727
0    CCO    COC    0.250000
6    COC  CCCCO    0.214286
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51681659

复制
相关文章
在docker中安装phpmyadmin
其中,PMA_HOST和PMA_PORT填写的内容是MySQL数据库的地址和端口号
灯珑LoGin
2022/10/31
2.1K0
如何在 Go 中优雅的处理和返回错误(1)——函数内部的错误处理
在使用 Go 开发的后台服务中,对于错误处理,一直以来都有多种不同的方案,本文探讨并提出一种从服务内到服务外的错误传递、返回和回溯的完整方案,还请读者们一起讨论。
amc
2021/09/18
9.6K0
如何在 Go 中优雅的处理和返回错误(1)——函数内部的错误处理
python查询mysql,返回json
import MySQLdb import json def getSql(): try: con = MySQLdb.connect(host='localhost', user='', passwd='', db='test', charset='utf8') cursor = con.cursor() sql = "select * from user" cursor.execute(sql)
py3study
2020/01/10
3.7K0
phpMyAdmin错误提示解决
有些朋友打开phpMyAdmin出现这个的原因是 phpMyAdmin的安装目录, tmp目录不存在,或者存在但是权限不对,这是缓存目录,可以加快phpMyAdmin的运行,不会影响程序执行,就是强迫症看着受不了吧 。
煎饼
2022/12/13
2.6K0
MySQL 在查询结果中记录行号
在其他的关系型数据库中,都有rownum这类型的内置函数来提供查询结果的行号,但是MySQL没有,阿福也一直觉得奇怪。
用户2353021
2020/05/09
6.9K0
【Laravel系列7.2】错误与异常处理
在学习完 Laravel 中的日志处理模块之后,接下来马上就进入到错误和异常的学习中。其实通过之前 PHP 基础相关的学习,我们已经了解到 PHP7 中的大部分错误都已经可以通过异常来进行处理了,而我们的 Laravel 框架,基本全是通过异常来进行处理的。
硬核项目经理
2023/03/03
2.9K0
【Laravel系列7.2】错误与异常处理
Laravel Exceptions——异常与错误处理
本文 GitBook 地址:https://legacy.gitbook.com/book/leoyang90/laravel-source-analysis/details
码农编程进阶笔记
2021/07/20
2.1K0
Laravel Exceptions——异常与错误处理
解决Mysql在查询时报:1055分组查询错误的解决方法
如果是Linux,就在配置文件(my.cnf)中修改 sql_mode 的配置(在/etc/my.cnf路径下)。如果是Windows,就修改配置文件my.ini,我的是Windows,如下所示:
星辰sea
2022/10/29
1.3K0
解决Mysql在查询时报:1055分组查询错误的解决方法
点击加载更多

相似问题

phpMyAdmin查询窗口中MySQL中IF语句返回错误

10

原始查询在phpmyadmin上有效,但在laravel上无效

20

Mysql查询显示phpmyadmin中的错误

29

MySQL查询运行在phpMyAdmin中,而不是在Laravel中。

11

MySQL查询缺少在phpMyAdmin中返回的节点-mysql中的结果

33
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档