RNA-seq,生信技能樹

sra文件地址:ftp://ftp.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByRun/sra/

下載測序數(shù)據(jù)

# 循環(huán)下載sra文件

1扇单,for ((i=677;i<=680;i++)) ;do wget ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByStudy/sra/SRP/SRP029/SRP029245/SRR957$i/SRR957$i.sra ;done

# 后臺運行,注意括號的位置

for ((i=508;i<=523;i++)) ;do(nohup wget ftp://ftp.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByRun/sra/SRR/SRR103/SRR1039$i/SRR1039$i.sra &) ;done

2,ncbi上獲得該項目的Accession List(如圖16個run代表16個數(shù)據(jù))是一個txt文件焚虱,改名為id

image
cat id | while read id ;do prefetch $id ;done  ##  while read 一次讀取一行
ps -ef | grep prefetch  ## 查看正在運行的prefetch命令订框,ps -ef 相當于windows的任務管理器
ps -ef | grep prefetch | awk '{print $2}' | while read id ;do kill $id ;done ## awk提取出任務編號所在的第二列,循環(huán)殺除任務
ls | while read id ;do (nohup ../../biosoft/sratoolkit/bin/fastq-dump --gzip --split-3 -o ./ $id &) ;done  ## 循環(huán)把下載的所有sra文件都變?yōu)閒astq 

測序數(shù)據(jù)質(zhì)控

ls *.gz | while read id ;do fastqc $id ;done # 循環(huán)fastqc處理每個fastq文件
ls *.gz | xargs fastqc # 與上等效晨另,xargs將ls的輸出內(nèi)容作為參數(shù)傳遞給fastqc,一次傳遞一個
multiqc ./ # 把每個數(shù)據(jù)的fastqc質(zhì)控報告潭千,合并到一個報告里,方便查看
ls *1.fastq.gz >1 
ls *2.fastq.gz >2  
paste 1 2 > config # 把所有的1.fastq.gz和2.fastq.gz的文件名合并到config文件
#寫一個循環(huán)修剪的shell腳本借尿,命名為qc.sh刨晴,軟件為trim_galore

dir='/sas/supercloud-kong/liuhuijie/RNA-seq/clean'  # 輸出地址

cat $1 | while read id # $1 表示輸命令時的第一個參數(shù)

do

arr=$id

fq1=${arr[0]} # config文件里一行是兩個文件名,中間被空格隔開arr[0]表示第一個

fq2=${arr[1]}

nohup trim_galore -q 25 --phred33 --length 36 -e 0.1 --stringency 3 --paired -o $dir $fq1 $fq2 &

done

bash qc.sh config # 執(zhí)行命令

比對路翻,把所有的fastq數(shù)據(jù)狈癞,提取出前10000行,方便比對茂契。


1. ls ../*.gz | while read id ;do (zcat $id | head -10000 > $(basename $id)) ;done # 提取前1萬行蝶桶,重新輸出到$(basename $id)文件里,basename是只取文件名
2. ls ../*.gz | while read id ;do (zcat $id | head -10000 > $(basename $id '.gz')) ;done # 重輸出的文件名里去除了后綴 .gz

分別用軟件bowtie2掉冶、hisat2做比對得到sam文件真竖,批量轉(zhuǎn)換為bam文件

hisat2 -p 5 -x ../../index/hisat/hg38 -1 SRR1039508_1_val_1.fq -2 SRR1039508_2_val_2.fq -S tmp.hisat.sam
bowtie2 -p 5 -x ../../index/bowie/hg38 -1 SRR1039508_1_val_1.fq -2 SRR1039508_2_val_2.fq > tmp.bowtie.sam
ls *.sam | while read id ;do (samtools sort -O bam -@ 5 -o $(basename $id '.sam').bam $id) ;done  # 批量轉(zhuǎn)換為bam,把后綴.sam去掉換成bam
samtools view tmp.bowtie.bam | less -S  #查看bam文件厌小,可試試IGV可視化查看
ls *.bam | xargs -i samtools index {}  #批量為bam文件建索引恢共,xargs -i把bam文件作為參數(shù)傳遞給samtools,{}代替了bam文件
ls *bam | while read id ;do (samtools flagstat -@ 10 $id > $(basename $id '.bam').flagstat) ;done  # flagstat 統(tǒng)計
cat *flagstat | cut -d ' ' -f 1 | paste - - - - - - - - - - - - - # 合并所有的flagstat文件的第一列璧亚,每個flagstat文件都為13行讨韭,有13個-

把當前文件夾里的fastq數(shù)據(jù),用hisat2和bowtie軟件癣蟋,按順序比對到hg38

ls *gz | cut -d "_" -f 1 | sort -u | while read id ;do (ls -lh ${id}_1_val_1.fq.gz ${id}_2_val_2.fq.gz | hisat2 -p 5 -x ../index/hisat/hg38 -1 ${id}_1_val_1.fq.gz -2 ${id}_2_val_2.fq.gz -S $id.hisat.sam);done

ls *gz | cut -d "_" -f 1 | sort -u | while read id ;do (ls -lh ${id}_1_val_1.fq.gz ${id}_2_val_2.fq.gz | bowtie2 -p 5 -x ../index/bowtie/hg38 -1 ${id}_1_val_1.fq.gz -2 ${id}_2_val_2.fq.gz > $id.bowtie.sam);done

定量

nohup featureCounts -T 10 -p -t exon -g gene_id -a ../gtf/Homo_sapiens.GRCh38.92.chr.gtf.gz -o all.id.txt *bam 1>count.log 2>&1 &
#  featureCounts 進行定量透硝,統(tǒng)計比對在這個基因的坐標上的read數(shù)
multiqc all.id.txt.summary  #用multiqx對上步得到的結(jié)果進行可視化

表達矩陣探索

rm(list = ls())
options(stringsAsFactors = F)
a= read.table('all.id.txt',header = T)  #header
meta=a[,1:6]
exprSet=a[,7:ncol(a)]
a2=exprSet[,'SRR1039508.hisat.bam']  ##
library(pheatmap)
png('heatmap.png')
corrplot(cor(exprSet))
pheatmap(scale(cor(log2(exprSet+1))))
dev.off()
## 
library(airway)
data("airway")
exprSet=assay(airway)
a1=exprSet[,'SRR1039508']  ##
group_list=colData(airway)[,3]
##hclust, 層次聚類包
colnames(exprSet)=paste(group_list,1:ncol(exprSet),sep = '_')
##difine nodePar
nodePar=list(lab.cex=0.6, pch=c(NA, 19),cex=0.7,col='blue')
hc=hclust(dist(t(log2(exprSet+1))))
par(mar=c(5,5,5,10))  #par函數(shù)設(shè)置圖形邊距,mar參數(shù)設(shè)置邊距
png('hclust.png',res = 120)
plot(as.dendrogram(hc),nodePar=nodePar,horiz=TRUE)
dev.off()

a2=data.frame(id=meta[,1],a2=a2)
a1=data.frame(id=names(a1),a1)
library(stringr)  #stringr包處理字符串
a2$id=str_split(a2$id,'\\.',simplify = T)[,1]
tmp=merge(a1,a2,by='id')
png('tmp.png')
plot(tmp[,c(2,4)])  #從圖上看更直觀
dev.off()

DEseq2篩選差異表達基因

library(DESeq2)
library(edgeR)
library(limma)
library(airway)
data("airway")
exprSet=assay(airway)  #定量后的信息
group_list=colData(airway)[,3]  #提取出來了分組信息疯搅,也可以手動寫成c()
colData=data.frame(row.names = colnames(exprSet),
                   group=group_list)
dds=DESeqDataSetFromMatrix(countData = exprSet,
                           colData = colData,
                           design = ~group)  #獲取矩陣信息
dds=DESeq(dds)
res=results(dds,contrast = c('group','trt','untrt'))
summary(res)  #利用summary命令統(tǒng)計顯示一共多少個genes上調(diào)和下調(diào)
resOrdered=res[order(res$padj),]  #根據(jù)padj(p值經(jīng)過多重校驗校正后的值)排序
DEG=as.data.frame(resOrdered)
DEG=na.omit(DEG)
library(pheatmap)
choose_gene=head(rownames(DEG),100)  
choose_matrix=exprSet[choose_gene,]  #抽取差異表達顯著的前100個基因
choose_matrix=t(scale(t(choose_matrix)))  #用t函數(shù)轉(zhuǎn)置蹬铺,scale函數(shù)標準化
pheatmap(choose_matrix,filename='DEG_top100.png')

火山圖

logFC_cutoff=with(DEG,mean(abs(log2FoldChange))+2*sd(abs(log2FoldChange)))  #算log2FoldChange的閾值,with 提取數(shù)據(jù)框中的某些參數(shù)做運算秉撇,abs求絕對值,sd求標準差
DEG$change=as.factor(ifelse(DEG$pvalue<0.05 & abs(DEG$log2FoldChange)>logFC_cutoff,ifelse(DEG$log2FoldChange>logFC_cutoff,'UP','DOWN'),'NOT'))
#ifelse函數(shù)秋泄,大于logFC_cutoff的設(shè)為up琐馆,小于為down
this_title=paste0('Cutoff for logFC is ',round(logFC_cutoff,3), '\nThe number of up gene is ',nrow(DEG[DEG$change=='UP',]), '\nThe number of down gene is ',nrow(DEG[DEG$change=='DOWN',]))  #paste0函數(shù),默認是sep=""
library(ggplot2)                     
g=ggplot(data = DEG,
         aes(x=log2FoldChange,y=-log10(pvalue),
             color=change))+
  geom_point(alpha=0.4,size=1.75)+
  theme_set(theme_set(theme_bw(base_size = 20)))+
  xlab('log2 fold change')+ylab('-log10 p-value')+
  ggtitle(this_title)+theme(plot.title = element_text(size = 15,hjust = 0.5))+
  scale_color_manual(values = c('blue','black','red'))  #corresponding to the levels(res$change)
ggsave(g,filename = 'volcano.png') 

png('dispersions.png',1000,1000,pointsize = 20)
plotDispEsts(dds,main='dispersion plot')
dev.off()

作圖查看原始定量后的數(shù)據(jù)和normalization后的數(shù)據(jù)的差異

rld=rlogTransformation(dds)  #DEseq2自帶的rlog算法對數(shù)據(jù)進行count矩陣轉(zhuǎn)換
exprMatrix_rlog=assay(rld)
png('DEseq_RAWvsNORM.png',height = 800,width = 800)
par(cex=0.7)  #par函數(shù)設(shè)定全局繪圖參數(shù)恒序,cex放大多少倍
n.sample=ncol(exprSet)
if(n.sample>40) par(cex=0.5)  #
cols=rainbow(n.sample*1.2)  #rainbow 漸變的彩虹色
par(mfrow=c(2,2))  #4個圖按行排序
boxplot(exprSet, col=cols,main='expression value',las=2)  #las為2瘦麸,標簽垂直坐標軸
boxplot(exprMatrix_rlog, col=cols, main='expression value',las=2)
hist(as.matrix(exprSet))
hist(exprMatrix_rlog)
dev.off()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市歧胁,隨后出現(xiàn)的幾起案子滋饲,更是在濱河造成了極大的恐慌厉碟,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屠缭,死亡現(xiàn)場離奇詭異箍鼓,居然都是意外死亡,警方通過查閱死者的電腦和手機呵曹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門款咖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奄喂,你說我怎么就攤上這事铐殃。” “怎么了跨新?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵富腊,是天一觀的道長。 經(jīng)常有香客問我域帐,道長赘被,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任俯树,我火速辦了婚禮帘腹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘许饿。我一直安慰自己阳欲,他們只是感情好,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布陋率。 她就那樣靜靜地躺著球化,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓦糟。 梳的紋絲不亂的頭發(fā)上筒愚,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音菩浙,去河邊找鬼巢掺。 笑死,一個胖子當著我的面吹牛劲蜻,可吹牛的內(nèi)容都是我干的陆淀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼先嬉,長吁一口氣:“原來是場噩夢啊……” “哼轧苫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起疫蔓,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤含懊,失蹤者是張志新(化名)和其女友劉穎身冬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岔乔,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡酥筝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了重罪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片樱哼。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖剿配,靈堂內(nèi)的尸體忽然破棺而出搅幅,到底是詐尸還是另有隱情,我是刑警寧澤呼胚,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布茄唐,位于F島的核電站,受9級特大地震影響蝇更,放射性物質(zhì)發(fā)生泄漏沪编。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一年扩、第九天 我趴在偏房一處隱蔽的房頂上張望蚁廓。 院中可真熱鬧,春花似錦厨幻、人聲如沸相嵌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饭宾。三九已至,卻和暖如春格了,著一層夾襖步出監(jiān)牢的瞬間看铆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工盛末, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弹惦,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓悄但,卻偏偏與公主長得像肤频,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子算墨,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容