當前位置:首頁 > 科技 > 正文

如何直接用Seurat讀取GEO中的單細胞測序表達矩陣

1 常見的單細胞countmatrix
  • Cell Ranger生成的raw count

    Cell Ranger (v3.0)中生成的文件除了bam文件外主要就是如下的三個表格文件(Seurat 的示例文件,2700個pbmc細胞單細胞測序):

    我們可以利用head命令檢查數據三個表格的内容。

    Barcodes通俗來講就是每個細胞的代碼,組成就是ATCG四個堿基排列組合成的不同的14個堿基組合;

    Gene.tsv或者features.tsv一般是基因的ensembl ID 和symbol

    matrix.mtx說白了就是每個細胞不同基因的表達矩陣,我們利用分别檢查文件的開頭和結尾:

這裡我們可以發現其實就是2700個細胞不同基因的表達(第一列是基因的ID,用于與genes.tsv對應轉換;第二列則是細胞的編号,匹配barcodes.tsv;第三列則是基因的表達量TPM)(沒有表達的基因不做記錄)這三組表格組合成。理解這三個表格組成後我們也不難發現,缺一不可的是matrx.mtx文件,而genes.tsv則一般是用于注釋的基因組通用文件;而如果缺失barcodes.tsv的話,則可以根據matrix判斷細胞數量自己“人為構建出”相應數量不同的barcode表格或者利用samtools從bam文件獲取。當我們把這三個文件後存在一個獨立文件夾後可以直接利用Seurat (v3.0)的Read10X()命令讀取并構建成行名稱為基因名,列名稱為barcode序列(基因名x細胞)的表達矩陣(也就是SeuratObject)進行後續分析。如果我們隻想從這三個表格直接整合成一個(基因名x細胞)的表達矩陣,可以利用以下代碼完成:

library(Matrix)
matrix_dir = "~/filtered_feature_bc_matrix/hg19/" ##根據實際文件夾進行修改
barcode.path <- paste0(matrix_dir, "barcodes.tsv")
features.path <- paste0(matrix_dir, "genes.tsv")
matrix.path <- paste0(matrix_dir, "matrix.mtx")
mat <- readMM(file = matrix.path)
feature.names = read.delim(features.path,
header = FALSE,
stringsAsFactors = FALSE)
barcode.names = read.delim(barcode.path,
header = FALSE,
stringsAsFactors = FALSE)
colnames(mat) = barcode.names$V1
rownames(mat) = feature.names$V1
  • 從公共數據庫中獲取的count matrix

    拿我們常見的GEO數據庫為例,如果是上傳到GEO數據的數據必須要上傳處理後的數據(https://www.ncbi.nlm.nih.gov/geo/info/seq.html),這一方面方便其他研究人員直接更快速的獲取或者驗證最初的高通量測序,減少了下載SRA粗數據并進行重新比對的時間。

    一般來講這些數據往往是整合好的一個count matrix,比如最新上傳的一組造血幹細胞單細胞測序數據(A 3D Atlas of Hematopoietic Stem and Progenitor Cell Expansion by Multi-dimensional RNA-Seq Analysis)(GSE120503),我們看到的處理後數據是單個文件,如下圖所示:

    解壓後我們得到隻有一個叫做“GSM3402061_zebrafish_HSC_counts_change.merge.txt”的文件,而不是Cell Ranger輸出的三個文件。

    我們檢查一下文件的内容:

    其實這就是我們在上一步整合出的(基因 x 細胞)的表達矩陣,那麼如果我們想直接利用Seurat導入這個表達矩陣進行後續分析該如何做呢?

2 Count matrix導入Seur

對于上述的表達矩陣,我們不能直接使用Seurat的Read10X()函數進行讀取,但是要進行後續分析我們可以直接把這個表達矩陣變成SeuratObject。這是一個R讀取表格的基本操作:

setwd("/test/") ##注意工作目錄
library(Seurat) ##version 3.0
library(dplyr)
new_counts <- read.table(file="/test/GSM3402061_zebrafish_HSC_counts_change.merge.txt")
head(new_counts)
mydata <- CreateSeuratObject(counts = new_counts, min.cells = 3, project = "mydata_scRNAseq")

通過以上兩種操作我們就可以完成Cell Ranger産出數據與SeuratObject之間的互相轉換。而利用這種簡單的幾行命令,我們可以較快的從他人上傳好的數據中獲取我們所需的信息(當然這需要我們充分相信合作者或者數據上傳人對于數據處理的數據質量),節省了大量下載和處理數據的時間。

你可能想看:

有話要說...

取消
掃碼支持 支付碼