专栏二十三:Python读取和分析空间数据的经验杂谈
部分情况同样适合单细胞的分析结果
读取数据阶段
1.错误的library_id
包括sc和sq的两种读取方式,大同小异。
理论上有h5数据和spatial文件夹就可以读取成功,并且自动赋予和文件名一样的library_id,例如
slide = sq.read.visium("/home/data/STdata/T911")
然后检查library_id的方式为
slide.uns['spatial'].keys()
理论上应该自动匹配文件名,给到T911,但是我在实践中有一个样本被错误的赋予library_id
修正结果的方法就是强行指定id,这样就正常了,建议常规指定id
slide = sq.read.visium("/home/data/STdata/T911",library_id="T911")
slide.uns['spatial'].keys()
2.错误的orig.ident
受限于python中没有R内的@或者$的方式,一般以来adata.obs的方式向下取层次,那么个别时候如果命名中本身就有点(.)的情况,比如orig.ident,极有可能受到影响,尤其是对于Seurat转scanpy的时候更容易出现,毕竟scanpy自己是没有orig.ident的。这种我本人遇到过类似报错。随便举例也可以看到很多参数使用的都是下划线。
解决方法很简单就是给个特殊一点的名字就好啦
adata.obs['sample'] = sample_name
但这里还有个要注意的地方,那就是下一点--字符串
3.字符串/格式错误
在R中我们常用class和str函数观察格式,python中更是大坑,稍不留神数字/数值和字符串等异常都会报错。所以为了避免此类情况,强制性转换字符串
adata.obs["sample"] = [str(i) for i in adata.obs['sample']]
4.barcode的样本编号
这个属于如果有多样本,不增加会出现barcode的重复
增加方式:样本名+barcodes
adata.obs_names = adata.obs["sample"] \
+ '_' + adata.obs_names
5.增加barcode索引
正常情况下,adata.obs并不会出现barcodes的列名,默认为空,为了方便观察和索引,可以给这一列命名。
adata.obs.index.name = 'spot_id'