今天来学习一篇发表在 Cancer Cell 杂志(IF=48.8)上的文献,于2022年12月12日发表,标题为《High-resolution single-cell atlas reveals diversity and plasticity of tissue-resident neutrophils in non-small cell lung cancer》,通讯作者Andreas Pircher,Zlatko Trajanoski。
这篇文献是一篇极其典范的单细胞python流派的数据分析文章,集合了单细胞数据预处理,数据合并,数据整合,数据注释等工作。跨数据集和大数据量!应该有很多细节值得学习,更特别的是注释工作,做这样的一个大数据量的图谱类细胞类型注释,可以看看里面到底是如何处理各种分析细节的!



# ---
# jupyter:
# jupytext:
# formats: ipynb,py:light
# text_representation:
# extension: .py
# format_name: light
# format_version: '1.5'
# jupytext_version: 1.6.0
# kernelspec:
# display_name: Python [conda env:.conda-scanpy_2020-12]
# language: python
# name: conda-env-.conda-scanpy_2020-12-py
# ---
import scanpy as sc
import pandas as pd
from glob import glob
from pathlib import Path
import re
import scipy.sparse
from multiprocessing import Pool
import anndata
filenames = glob("../../data/11_own_datasets/batch1_3patients/processed/*.csv")
meta = pd.read_excel("../../tables/patient_table_batch1_3_patients.xlsx", engine="openpyxl", skiprows=1, skipfooter=1)
meta.rename(columns={"Tumornummer": "tumor_id", "Patient": "patient", "Alter": "age", "Geschlecht": "sex", "Tumor": "tumor_type"}, inplace=True)
meta["sex"] = [{"W": 'f', "M":'m'}[x] for x in meta["sex"]]
def load_counts(filename):
p = Path(filename)
((patient, tissue), ) = re.findall("(P\d+)_(.*)\.csv", p.name)
expr = pd.read_csv(p, skiprows=5, index_col=0)
gene_expr = expr.loc[(~expr.index.str.contains("\(Ab\)") & ~expr.index.str.startswith("Lex_")), :]
ab_expr = expr.loc[expr.index.str.contains("\(Ab\)"), :]
obs = pd.DataFrame().assign(cell_id=expr.columns)
obs["patient"] = patient
obs["tissue"] = tissue
obs.set_index("cell_id", inplace=True)
adata = sc.AnnData(X=scipy.sparse.csc_matrix(gene_expr).T, obs=obs)
adata.var_names = gene_expr.index
adata.obsm["surface_protein"] = ab_expr.T
return adata
with Pool(16) as p:
adatas = p.map(load_counts, filenames)
adata = anndata.concat(adatas, index_unique="_", join="outer")
meta["patient"] = [x.strip() for x in meta["patient"]]
adata.obs = adata.obs.reset_index().merge(meta, on=["patient"], how="left").set_index("cell_id")
adata
adata.obs.drop_duplicates()
adata.obs["condition"] = "NSCLC"
adata.obs["origin"] = ["tumor_primary"if c == "Tumor"else"normal_adjacent"for c in adata.obs["tissue"]]
adata.obs["sample"] = [f"{patient}_{origin}"for patient, origin in zip(adata.obs["patient"], adata.obs["origin"])]
adata.obs["sex"] = [{"m": "male", "f": "female"}[s] for s in adata.obs["sex"]]
adata.obs["tissue"] = "lung"
adata.obs.drop_duplicates()
# !mkdir -p "../../data/11_own_datasets/batch1_3patients/h5ad_raw"
adata.write_h5ad("../../data/11_own_datasets/batch1_3patients/h5ad_raw/batch1_3patients.h5ad", compression="lzf")

通过整合19项研究、21个数据集共计298名患者的505份样本(图1A),「首次构建了非小细胞肺癌核心图谱」。这一综合性单细胞图谱汇集了经专家审定、质量保证且经过预分析的转录组数据,数据来源包括公开研究及我们自有数据集(UKIM-V),涵盖所有组织学类型的早期与晚期非小细胞肺癌。

该核心图谱共整合898,422个单细胞,基于既往建立的经典单细胞标志(图S1A)将其注释为12个粗粒度细胞类型及44个主要细胞亚型/状态(如分裂期细胞),包括169,223个上皮细胞、670,409个免疫细胞及58,790个基质与内皮细胞(图1B)。通过已报道的标志基因22(图S1J),我们进一步标注了关键CD8+ T细胞亚群(终末耗竭型、活化型、效应记忆型、初始型、NK样、分裂期)。

LUAD与LUSC中癌细胞向主要免疫细胞进行通讯的Circos图。展示前10个差异表达的癌细胞配体。红色连线表示在LUAD中上调的相互作用,蓝色连线表示在LUSC中上调的相互作用。

各患者亚型中的癌-免疫细胞通讯。上图:各亚型(B、M、T、ID)中癌细胞的差异表达配体(基于伪批量数据的DESeq2分析,FDR < 0.1)。下图:相应受体及其按细胞类型的表达情况。点的大小和颜色分别表示表达受体的细胞比例和基因表达水平(所有患者的平均值)。仅显示在相应细胞类型中至少10%的细胞表达的受体数据点。

A-B:扩展图谱中组织驻留中性粒细胞(TRNs)的UMAP可视化:(A)按肿瘤相关中性粒细胞(TANs)与癌旁组织中性粒细胞(NANs)分类;(B)按组织病理学类型着色(依据组织病理学评估定义)。
C:流式细胞术检测LUAD与LUSC肿瘤组织中中性粒细胞比例(占白细胞百分比)(LUAD n=47,LUSC n=16;Wilcoxon检验,**p<0.01)。水平线代表中位数,须线表示四分位距。
D:TAN候选基因筛选。每个数据点代表同时在NAN和TAN组中至少检出10个中性粒细胞的患者。连线表示各研究的均值。p值通过配对t检验计算并经FDR校正。
E:原发肿瘤样本中不同细胞类型VEGFA表达水平。每个数据点代表至少检出10个细胞的患者(中位数展示,箱线图表示四分位距,须线范围为1.5倍IQR)。
F:基于DoRothEA的TAN与NAN转录因子分析。每个数据点代表单个患者,条形表示所有患者均值。展示平均评分差异>0.2且FDR<0.1的转录因子,p值经配对t检验与FDR校正。
G:流式细胞术验证选定候选基因在肿瘤与癌旁样本中的差异。每个数据点代表未纳入scRNA-seq数据集的病例。配对Wilcoxon检验,p<0.05,***p<0.0001。CD16图示:水平线代表中位数,须线表示四分位距。
H:LUSC患者肿瘤组织与匹配癌旁肺组织中LOX-1(红色)与全细胞角蛋白(绿色)的多重免疫荧光染色。比例尺:100微米。

如果上面的内容对你有用,欢迎一键三连!