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,1

colData<-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$spot

rowData<-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 * 2

subfig_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)

结果如下所示:

10 x visum ST 预处理 python可视化_第1张图片

你可能感兴趣的:(10x,Visum,空间转录组数据预处理,python)