简介
Drug2Cell 是用于scanpy中基因组活性评估的效用函数的集合,既用于每个细胞评分,也用于基于标记的富集/过表示分析。Drug2cell利用已建立的方法,并以方便/高效的形式提供它,以便于扫描。该软件包带有一组ChEMBL衍生的药物靶标,但具有直接的输入格式,因此可以轻松地与任何选择的基因组一起使用。
Drug2cell还介绍了如何将ChEMBL数据库解析为药物及其靶点。包括一些额外的笔记本。两者都引用了ChEMBL人类靶标的预解析数据帧,可以在ftp://ftp.sanger.ac.uk/pub/users/kp9/chembl_30_merged_genesymbols_humans.pkl上访问。
● 过滤显示了该数据帧如何在默认情况下转换为随包附带的drugs:targets字典。
● 有一些帮助功能包括在d2c.chembl,可以帮助用户希望以不同的方式过滤它。初始数据库解析显示了如何从在线资源创建数据帧。该包借助于ChEMBL数据库解析为药物及其靶点,共收录了2447种药物(属于15大类),靶基因有1196种(所以关注的基因需要在期内才能查到对应药物)
Drug2cell是发表在Nature的一项分析流程,python开发,流程示意图如下:
应用实例
Drug2Cell 计算出药物得分后可以实现以下目标:(1)寻找感兴趣药物靶向的细胞;(2) 寻找靶向感兴趣细胞的药物;(3)寻找靶细胞中表达的靶分子,并可能介导药物的作用。该方法近两年来在一些高分文章中被用到,示例如下:
安装
建议创建虚拟环境保证其独立的运行空间避免一些包版本冲突导致的报错
官网:https://github.com/Teichlab/drug2cell
# 创建conda环境
conda create -y -n sceasy python=3.8
conda activate sceasy
# 安装依赖包
conda install anndata loompy scipy pandas -c bioconda
conda list anndata # 0.9.2.post1
conda update -c conda-forge pandas
conda list pandas # 2.0.3
python # 3.8.20
import sceasy
## 安装 Drug2cell
pip install drug2cell
# Successfully installed drug2cell-0.1.2
pip install blitzgsea
# Successfully installed blitzgsea-1.3.47
pip install scanpy
# Successfully installed scanpy-1.9.8
使用
该包在python或者jupyter中运行,后者更加方便其可视化
教程:https://nbviewer.org/github/Teichlab/drug2cell/blob/main/notebooks/demo.ipynb
函数:https://drug2cell.readthedocs.io/en/latest/
## 1.加载包
import scanpy as sc
import drug2cell as d2c
import blitzgsea as blitz
import pandas as pd
sc.settings.set_figure_params(dpi=800)
## 2.读取数据
adata = sc.datasets.pbmc3k_processed() # 示例数据
# adata.write('/filepath/seurat_obj.h5ad') # 自己数据
sc.pl.umap(adata, color='louvain', save='umap_louvain.png')
#示例数据中细胞类型的列名是 louvain,如果是自己的需要更改,下同
## 3.计算得分
d2c.score(adata, use_raw=True)
adata
# AnnData object with n_obs × n_vars = 2638 × 1838
# obs: 'n_genes', 'percent_mito', 'n_counts', 'louvain'
# var: 'n_cells'
# uns: 'draw_graph', 'louvain', 'louvain_colors', 'neighbors', 'pca', 'rank_genes_groups', 'drug2cell'
# obsm: 'X_pca', 'X_tsne', 'X_umap', 'X_draw_graph_fr'
# varm: 'PCs'
# obsp: 'distances', 'connectivities'
# 计算后会新增 uns: 'drug2cell'
adata.uns['drug2cell']
# AnnData object with n_obs × n_vars = 2638 × 1711
# obs: 'n_genes', 'percent_mito', 'n_counts', 'louvain'
# var: 'genes', 'all_genes'
# obsm: 'X_pca', 'X_tsne', 'X_umap', 'X_draw_graph_fr'
# 可视化某一药物的得分
sc.pl.umap(adata.uns['drug2cell'], color="CHEMBL1743048|OBINUTUZUMAB", color_map="OrRd", save='drug2cell.png')
为了更好的了解计算的结果,我们可以使用下面代码具体查看adata.uns['drug2cell']
中的内容。其实里面储存了得分,p值,log2FC等,也可以自己提取出来进一步可视化结果。但是需要注意的是score值是标准化后的,并不是原始数值,这一点我也不是很明白,欢迎大家留言交流。
adata.uns['drug2cell'].uns['rank_genes_groups']
# {'params': {'groupby': 'cell_type', 'reference': 'rest', 'method': 'wilcoxon', 'use_raw': False, 'layer': None,
# 'corr_method': 'benjamini-hochberg'}, 'names': rec.array([('CHEMBL3402762|TEPOTINIB')], dtype=[('Art.c01.DKK2', '<f8'), ('Art.c02.NEBL', '<f8'))],
# 'pvals_adj': rec.array([(2.03065400e-187, 1.70557533e-113,)],dtype=[('Art.c01.DKK2', '<f8'), )]), 'logfoldchanges': rec.array([(nan, nan,],
# dtype=[('Art.c01.DKK2', '<f4'), ('Art.c02.NEBL', '<f4'), ('Endo.c13.CDH11', '<f4')])}
adata.uns['drug2cell'].uns['rank_genes_groups']['names']
adata.uns['drug2cell'].uns['rank_genes_groups']['names'].shape # (2299,)
adata.uns['drug2cell'].uns['rank_genes_groups']['scores'].shape # (2299,)
adata.uns['drug2cell'].uns['rank_genes_groups']['pvals_adj'].shape
该包借助于scanpy可以直接计算并可视化出细胞类型特异的药物,有助于帮助我们筛选感兴趣靶细胞的独特药物,但其本质好像就是对该药物的靶基因在细胞中打分(个人理解)
## 4.细胞类型特异性药物
sc.tl.rank_genes_groups(adata.uns['drug2cell'], method="wilcoxon", groupby="louvain")
sc.pl.rank_genes_groups_dotplot(adata.uns['drug2cell'], swap_axes=True, dendrogram=False, n_genes=5, save='drug2cell_dotplat.png')
plot_args = d2c.util.prepare_plot_args(adata.uns['drug2cell'], categories=["B01","B02","B03"])
sc.pl.dotplot(adata.uns['drug2cell'], groupby="louvain", swap_axes=True, **plot_args, save='drug2cell_dotplat2.png')
adata.uns['drug2cell'].uns['rank_genes_groups']['names']
该包还包含了通路的可视化,通路数据来源于enrichr,这部分不多做介绍。
## 5.通路打分
targets = blitz.enrichr.get_library("GO_Molecular_Function_2021")
targets['UDP-xylosyltransferase activity (GO:0035252)']
# ['POGLUT1', 'POGLUT3', 'POGLUT2', 'XXYLT1', 'GXYLT2', 'GXYLT1', 'RXYLT1']
d2c.score(adata, targets=targets, use_raw=True)
sc.pl.umap(adata.uns['drug2cell'], color="WW domain binding (GO:0050699)", color_map="OrRd", save='GO_0050699_UMAP.png')
药物直接打分
其实我们可以直接通过对药物(靶基因集合)打分来去寻找靶向感兴趣细胞类型的药物,那么我们直接从数据库下载后打分即可,该包在github网站上传了整理好的药物-靶基因数据drug-target_dicts.pkl,我们可以下载后整理成数据框在R中直接计算。
#### 整理药物对应靶基因
import pickle
# 读取.pkl文件
with open('/file_path/drug-target_dicts.pkl', 'rb') as file:
drug_target_dicts = pickle.load(file)
# 查看读取的数据
print(drug_target_dicts)
# 计算字典的键数量
key_count = len(drug_target_dicts)
print(f"There are {key_count} keys")
keys = list(drug_target_dicts.keys())
print(f"They are:{keys}") # 这是每个药物对应的药物分类,例如C对应心血管疾病药物
# ['G', 'A', 'C', 'N', 'S', 'M', 'D', 'L', 'No-category', 'R', 'B', 'J', 'V', 'H', 'P',
# 'G04', 'A04', 'C02', 'N02', 'S01', 'A07', 'M01', 'D10', 'L01', 'N05', 'L02', 'G03', 'D11',
# 'R03', 'C08', 'M04', 'C01', 'B06', 'A08', 'L04', 'D06', 'J01', 'N07', 'N01', 'S02', 'R02',
# 'C03', 'B01', 'V04', 'C07', 'A03', 'N04', 'C09', 'M02', 'M03', 'A05', 'M05', 'A01', 'V03',
# 'A06', 'D02', 'C10', 'A10', 'N06', 'C04', 'R01', 'N03', 'G02', 'R06', 'D04', 'D07', 'C05',
# 'S03', 'H02', 'D05', 'A02', 'A11', 'P01', 'H01', 'J05', 'A16', 'B02', 'R05', 'D01', 'G01',
# 'J02', 'P02', 'L03', 'J04', 'P03', 'H05', 'H04', 'D08', 'B05', 'D09', 'A09', 'V08', 'A14',
# 'H03', 'B03', 'R07', 'D03', 'M09', 'V10', 'V09']
## 总共包含2447种药物,分类属于15大类,药物靶基因共包含1196个
## 数据整理为 DataFrame
data = []
for drug_class, compounds in drug_target_dicts.items():
for compound, targets in compounds.items():
for gene in targets:
data.append({'Gene': gene, 'Drug': compound, 'Category': drug_class})
# 转换为 DataFrame
df = pd.DataFrame(data)
# 保存到文件
df.to_csv('/file_path/drug-target_dicts.csv', index=False)
print(df.head()) # 查看前几行
# Gene Drug Category
# 1 SLC5A7 CHEMBL411|DIETHYLSTILBESTROL G
# 2 RORC CHEMBL411|DIETHYLSTILBESTROL G
# 3 ABCG2 CHEMBL411|DIETHYLSTILBESTROL G
欢迎大家评论交流!
(每帖分享:两耳不闻天下事,一心只读圣贤书)