跳转到主要内容

可重复下载、打开、解析和查询ChEMBL

项目描述

chembl_downloader

PyPI PyPI - Python Version PyPI - License DOI Code style: black Documentation Status

不用担心下载/提取ChEMBL或版本控制 - 只需使用chembl_downloader编写知道如何自动下载和使用的代码。

安装

使用以下方法安装

$ pip install chembl-downloader

完整技术文档可以在ReadTheDocs上找到。教程可以在存储库的notebooks/目录中的Jupyter笔记本中找到。

数据库使用

下载特定版本

import chembl_downloader

path = chembl_downloader.download_extract_sqlite(version='28')

一旦下载并提取,它就会变得智能并无需再次下载。它自动使用pystow存储在~/.data/chembl目录中。

我们希望实现一种可以从存档直接加载到SQLite的功能,但这似乎是一个付费功能

下载最新版本

您可以通过省略version关键字参数略微修改前面的代码,以自动查找ChEMBL的最新版本。

import chembl_downloader

path = chembl_downloader.download_extract_sqlite()

本包中所有函数(例如包括 connect()cursor()query())都支持 version 关键字参数,但为了简洁起见,下面将省略。

自动化连接

存档中有一个单独的 SQLite 数据库文件。通常,人们手动解压缩此文件夹然后处理生成的文件。不要这样做,因为它不可重复!相反,可以直接下载文件,并通过以下方式自动打开连接:

import chembl_downloader

with chembl_downloader.connect() as conn:
    with conn.cursor() as cursor:
        cursor.execute(...)  # run your query string
        rows = cursor.fetchall()  # get your results

cursor() 函数为此操作提供了一个便捷的包装器

import chembl_downloader

with chembl_downloader.cursor() as cursor:
    cursor.execute(...)  # run your query string
    rows = cursor.fetchall()  # get your results

运行查询并获取 pandas DataFrame

最强大的函数是 query(),它基于前面的 connect() 函数,结合 pandas.read_sql,执行查询并将结果加载到 pandas DataFrame 中,以便进行任何后续使用。

import chembl_downloader

sql = """
SELECT
    MOLECULE_DICTIONARY.chembl_id,
    MOLECULE_DICTIONARY.pref_name
FROM MOLECULE_DICTIONARY
JOIN COMPOUND_STRUCTURES ON MOLECULE_DICTIONARY.molregno == COMPOUND_STRUCTURES.molregno
WHERE molecule_dictionary.pref_name IS NOT NULL
LIMIT 5
"""

df = chembl_downloader.query(sql)
df.to_csv(..., sep='\t', index=False)

建议 1:使用 pystow 创建一个可重复且可移植到他人机器上的文件路径(例如,路径中不包含您的用户名)。

建议 2:现在可以使用 pip install rdkit-pypi 安装 RDKit,这意味着大多数用户无需在复杂的 conda 环境和配置中麻烦。RDKit 中一个强大但不太为人所知的功能是 rdkit.Chem.PandasTools 模块。

SDF 使用

通过 SDF 备份中的条目访问 RDKit 供应商

此示例比前两个示例更适合目的。该 supplier() 函数确保下载最新的 SDF 备份,并使用上下文管理器从 gzip 文件加载到 rdkit.Chem.ForwardSDMolSupplier,以确保文件在解析完成后才关闭。像之前的示例一样,它也可以显式地接受一个 version

from rdkit import Chem

import chembl_downloader

with chembl_downloader.supplier() as suppl:
    data = []
    for i, mol in enumerate(suppl):
        if mol is None or mol.GetNumAtoms() > 50:
            continue
        fp = Chem.PatternFingerprint(mol, fpSize=1024, tautomerFingerprints=True)
        smi = Chem.MolToSmiles(mol)
        data.append((smi, fp))

此示例改编自 Greg Landrum 的 RDKit 博客文章 generalized substructure search

遍历 SMILES

此示例使用 supplier() 方法和 RDKit 从 ChEMBL 的 SDF 文件中的分子获取 SMILES 字符串。如果您需要直接访问 RDKit 分子对象,请使用 supplier()

