可重复下载、打开、解析和查询ChEMBL
项目描述
chembl_downloader
不用担心下载/提取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兼容。然而,并非所有版本都提供某些文件。例如,数据库的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的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 6f3fbfdd84594a9edfbd5bf6883b383159fcdb617066c3e2f3f93a350cf05e92 |
|
MD5 | 673e4a2e987ff1fed66020d4671526d7 |
|
BLAKE2b-256 | af21ffc35b7226a1d937eb4cc8fee1af93e56079ab11c80c0a6c97dcba36fd6b |
chembl_downloader-0.4.5-py3-none-any.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 5ca7b4e60b10091dc974fdc3d10630a73fbd7f0555a9d31e7fd3aaf2c1e7d072 |
|
MD5 | 6d0f198e3a51692c620a68eabf5ff55c |
|
BLAKE2b-256 | dcc556833f3d1954bca13193d83d7ca5b9ea978d299c82477d13a72dbefe6284 |