化学空间可视化(chemical space visualization)开源软件ChemPlot的安装及使用

文章目录


前言

在当前人工智能(AI)引导的化学设计时代,可视化经常被用来描述数据驱动模型的适用范围。在分子数据科学中,存储在由图形、文本表示、原子坐标或其任何组合形成的化学分子表示的高维空间是的分子数据库的可视性变得复杂而不可琢磨,因此,开发化学信息数据可视化方法和工具非常必要。

数据可视化提供了将高维分子数据减少到二维(2D)或三维(3D)空间的实用手段。在低维化学空间中的数据的视觉检查使得能够更真实地筛选具有用户期望的性质的分子,用于化学库设计,高通量筛选,多样性分析和离群值检测。

本文介绍开源化学空间可视化工具ChemPlot从conda环境在本地安装及使用方法,避免化学信息数据上传,帮助化学工作者使用不同的降维方法可视化数据库。


一、ChemPlot是什么?


ChemPlot是一个开源的Python库工具(用户手册),可以通过多种降维实现化学空间的可视化,支持按相似性展示、多种降维方法、静态和动态可视化等。

ChemPlot提供在线网页版本,但需要上传分子数据库,上传规模有5000条的限制;对于商业用户数据上传其保密性也存在担忧。

ChemPlot具有结构和定制的相似性方法 ,包括分子指纹structural similarity(当基于结构相似性) 和 描述符tailored similarity(基于定制的相似性)。通过定制的相似性,化学空间以考虑目标特性的监督方式构建。

当基于结构相似性计算化学空间可视化时,分子列表被转换为扩展连接指纹(ECFP)。ECFP是位向量,其中每个位表示特定子结构的存在或不存在。从主结构中提取子结构,从每个非氢原子开始,延伸到相邻原子,直到达到指定的距离。提取的子结构被散列并映射到固定大小的位向量ChemPlot使用RDKit库将SMILES和InChI符号转换为位向量长度为2048位、半径为2个相邻原子的ECFP。在转换每个分子之后,对于所有分子,从位向量中移除仅包含0或仅包含1的位。 剩余的位数决定了维度的总数,它们被用作降维阶段的输入。

当基于定制的相似性计算化学空间可视化时,分子列表被转换为通过使用Mordred库计算的一组描述符。最初,总共计算了201个物理化学描述符。在无法成功计算描述符的情况下,从数据集中删除分子。描述符列表然后用于形成矩阵,其中行表示化合物,列表示描述符。接下来,通过使用用于数字目标值的套索回归或通过使用用于分类目标值的逻辑回归来选择与目标属性相关的描述符。Lasso回归使用0.05 alpha(正则化乘数)的L1正则化,最大迭代次数为10000。逻辑回归使用L1正则化,C为0.3(正则化强度的倒数),liblinear作为优化方法。所选描述符的所得矩阵用作降维阶段的输入。

ChemPlot以三种不同的降维方法PCA,t-SNE和UMAP
PCA 主成分分析 :PCA 是一种线性降维算法,通过最大化方差将数据点投影到主成分上。ChemPlot使用scikit-learn 库中的PCA和默认参数。在可视化步骤中,两个最重要的主成分被用作减少的维度。
t-SNE t-分布式随机邻域嵌入 :t-SNE 是一种非线性降维算法,可将数据点之间的相似性转换为联合概率。然后,它最小化高维数据和低维嵌入的联合概率分布之间的差异。这是一个随机过程,不同的初始化参数会产生不同的结果。除了复杂度参数,ChemPlot使用其默认参数应用scikit-learn 库中的t-SNE。如下所述,困惑度参数由预训练模型自动计算。
UMAP 一致流形逼近与投影:UMAP 是一种非线性降维算法,它为给定的数据点构建一个特定的加权k-近邻图,然后计算该图的低维布局。它是基于一个随机过程,产生不同的结果,从不同的初始化参数。ChemPlot使用UMAP库提供的默认参数应用UMAP,除了由下面描述的预训练模型自动计算的n_neighbors和min_dist。

ChemPlot聚类:允许您通过使用sklearn中实现的KMeans 算法来识别数据中的不同聚类。

ChemPlot使用户能够以静态和交互式方式可视化分子数据集的化学空间,动态展示可以看到分子结构信息;也可以使用Kernel Density Estimate Plot(只支持Static Plot)和Hexagonal Bin Plot。

二、conda环境安装ChemPlot

1. 创建conda环境

需要指定python=3.9或者3.8:

bash 复制代码
conda create -n chemplot_env python=3.9
conda activate chemplot_env

2. 安装chemplot及需要的包

将以下内容保存进 requirements.txt文件:

