【问题标题】:How to generate a graph from a SMILES molecule representation?如何从 SMILES 分子表示中生成图形?
【发布时间】:2019-11-25 12:21:09
【问题描述】:

我有一个用 SMILES 字符串表示的分子数据集。我试图将其表示为图表。有没有办法这样做?例如,假设我有字符串CC(C)(C)c1ccc2occ(CC(=O)Nc3ccccc3F)c2c1,有没有一种通用的方法可以将其转换为图形表示,即邻接矩阵和原子向量?我看到针对SMILES from graphs 的问题,我知道rdkitMolFromSmiles,但我找不到从SMILES 字符串中获取图表的内容。

【问题讨论】:

标签: python rdkit cheminformatics


【解决方案1】:

networkx 是一个不错的解决方案。如果您正在寻找更自定义的东西,您可以自己创建图表。在这篇文章中查看另一个方向的示例(来自图表的微笑):SMILES from graph

【讨论】:

  • OP 实际上想要与您的建议相反的内容。 OP 想要 SMILES to 图表。他/她已经有了 SMILES。
  • 是的,已经澄清我的回答是相反的。提到的帖子中的链接将您带到 SMILES -> 图表,尽管如此 imo 否决票很苛刻(github.com/dakoner/keras-molecules/blob/…
【解决方案2】:

你可以试试pysmiles。 从 SMILES 描述开始,您应该能够创建一个 NetworkX 图并使用以下代码生成所需的对象

from pysmiles import read_smiles
import networkx as nx
    
smiles = 'C12=C3C4=C5C6=C1C7=C8C9=C1C%10=C%11C(=C29)C3=C2C3=C4C4=C5C5=C9C6=C7C6=C7C8=C1C1=C8C%10=C%10C%11=C2C2=C3C3=C4C4=C5C5=C%11C%12=C(C6=C95)C7=C1C1=C%12C5=C%11C4=C3C3=C5C(=C81)C%10=C23'
mol = read_smiles(smiles)
    
# atom vector (C only)
print(mol.nodes(data='element'))
# adjacency matrix
print(nx.to_numpy_matrix(mol))

如果你能接受一个马马虎虎的可视化,你也可以试探性地绘制分子与

import matplotlib.pyplot as plt
elements = nx.get_node_attributes(mol, name = "element")
nx.draw(mol, with_labels=True, labels = elements, pos=nx.spring_layout(mol))
plt.gca().set_aspect('equal')

富勒烯很有趣 :)

【讨论】:

  • 谢谢!似乎这个邻接矩阵的输出在单键/双键/三键之间没有延迟。有没有办法强制执行?
  • 哦,从来没有真正使用过这个包,但作者可能会回复 GitHub 问题以防万一(?)
【解决方案3】:

要完成 Davide 的回答,您可以使用以下方法将债券顺序包含到邻接矩阵中:

nx.to_numpy_matrix(mol, weight='order')

或根据networkx documentation使用

nx.adjacency_matrix(mol, weight='order').todense()

【讨论】:

    猜你喜欢
    • 2021-06-18
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多