python基本部分学完了之后,见专辑《python生信笔记》,就需要开始进行大量的数据分析实战练习进行掌握了。这次给大家找了个数据,文献于2022年12月12日发表在 Cancer Cell 杂志(IF=48.8)上,标题为《High-resolution single-cell atlas reveals diversity and plasticity of tissue-resident neutrophils in non-small cell lung cancer》。
这篇文献是一篇机器典范的python流派的数据分析文章,集合了单细胞数据预处理,数据合并,数据整合,数据注释等工作。跨数据集和大数据量!应该有很多细节值得学习,更特别的是注释工作,做这样的一个大数据量的图谱类细胞类型注释,可以看看里面到底是如何处理各种分析细节的!
给你最好的答疑!
前提回顾
作者的核心内容为通过整合19项研究、21个数据集共计298名患者的505份样本(图1A),首次构建了非小细胞肺癌核心图谱。核心图谱共整合 898,422 个单细胞,将其注释为12个粗粒度细胞类型及44个主要细胞亚型/状态(如分裂期细胞),包括169,223个上皮细胞、670,409个免疫细胞及58,790个基质与内皮细胞(图1B)。
核心图谱对应的数据集合见:文献的Table S1。
前面已有内容
step0-2:见稿子
step0:熟悉数据和代码。这一步看文献和下载作者的代码。文献背景介绍:(IF=48.8)顶刊杂志的带有超详细python单细胞代码和数据学习的文献分享
可复现学习的代码:https://github.com/icbi-lab/luca
step1:下载作者提供的数据并探索。这一步下载好作者的数据。
梳理好的数据下载链接:https:///10.5281/zenodo.6411867
step2:看作者的分析方法细节。这里了解作者的分析思路。步骤见:
-
QC of the individual datasets based on detected genes, read counts and mitochondrial fractions -
Merging of all datasets into a single AnnDataobject. Harmonization of gene symbols. -
Annotation of two “seed” datasets as input for scANVI. -
Integration of datasets with scANVI -
Doublet removal with SOLO -
Annotation of cell-types based on marker genes and unsupervised leiden clustering. -
Integration of additional datasets with transfer learning using scArches.
step3:读取数据并构建h5ad对象(11_own_datasets),见稿子。
这里得到文件 batch1_3patients.h5ad。
作者已经有提供好的,在下载的数据目录中翻一下就有:data/11_own_datasets/batch1_3patients/
step4:batch2数据处理(11_own_datasets)
1、先读取batch2数据的表型信息:
# how="all" 参数表示:只有当整行所有值都为NaN(空值)时才删除该行
# axis="columns" 指定操作方向为列,删除全为空值的列
meta = (
pd.read_excel( "./tables/patient_table_batch2.xlsx", engine="openpyxl" )
.dropna(how="all")
.dropna(axis="columns", how="all")
)
meta
meta内容如下:
目录中的内容如下:
ls data/11_own_datasets/batch2/processed/
2、读取count矩阵:
定义一个函数:
## 定义一个读取count矩阵的函数
def load_counts(meta):
p = Path(f"./data/11_own_datasets/batch2/processed/{meta['file_id']}_{'N' if meta['origin'] == 'normal_adjacent' else 'T'}.csv")
expr = pd.read_csv(p, skiprows=5, index_col=0)
gene_expr = expr.loc[ (~expr.index.str.contains("(Ab)") & ~expr.index.str.startswith("Lex_")), :]
obs = pd.DataFrame().assign(cell_id=expr.columns, **meta)
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
return adata
批量读取并运行:
meta['file_id']
meta['origin']
# Pool(16)创建包含16个工作进程的进程池
# 数字16表示同时运行的进程数量
# map函数将任务分配给所有进程并行执行
# 存储所有进程返回结果的列表
with Pool(16) as p:
adatas = p.map(load_counts, meta.to_dict(orient="records"))
adatas[0]
合并在一起:
adata = anndata.concat(adatas, index_unique="_", join="outer")
adata

处理一下样本表型信息:
adata.obs["sample"] = [f"{patient}_{origin}" for patient, origin in zip(adata.obs["patient"], adata.obs["origin"])]
adata.obs["platform"] = "BD-Rhapsody"
adata.obs["platform_fine"] = "BD-Rhapsody"
adata.obs
样本每组的细胞数:
adata.obs.drop_duplicates()
adata.obs.groupby(["patient", "origin"]).size()
3、最后保存数据:
# 保存
adata.write_h5ad("ukim_v_batch2.h5ad", compression="lzf")
以上会得到文件 ukim_v_batch2.h5ad。
step5:处理Lambrechts_2018_LUAD_6653数据
数据列表在文献的 table s1,前去下载即可。
前面作者自测的两个数据都整理成了h5ad格式,这一步整理 Lambrechts_2018_LUAD_6653数据,来自 2018年8月发表在 Nat Med 杂志上的文献,标题为《Phenotype molding of stromal cells in the lung tumor microenvironment》。
作者这里提供了初步的h5ad数据,需要读取进来做一点处理。
首先是环境准备
加载下面的模块:
# %%
# %load_ext autoreload
# %autoreload 2
import scanpy as sc
import numpy as np
import pandas as pd
import scipy.sparse as sp
from scanpy_helpers.annotation import AnnotationHelper
from nxfvars import nxfvars
sc.set_figure_params(figsize=(5, 5))
缺少模块:
No module named ‘scanpy_helpers’
No module named ‘nxfvars’
https://github.com/grst/scanpy_helpers
安装:
# bash命令
conda activate sc2
# 模块 scanpy_helpers
unzip scanpy_helpers-master.zip
cd scanpy_helpers-master/
conda install flit -y
flit install -s
# 模块 nxfvars
pip install nxfvars
然后重新加载模块,大功告成:
今天先分享到这里~(未完待续)。