bash 复制代码
pandas>=1.1.3
numpy>=1.19.2
matplotlib==3.3.2
seaborn==0.11.1
umap-learn>=0.5.1
scikit-learn==0.24.2
bokeh==2.4.3
scipy>=1.5.2
mordred>=1.2.0
networkx>=2.5
pytest>=6.2.5
pytest-cov>=3.0.0
rdkit

安装chemplot,及需要的包:

bash 复制代码
pip install -r requirements.txt
pip install chemplot

NOTE: bokeh版本过高(bokeh≥3.0),会有错误提示:ImportError: cannot import name 'Panel' from 'bokeh.models'

3. 检验安装

检验pip安装:

bash 复制代码
pip show chemplot

用chemplot中test文件检验安装:

bash 复制代码
python -m pytest --pyargs chemplot

**NOTE:**结果会显示有5项未通过,来自于SMILES读取的fromsmiles_test.py和打印interactive_plot_test.py,忽略。

三、使用步骤

感兴趣的小伙伴可查看:ChemPlot用户手册

1. 化合物数据库可视化使用方法

这里使用ChemPlot test数据库:BBBP:blood-brain barrier penetration,数据为药物分子的血脑屏障可透过性,1代表可以,0代表透过性低。该文件位于conda环境的chemplot/data/目录下。

激活conda环境(conda activate chemplot_env),交互式打开Python:

python 复制代码
import chemplot as cp
data_BBBP = cp.load_data("BBBP")
plotter = cp.Plotter.from_smiles(data_BBBP["smiles"], target=data_BBBP["target"], target_type="C")

降维并交互式展示:

python 复制代码
plotter.tsne()
plotter.interactive_plot(show_plot=True)

plotter.interactive_plot(show_plot=True)之后,Bokeh Plot将打开,示例如下。

如果不能生效,可尝试切换默认浏览器到Chrome。

BBBP数据库的t-SNE降维后可视化:

BBBP数据库的PCA降维后可视化:

python 复制代码
plotter.pca()
plotter.interactive_plot(show_plot=True)

BBBP数据库的UMAP降维后可视化:

python 复制代码
plotter.umap()
plotter.interactive_plot(show_plot=True)

BBBP数据库的t-SNE降维后Hexagonal Bin Plot:

使用Interactive Plot模式:

python 复制代码
plotter.tsne(random_state=0)
plotter.interactive_plot(kind="hex", show_plot=True) 

LOGP数据库的聚类后可视化:

加载数据LOGP:(数据库文件位置与BBBP相同,是化合物酯水分配系数log P数值,与BBBP分类不同,LOGP属于连续的数值,需要设置 target_type="R")

python 复制代码
from chemplot import Plotter, load_data
data_LOGP = load_data("LOGP")
plotter = Plotter.from_smiles(data_LOGP["smiles"], target=data["target"], target_type="R")

UMAP降维,聚类:

python 复制代码
plotter.umap(random_state=500)
plotter.cluster()

使用Interactive Plot模式:

python 复制代码
plotter.interactive_plot(clusters=True, show_plot=True)

六边形箱图

2. 实例:小分子上市药物与临床药物化学空间可视化

利用ChemPlot,这里展示了2325个上市小分子药物(Target 1)与9350个正在临床研究中的药物(Target 0)的化学空间,展示两者在化学空间中的情况。

从t-SNE和UMAP降维方法能直观看到,临床药物的化学空间都是围绕上市药物展开,可以看出来临床药物与上市药物有接近的化学空间;

同时也可以看到有空白区,代表仍有一些化学空间未被探索,是目前来看尚未成药的化学空间,或者是不可成药的空间,亦或是目前化学合成不能探索到的空间。

不禁想到一个问题:药物的化学空间是有限的,或是无限的?进一步,类药的化学空间是有限或无限的?


总结

数据可视化是化学家揭示隐藏在高维数据中的信息内涵,以及解释这些信息,并将其传达给其他专家或者非专业人士的重要工具。

本文介绍化学空间可视化开源工具ChemPlot的安装及应用,帮助化学工作者对化学数据库进行降维、聚类以及可视化展示。

参考资料

  1. https://chemrxiv.org/engage/chemrxiv/article-details/617180aaff3ba991f99af550
相关推荐
耶啵奶膘15 分钟前
uniapp-是否删除
linux·前端·uni-app
魔道不误砍柴功44 分钟前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
_.Switch1 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
2401_850410831 小时前
文件系统和日志管理
linux·运维·服务器
XMYX-02 小时前
使用 SSH 蜜罐提升安全性和记录攻击活动
linux·ssh
测开小菜鸟2 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
萧鼎4 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
学地理的小胖砸4 小时前
【一些关于Python的信息和帮助】
开发语言·python
疯一样的码农4 小时前
Python 继承、多态、封装、抽象
开发语言·python
二十雨辰4 小时前
[linux]docker基础
linux·运维·docker