生信星球小練習—批量讀取10X數據

劉小澤寫於2020.8.13
主要分爲兩個部分:前面用linux處理,後面用R處理

下載數據

選用的10X測試數據是:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE108677

數據也可以直接通過網盤下載:https://share.weiyun.com/7fo3qgT5

一共是7個樣本:

目的

將這7個樣本分別讀取,並簡單查看一下每個樣本的結果如何(比如有多少個細胞,關注的基因出現在哪個細胞等等)

首先是linux部分

第一步:先解壓,然後最好對每個樣本新建一個文件夾

tar -xvf GSE108677_RAW.tar
for i in $(seq 1 7);do mkdir s_${i} ;done

第二步:把各自的10X數據三個必備文件放在對應的文件夾中

for i in $(seq 1 7);do mv *_${i}_*gz s_${i} ;done
# 查看一下
ls s_1
# 每個樣本都是這三個文件:barcodes、genes、matrix
GSM2910017_sample_1_barcodes.tsv.gz GSM2910017_sample_1_genes.tsv.gz    GSM2910017_sample_1_matrix.mtx.gz

第三步:重命名

10X的數據讀取是使用Read10X函數,它必須接受特定的命名格式。否則會看到類似下面的報錯:

# Error in Read10X(data.dir = dir) : 
#   Barcode file missing. Expecting barcodes.tsv.gz

它必須要求每個樣本都是下面這樣的簡單命名:

因此,我們需要做的就是:對每個樣本文件夾中的每個文件去掉前綴,只保留後面的信息

對於超過三個的數據量,就要用到循環處理

下面的腳本中find是在mac下,如果是linux可能需要稍作調整

# 兩個循環嵌套,先找文件夾,再重命名
# ##*_是向後取:取最後一個_後面的部分
# 與之相反是:%%_* 它是向前取:取第一個_前面的部分
for i in $(seq 1 7);do find s_${i}/ -name "*gz" | while read n ;do mv $n s_${i}/${n##*_};done ;done

第四步:解壓

for i in $(seq 1 7);do gunzip s_${i}/*  ;done

接下來是R語言部分

可以簡單看看各個樣本的細胞數量,以及關注的基因有沒有在樣本中出現

rm(list = ls())
options(stringsAsFactors = F)
library(Seurat)
# 依然是一個循環
for (i in 1:7){
  # i=1
  dir=paste0('data/s_',i)
  test=Read10X(data.dir = dir)

  if('Pigr'%in%rownames(test)){
    cat('Now is: ', dir,'\n')
    print(dim(test))
    cat('Cell location is: ','\n')
    print(which(test['Pigr',]!=0)) #Pigr出現在第幾個細胞
    cat('Expression is: ','\n')
    print(test['Pigr',test['Pigr',]!=0]) # Pigr表達量
    cat('\n\n')
  }
}

歡迎關注我們的公衆號~_~  
我們是兩個農轉生信的小碩,打造生信星球,想讓它成爲一個不拽術語、通俗易懂的生信知識平臺。需要幫助或提出意見請後臺留言或發送郵件到[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章