为什么要转格式
目前使用最为广泛的2个单细胞分析的软件包是基于R语言的Seurat和基于Python的Scanpy。Seurat的分析对象是一个S4 method的Seurat对象,S4 method可以简单理解为可以存储很多种格式的对象类型,不用过于深究,里面存了原始矩阵,各种处理过后的矩阵以及降维信息,样本信息等等,可以通过操作符@和$进行访问,如果还不熟悉其结构可以通过Rstudio使用Tab键查看其有关属性,也可以使用str函数快速查看其拓扑结构。而Scanpy的存储对象则为一个Anndata,其结构也类似Seurat对象,但其属性命名规则则与Seurat几乎完全不同,例如其meta.data信息存在obs里,矩阵存在属性X里。
之所以要转格式,是因为目前绝大多数单细胞分析工具都是基于这两种对象进行开发的,有些工具是R语言的,有些是Python语言的,所以常常需要转格式之后才能使用相关分析工具。
import os import sys import scanpy as sc import anndata as ad import numpy as np import pandas as pd import h5py def extra_adata_info(infile): ob1=sc.read(infile)##读入h5ad文件 mat=pd.DataFrame(data=ob1.X,index=ob1.obs_names,columns=ob1.var_names) #加载系数矩阵 ,index指行内容,colums指列内容 mat.to_csv('mat.csv')# mat.to_hdf("mat.h5","mat") meta=pd.DataFrame(data=ob1.obs) meta.to_csv('metadata.tsv',sep="\t")
这里解释一下data=ob1.X.todense returns a matrix. and toarray returns an ndarray;If you want a matrix, use todense; otherwise, use toarray.即将矩阵显示出来
然后在另一个脚本文件里加载这个脚本,脚本用import需要先进入加载脚本所在路径,并且import的时候不用加.py后缀,然后再调用里面的函数extra_adata_info,需注意运行函数前需把目录转回输出目录:
import os out_put = os.getcwd() os.chdir('/extra_adata_info Path/') import extra_adata_info os.chdir(out_put) extra_adata_info('h5ad Path')