Seurat-Scanpy互通 | R-Python互通
Tips:
Atlas级别的数据,需要做加速处理,比如常见的marker鉴定,不要用seurat默认的函数,非常慢。
presto包的算法复杂度极低,再大的数据基本一分钟内就能出结果。
1 2 | markers_rna <- presto::: wilcoxauc.Seurat (X = all.colon, group_by = 'Major' , assay = 'data' , seurat_assay = 'integrated' ) # markers_motifs <- presto:::wilcoxauc.Seurat(X = seuset.flt, group_by = 'celltype', assay = 'data', seurat_assay = 'chromvar') |
单细胞数据分析发展到现在,已经分化为两大阵营,Seurat和Scanpy,一个代表了R,有丰富的多组学package支持,一个代表了Python,为大数据和AI而生,都有其各自独特的优势,不可被取代。
作为资深用户就很烦了,懂一个是不行的,必须两个都用,所以R和Python语言你必须都精通,否则非常影响项目的数据分析进展。
我也是最先接触Python的,但后面就专心与R,他们语法存在一定的混淆和冲突,所以我只能放弃一个。经过整个博士的训练,我自认为已经精通R了,没有任何问题能把我难倒,Debug小王子。
但现在我不得不捡起Python,因为Scanpy是在是不得不用,以下就记录一些Python中对应的R的核心功能,以便实时查阅。
Seurat对象转Scanpy对象h5ad
【只能导出一个layer,RNA或者ATAC,好处就是metadata都在】默认是导出scale.data的slot,需要指定一下。
1 2 3 4 | library (sceasy) library (reticulate) sceasy:: convertFormat (seuset.flt.allen.D21, from= "seurat" , to= "anndata" , assay = "RNA" , outFile= 'keyRdata/seuset.flt.allen.D21.RNA.h5ad' ) |
1 2 | sceasy::convertFormat(escc.seuset, from= "seurat" , to= "anndata" , assay = "RNA" , main_layer = "count" , outFile= 'escc.seuset_RNA.h5ad' ) |
2025年01月13日
issue: no slot of name "meta.features" for this object of class "Assay5"
for seurat v5, run this code to downgrade the assay:
sobj[["RNA"]] <- as(sobj[["RNA"]], "Assay")
参考:https://github.com/cellgeni/sceasy/issues/82
Scanpy读取h5ad
1 | adata_ref = sc.read_h5ad(os.path.join(work_dir, '/home/zz950/projects/ApcKO_multiomics/keyRdata/seuset.flt.allen.D21.RNA.h5ad' )) |
Seurat读取h5ad【来自Python的】
【不要用SeuratDisk的LoadH5Seurat,就用最原始的anndata,只需要count matrix和metadata即可】
1 2 3 4 5 | library ( "Seurat" ) library ( "anndata" ) data <- read_h5ad ( "Kang_2022_Stomach_Reference.h5ad" ) stomach.ref <- CreateSeuratObject (counts = t (data$X), meta.data = data$obs) print ( str (stomach.ref)) |
Seurat读取h5ad【来自10x的】
1 2 3 | data <- Read10X_h5 ( "download/Epithelial_Count_matrix.h5" ) Epithelial_metadata <- read.csv ( "download/Epithelial_metadata.csv" , row.names = 1) Epithe.seuset <- CreateSeuratObject (counts = data, meta.data = Epithelial_metadata) |
Scanpy的数据结构
1 2 3 4 | adata.var adata.obs adata.X adata.raw |
查看原始数据
1 | pd.DataFrame.sparse.from_spmatrix(gc.X[ 0 : 10 , 0 : 10 ]) |
Scanpy基本操作
UMAP改颜色
1 2 | import matplotlib as mpl sc.pl.umap(adata, color = [ 'Sox9' , 'Ly6a' , 'Tacstd2' ], palette = "Set2" , color_map = mpl.cm.Reds) |
1 2 | import seaborn as sns blue = sns.color_palette( 'light:blue' , as_cmap = True ) |
Continuous color schemes are given with the color_map argument, categorical schemes are given with palette. All the scatter plots (scatter, pca, tsne, umap, etc...) share these arguments.
Scanpy obs metadata操作
- 创建一个新的df
- 变换cellName
- 行或列取子集
- 按行或列合并两个df
- 某一列的字符串split
- 取两个vector交集
- 正则匹配
创建一个新的df
1 2 3 4 5 6 | import pandas as pd ref_df = pd.DataFrame(index = a) ref_df[ "rawName" ] = b # or d = { 'col1' : [ 1 , 2 ], 'col2' : [ 3 , 4 ]} df = pd.DataFrame(data = d, index = a) |
修改列名
1 | chromsizes.columns = [ "Chromosome" , "Start" , "End" ] |
按行取子集
1 | adata = adata[:, var_names] |
按列取子集
类似seurat和R里的%in%函数,非常常用
1 | adata_subset = adata[adata.obs[ 'celltype' ].isin([ 'a' , 'b' ])] |
按行合并两个df
类似R里的cbind,按索引合并
1 | merged_df = adata.obs.merge(ref_anno, left_index = True , right_index = True ) |
按列拼装两个df
类似R里的rbind
1 | df1.append(df2) |
某一列的字符串split
类似R里的strsplit函数,提取自己需要的信息 【这个python比R的语法简单】
1 | [i.split( "-" )[ 0 ] for i in adata_ref.obs.index] |
取两个vector交集
1 | var_names = adata_ref.var_names.intersection(adata.var_names) |
元素计数,类似R的table函数
pd.value_counts(gene_sets.term)
human和mouse基因大小转换
fetal_genes[0].str.upper().values
R float的matrix转化为integer
1 2 3 4 | df_float_to_int <- function (counts){ counts<- apply (counts,2, function (x) { storage.mode (x) <- 'integer' ; x}) return (counts) } |
参考:
scanpy pipeline: http://localhost:17435/notebooks/projects/MRK60/single-cell-org/Python-visualization.ipynb
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2017-08-15 GEO数据下载分析(SRA、SRR、GEM、SRX、SAMN、SRS、SRP、PRJNA全面解析)