有一段时间没有做单细胞的细胞通讯了,今天的主题是python相关的生信笔记,就找了这个软件,一看天啦都更新到v5啦!时间过得是真快~
老习惯,CellphoneDB 的官网给到你,他放了三个地方,可以每个都看看,不过可以以最后一个链接为主:
CellphoneDB 的一路更新历程,每一篇文献都下载下来看看吧:
CellphoneDB v5 版本引入了多项改进和新功能:
这么多更新点,慢慢看吧,先来配置环境,运行一下示例数据~
安装过程比较顺利和简单,下面是bash命令,在服务器上运行:
conda create -y -n cpdb python=3.9
conda activate cpdb
pip install cellphonedb
pip install -U ipykernel
CellphoneDB 数据库地址:https://github.com/ventolab/CellphoneDB-data
这个也进行了迭代更新,下面是python代码下载方式:
import pandas as pd
import glob
import os
from IPython.display import HTML, display
from cellphonedb.utils import db_releases_utils
display(HTML(db_releases_utils.get_remote_database_versions_html()['db_releases_html_table']))
# -- Version of the databse
cpdb_version = 'v5.0.0'
# -- Path where the input files to generate the database are located
cpdb_target_dir = os.path.join('./cellphonedb_v500_NatProtocol/', cpdb_version)
cpdb_target_dir
# './cellphonedb_v500_NatProtocol/v5.0.0'
# 保证当前目录中有这个目录,如果没有就手动创建一个
下载完后,会有这么多文件:
最新的文献中给了一个超清晰的示意图来说明输入数据:
下面是每个文件的具体说明,跑起来的时候可以对照准备:
count矩阵(必须):格式可以是 text文件,h5ad文件,h5文件,10x标准输出的三个文件;基因ID只支持Human,
DEG文件(可选):两列,第一列为细胞类型标签,第二列为每种细胞类型的上调差异基因,示例如下:除了第一列第二列,后面的列数会被忽略,可以有也可以没有
活性转录因子文件(可选):两列,第一列细胞类型标签,第二列为每种细胞中活性转录因子,示例如下:
在这里可以下载得到:https://github.com/ventolab/CellphoneDB/tree/master/notebooks
可以跟上面对应的文件说明对照查看:
active_TFs.tsv
DEGs_inv_trophoblast.tsv
metadata.tsv
microenvironment.tsv
normalised_log_counts.h5ad
cellphonedb还是包括三个大的分析模块,分别如下:
cpdb_analysis_method:cpdb_analysis_method.call()函数,这是一个通用的分析模块,用于全面评估细胞间相互作用;
cpdb_statistical_analysis_method:cpdb_statistical_analysis_method.call()函数,通过统计方法评估细胞间相互作用的显著性;
cpdb_degs_analysis_method:cpdb_degs_analysis_method.call()函数,专注于差异表达基因在细胞间通信中的作用。
看看第三种,差异表达基因在细胞间通信中的作用
# 导入模块
import pandas as pd
import sys
import os
pd.set_option('display.max_columns', 100)
print(sys.version)
# 3.9.22 | packaged by conda-forge | (main, Apr 14 2025, 23:35:59)
# [GCC 13.3.0]
定义输入文件:
cpdb_file_path = 'cellphonedb_v500_NatProtocol/v5.0.0/cellphonedb.zip'
meta_file_path = 'data/metadata.tsv'
counts_file_path = 'data/normalised_log_counts.h5ad'
microenvs_file_path = 'data/microenvironment.tsv'
degs_file_path = 'data/DEGs_inv_trophoblast.tsv'
active_tf_path = 'data/active_TFs.tsv'
out_path = 'results_method3_withScore'
读取数据:
具体的数据格式前面都说明过啦,这里就不再展示细节
# 1.读取细胞注释信息,第一列为细胞barcode,第二列为所属的细胞类型
# read meta
metadata = pd.read_csv(meta_file_path, sep = '\t')
metadata.head(3)
# barcode_sample cell_type
# 0 AGCGATTAGTCTAACC-1_Pla_HDBR10917733 B_cells
# 1 ATCCGTGAGGCTAGAA-1_Pla_Camb10714918 B_cells
# 2 AGTAACCCATTAAAGG-1_Pla_HDBR10917733 B_cells
# 用type()获取对象的数据类型
type(metadata)
# 每种细胞类型里的细胞数量
metadata.cell_type.value_counts()
# 2.读取细胞表达矩阵,h5ad格式。共3312个细胞:
import anndata
adata = anndata.read_h5ad(counts_file_path)
adata
# 检查metadata的barcode与表达矩阵中的细胞id是否一致
list(adata.obs.index).sort() == list(metadata['barcode_sample']).sort()
# 3.读取亚群差异基因
deg = pd.read_csv(degs_file_path, sep = '\t')
deg.head(3)
# 4.微环境
microenv = pd.read_csv(microenvs_file_path, sep = '\t')
microenv.head(3)
microenv.groupby('microenvironment', group_keys = False)['cell_type'].apply(lambda x : list(x.value_counts().index))
# 5.活性转录因子
tf = pd.read_csv(active_tf_path, sep = '\t')
tf.head(3)
数据都准备好了,运行:
from cellphonedb.src.core.methods import cpdb_degs_analysis_method
cpdb_results = cpdb_degs_analysis_method.call(
cpdb_file_path = cpdb_file_path, # 必须文件: CellphoneDB 数据库压缩zip文件.
meta_file_path = meta_file_path, # 必须文件: tsv结尾,细胞注释文件.
counts_file_path = counts_file_path, # 必须文件: 标准化后的count矩阵-可以是路径,或读取进来后的anndata对象.
degs_file_path = degs_file_path, # 必修文件: tsv结尾,细胞亚群上调差异基因.
counts_data = 'hgnc_symbol', # count矩阵中的基因类型.
active_tfs_file_path = active_tf_path, # 可选: 细胞类型与active TFs.
microenvs_file_path = microenvs_file_path, # 可选(默认: None): 定义细胞微环境.
score_interactions = True, # 可选: 对互作是否进行打分.
threshold = 0.1, # 过滤低表达基因:至少在多少细胞中表达%.
result_precision = 3, # Sets the rounding for the mean values in significan_means.
separator = '|', # 对结果中"cellA|CellB"的分隔符.
debug = False, # 是否保存所有中间结果.
output_path = out_path, # 输出结果路径
output_suffix = None, # 输出结果文件前缀 (default: None)
threads = 50 # 使用线程数
)
查看运行的结果:
# 用type()获取对象的数据类型
type(cpdb_results)
# 具体的关键词
print(cpdb_results.keys())
# ['deconvoluted', 'deconvoluted_percents', 'means', 'relevant_interactions', 'significant_means', 'CellSign_active_interactions', 'CellSign_active_interactions_deconvoluted', 'interaction_scores']
# 每一个具体的结果
cpdb_results['relevant_interactions'].head(2)
cpdb_results['significant_means'].head(2)
cpdb_results['means'].head(2)
cpdb_results['deconvoluted'].head(2)
cpdb_results['interaction_scores'].head(2)
cpdb_results['CellSign_active_interactions'].head(2)
上面的代码运行完后,生成的文件如下:
degs_analysis_CellSign_active_interactions_05_06_2025_212857.txt
degs_analysis_CellSign_active_interactions_deconvoluted_05_06_2025_212857.txt
degs_analysis_deconvoluted_05_06_2025_212857.txt
degs_analysis_deconvoluted_percents_05_06_2025_212857.txt
degs_analysis_interaction_scores_05_06_2025_212857.txt
degs_analysis_means_05_06_2025_212857.txt
degs_analysis_relevant_interactions_05_06_2025_212857.txt
degs_analysis_significant_means_05_06_2025_212857.txt
所有文件的结构都相同:行表示相互作用的蛋白质,列表示相互作用的细胞类型对。