10x|10 x visum ST 预处理 python可视化

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,元素代表该基因在该位点的表达值
2. 需要注意的有四点:
  • 以上文件都没有表头和列的注释,在barcode和feature读取时一定要设置header=None,否则读到的数据就会少一行
  • 表头和列的注释在读入文件时需要自行添加
  • matrix是稀疏矩阵,占位很大,用python的库scanpy.read()或者scipy.io.mmread()在普通电脑上都花费数十分钟才能读取。而用R语言只要几秒钟就可
  • R语言对matrix切片后输出.csv文件的spot顺序和tissue-positions-list的spot顺序不一定一致,在python中使用时需要对齐处理
3. R语言预处理如下:最终将每个基因的表达情况单独输出为一个.csv文件,文件以基因的名字命名
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可视化】10x|10 x visum ST 预处理 python可视化
文章图片

    推荐阅读