1. 在使用visum 平台的空间转录组数据时,其中raw-feature-bc-matrix文件夹下有barcode.tsv、feature.tsv、matrix.mtx三个文件。spatial文件夹下有tissue-positions-list.csv文件。以侵入性导管癌IDC为例:
- barcode记录位点spot的名称,大小为4992*1。
- feature记录基因的名称,大小为36601*2,各列分别为gene-id,gene-name,feature-type
- tissue-positions-list为各个spots的空间位置信息,大小为4992*6,各列为spot、in-tissue(是否在组织内部)、row、col、img-row、img-col
- matrix大小为36601*4992,行代表gene,列代表spot,元素代表该基因在该位点的表达值
- 以上文件都没有表头和列的注释,在barcode和feature读取时一定要设置header=None,否则读到的数据就会少一行
- 表头和列的注释在读入文件时需要自行添加
- matrix是稀疏矩阵,占位很大,用python的库scanpy.read()或者scipy.io.mmread()在普通电脑上都花费数十分钟才能读取。而用R语言只要几秒钟就可
- R语言对matrix切片后输出.csv文件的spot顺序和tissue-positions-list的spot顺序不一定一致,在python中使用时需要对齐处理
barcodes<-read.csv("...\\侵入性导管癌IDC 10X\\raw_feature_bc_matrix\\barcodes.tsv",header=FALSE,sep='\t')
#4992,1colData<-read.csv("...\\侵入性导管癌IDC 10X\\spatial\\tissue_positions_list.csv",header=FALSE)
#4992,6
colnames(colData) <- c("spot", "in_tissue", "row", "col", "imagerow", "imagecol")
rownames(colData) <- colData$spotrowData<-read.csv("...\\侵入性导管癌IDC 10X\\raw_feature_bc_matrix\\features.tsv",header=FALSE,sep='\t')
#36601,2
colnames(rowData) <- c("gene_id", "gene_name", "feature_type")
rowData <- rowData[, c("gene_id", "gene_name")]counts<-Matrix::readMM("...\\侵入性导管癌IDC 10X\\raw_feature_bc_matrix\\matrix.mtx")
#36601,4992
colnames(counts) <- barcodes$V1
rownames(counts)=rowData$gene_name
counts <- counts[, rownames(colData)]path=".../侵入性导管癌IDC 10X/raw_feature_bc_matrix/mat"##筛选出基因表达量大于60的基因,大部分都表达很少,或者检测不到。但这并不意味着没有检测意义
for (i in 1:36601){
tem=counts[i,]
if (sum(tem)>=60){
gene_name=rownames(counts)[i]
dir=file.path(path,paste(gene_name,".csv",sep=""))
write.csv(tem,dir)
}
}
注:R语言预处理的过程参照《Spatial transcriptomics at subspot resolution with BayesSpace》的源码
4. 以ABHD2基因为例,在python中读取可视化
position = pd.read_csv('tissue_positions_list.csv',index_col=0)
exp = pd.read_csv('./mat/ABHD2.csv',header=None,index_col=0)
#注意设置header=None
position = position.loc[exp.index]
#对齐二者的spot位点X = position[['img_x','img_y']]
g_name='ABHD2'
k = 100
# 由于每个像素太小,所以用200*200的像素块表示每个spot的表达size = max(max(X['img_x']), max(X['img_y']))+ 2 + k * 2subfig_k = np.zeros((size,size),dtype=int) for i in range(X.shape[0]):
x = X['img_x'][i]
y = X['img_y'][i]
subfig_k[int(x-k):int(x+k),int(y-k):int(y+k)] += int(exp.iloc[i])subfig_k = (subfig_k - subfig_k.min()) / (subfig_k.max() - subfig_k.min())
cv2.imwrite('./images/'+g_name+'_k_'+str(k)+'.png',subfig_k*255)
结果如下所示:
【10x|10 x visum ST 预处理 python可视化】
文章图片
推荐阅读
- Python图像处理|Python图像处理1(导入图像)
- java|pytorch贝叶斯网络_使用贝叶斯优化快速调试pytorch中的超参数的快速教程
- 如何利用Python随机从list中挑选一个元素
- python 包之 JSON 轻量数据操作教程
- 笔记|《Python程序设计与算法基础教程(第二版)》江红 余青松 课后选择题 课后填空题答案
- python|httprunner3,项目结构
- 基于Django的程序测试
- python|全国计算机等级考试二级Python真题及解析
- python|全国大学生计算机等级考试计算机二级python真题