import chembl_downloader

for smiles in chembl_downloader.iterate_smiles():
    print(smiles)

获取 RDKit 子结构库

基于 supplier() 函数,get_substructure_library() 自动化并可重复地准备一个 子结构库。此外,它缓存了构建结果,构建过程大约需要十分钟,只需执行一次,未来从 pickle 对象加载的时间大约为几秒。

此实现受到了 Greg Landrum 的 RDKit 博客文章 Some new features in the SubstructLibrary 的启发。以下示例展示了如何用它来完成文章中提到的某些第一个任务。

from rdkit import Chem

import chembl_downloader

library = chembl_downloader.get_substructure_library()
query = Chem.MolFromSmarts('[O,N]=C-c:1:c:c:n:c:c:1')
matches = library.GetMatches(query)

Morgan 指纹使用

获取 Morgan 指纹文件

ChEMBL 为每个分子提供了预计算的 2048 位半径 2 的 Morgan 指纹文件。可以使用以下方式下载:

import chembl_downloader

path = chembl_downloader.download_fps()

version 和其他关键字参数也适用于此函数。

使用 chemfp 加载指纹

以下示例使用 chemfp 的指纹加载器包装了 download_fps 函数

import chembl_downloader

arena = chembl_downloader.chemfp_load_fps()

version 和其他关键字参数也适用于此函数。有关与 arena 对象一起工作的更多信息,请参阅 此处

附加内容

存储在不同的位置

如果您想使用pystow将数据存储在其他地方(例如,在pyobo中,您也可以在这里找到文件的副本),可以使用prefix参数。

import chembl_downloader

# It gets downloaded/extracted to 
# ~/.data/pyobo/raw/chembl/29/chembl_29/chembl_29_sqlite/chembl_29.db
path = chembl_downloader.download_extract_sqlite(prefix=['pyobo', 'raw', 'chembl'])

请参阅pystow配置存储位置的文档

prefix关键字参数适用于本包中的所有函数(例如,包括connect()cursor()query())。

通过命令行下载

安装后,运行以下命令行命令以确保其正常工作并将路径发送到标准输出

$ chembl_downloader

使用--test以显示两个示例查询

$ chembl_downloader --test

贡献

请阅读CONTRIBUTING.md中的贡献指南。

如果您想做出贡献,有一个名为chembl_downloader.queries的子模块,您可以在其中添加有用的SQL查询及其描述,以便于导入和重用。

用户

查看谁在使用chembl-downloader

统计信息和兼容性

chembl-downloader与所有版本的ChEMBL兼容。然而,并非所有版本都提供某些文件。例如,数据库的SQLite版本首次在21次发布(2015-02-12)中添加。

ChEMBL版本 发布日期 从SQLite获取的总命名化合物数量
31 2022-07-12 41,585
30 2022-02-22 41,549
29 2021-07-01 41,383
28 2021-01-15 41,049
27 2020-05-18 40,834
26 2020-02-14 40,822
25 2019-02-01 39,885
24_1 2018-05-01 39,877
24
23 2017-05-18 39,584
22_1 2016-11-17
22 39,422
21 2015-02-12 39,347
20 2015-02-03 -
19 2014-07-2333 -
18 2014-04-02 -
17 2013-09-16 -
16 2013-055555-15 -
15 2013-01-30 -
14 2012 -07-18 -
13 2012-02-29 -
12 2011-11-30 -
11 2011-06-07 -
10 2011-06-07 -
09 2011-01-04 -
08 2010-11-05 -
07 2010-09-03 -
06 2010-09-03 -
05 2010-06-07 -
04 2010-05-26 -
03 2010-04-30 -
02 2009-12-07 -
01 2009-10-28 -

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

chembl_downloader-0.4.5.tar.gz (23.8 kB 查看散列)

上传时间

构建分布

chembl_downloader-0.4.5-py3-none-any.whl (17.0 kB 查看散列)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面