217

Mols2grid:分子表格可视化工具

mols2grid 在 Notebook 里把一批分子渲染成可交互的网格表格,便于浏览、筛选与挑选。这篇给出实际代码与在筛选流程中的用法。

mols2grid 解决一个很具体但很高频的问题:虚拟筛选出来几百个分子,怎么快速用眼睛过一遍? 它在 Jupyter 里把分子渲染成可交互网格——带结构图、带属性、可搜索、可勾选、可导出选中项。计算化学家和药化专家坐在一起挑分子时,它比翻 CSV 高效得多。

安装与基本用法

pip install mols2grid
import mols2grid
import pandas as pd

df = pd.read_csv("docking_results.csv")   # 含 smiles、score、name 等列

mols2grid.display(
    df,
    smiles_col="smiles",
    subset=["img", "name", "score"],          # 卡片上直接显示的字段
    tooltip=["MW", "logP", "TPSA", "HBD", "HBA"],   # 悬停显示
    n_cols=5, size=(180, 140),
    selection=True,
)

加上排序、筛选与自定义样式

mols2grid.display(
    df,
    smiles_col="smiles",
    subset=["img", "name", "score"],
    tooltip=["MW", "logP", "TPSA", "QED"],
    # 按对接分数着色:分数越好背景越绿
    style={"score": lambda x: ("color: green; font-weight: bold"
                              if x < -9 else "color: grey")},
    # 卡片上加自定义文本
    transform={"score": lambda x: f"{x:.2f} kcal/mol"},
    sort_by="score",
    n_cols=6,
)
参数 作用
subset 卡片上直接显示的列,img 是结构图
tooltip 悬停才显示的列,适合放次要属性
style 按值动态设置 CSS,用于高亮
transform 显示前格式化数值
substruct_highlight 高亮匹配的子结构
selection 开启勾选框
sort_by 初始排序列

取回选中的分子

# 在界面上勾选后,在另一个 cell 里取回
selected = mols2grid.get_selection()          # {index: smiles}
print(len(selected))

df_picked = df.loc[list(selected.keys())]
df_picked.to_csv("picked_for_synthesis.csv", index=False)

这个「浏览 → 勾选 → 导出」的闭环是它最核心的价值:把人工判断这一步顺畅地接进计算流程,而不是让人在表格和绘图脚本之间来回切换。

在筛选流程中的位置

  • 虚拟筛选结果初检:对接完排好序,用网格快速扫一遍前几百个。经验丰富的药化人员几分钟就能挑出明显不合理的结构(反应性基团、过度共轭、合成噩梦)——这类判断目前还没有模型能可靠替代
  • 聚类结果查看:按簇分组展示,每簇看代表分子,确认聚类是否合理。
  • 生成模型输出审查:分子生成模型常产出化学上离谱的结构,网格浏览是最快的质检方式。
  • SAR 讨论:把一个系列的类似物按活性排列展示,配合子结构高亮,讨论时非常直观。
# 生成模型输出质检:高亮骨架,按 QED 排序
mols2grid.display(
    gen_df, smiles_col="smiles",
    substruct_highlight="c1ccc2[nH]ccc2c1",   # 高亮吲哚骨架
    subset=["img", "QED", "SA_score"],
    sort_by="SA_score", n_cols=6,
)

注意

  • 数量要控制:一次渲染几千个分子会让浏览器很卡,建议分批(每次几百个)。
  • 导出 HTML 可分享mols2grid.save(df, output="report.html", ...) 生成独立 HTML,发给不装 Python 的同事也能看,做汇报很实用。
  • 依赖 RDKit 绘图:SMILES 解析失败的行会渲染为空白,展示前先清洗。

上手提示

  • 它把「人工看分子」这一步顺畅接进计算流程,价值被严重低估;
  • 「浏览 → 勾选 → get_selection() 导出」是核心闭环;
  • save() 出独立 HTML,可发给不用 Python 的同事;
  • 一次别渲染太多,几百个一批最流畅。

延伸资源