#TCGA系列#TCGA樣本中的注釋文件處理

前面幾期已經(jīng)完成了從TCGA表達譜/臨床數(shù)據(jù)下載處理整合,本次對樣本中的有annotations.txt的進行分析處理

在之前下載的表達文件中,可能已經(jīng)有人注意到有些樣本文件夾中還有個annotations.txt文件.

先看看這樣的annotations文件有多少:

# 查看annotations.txt的文件的數(shù)量
ls ./*/annotations.txt|wc -l   # 結果是23

發(fā)現(xiàn)有23個.隨便打開一個是這樣的:

annotations.txt文件

再打開一個是這樣的:

![annotations.txt文件]](http://upload-images.jianshu.io/upload_images/903467-5c53537dd01057f6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

重點注意notes部分,是對這個樣本的說明.不過這樣一個個點開看不方便,我們編個腳本合并下:
#將 23個annotations.txt合并到一個文件:
anno_files=(`ls ./*/annotations.txt`)
awk 'BEGIN{OFS="\t"}{if(ARGIND==1){print $0};if(ARGIND>1 && FNR>1){print $0} }' ${anno_files[@]} >../annotations_all.tsv

這樣就得到了一個有全部23個annotations.txt文件的合并文件annotations_all.tsv,前面幾列分別是注釋ID,提交者ID,cases_ID,所屬范圍,分類,創(chuàng)建時間,狀態(tài),注釋信息.前幾列都不重要,重要的是最后一列注釋信息也就是notes,23個樣本的注釋信息如下:

23個annotations.txt的注釋
這些notes大概包括以下幾方面的注釋:
  1. 屬于肝膽混合樣本,適合在膽管癌中研究,不適合在肝癌中研究.
  2. 在TCGA統(tǒng)計前已經(jīng)經(jīng)歷過治療.
  3. 先前有結腸癌 或腎細胞癌 或膀胱癌等癌癥,接受或沒有接受治療,或者治療史不明
  4. 其他...
通過上面的說明可以看出這23個樣本都不是正常的肝癌樣本,為了防止這23個特例在分析過程中產(chǎn)生不可控的因素,而且相對于整體樣本數(shù)量425來說,去除這23個樣本也不構成影響.所以我們去除表達譜中這23個樣本.然后再合并為表達量矩陣.
之前的講過的內容(TCGA基因/miRNA表達譜數(shù)據(jù)整合?)已經(jīng)可以生成miRNA表達譜矩陣文件.通過對之前的那個腳本修改,得到的下面這個腳本會跳過有annotaions的樣本然后合并為表達量矩陣.
將這個腳本存為merge_except_anno.sh.這個腳本需要三個參數(shù), 第一個是manifest文件路徑,第二個是'reads'或'rpm' ,第三個是輸出文件路勁.
#! /bin/bash
#需要三個參數(shù),$1是manifest文件路徑,$2是'reads'或'rpm' ,$3是輸出文件路勁.

manifest_path=$1
exp_patten=$2
out_path=$3

file_ID=(`awk '{if(NR>1)print $1}' $manifest_path`)
file_name=(`awk '{if(NR>1)print $2}' $manifest_path`)
anno_files_ID=(`ls ./*/annotations.txt|awk 'BEGIN{FS="/"}{print $2}' -`)

# 排除anno_files_ID后,使用數(shù)組file_path存儲文件路徑:
for((i=0;i<${#file_ID[@]};i++)){
    if [[ "${anno_files_ID[@]}" =~ "${file_ID[$i]}" ]]
    then
        echo "跳過注釋文件:"${file_ID[$i]}
        continue
    fi
    file_path[$i]="./"${file_ID[$i]}"/"${file_name[$i]}
} 

echo "去除注釋文件還有"${#file_path[@]}"個文件"

# 使用awk二維數(shù)組進行合并:
awk -v file_num=${#file_path[@]} -v exp_patten=$exp_patten ' 
    BEGIN{
        OFS="\t";
    }
    {
        # 每一個文件第一行是列名,而我們不需要合并列名,所以要NR>1
        # 然后以miRNA($1),文件ID(ARGIND),構建值為表達量($2)二位數(shù)組a[miRNA][exp].
        if(FNR>1 && exp_patten=="rpm"){a[$1][ARGIND]=$3;}
        if(FNR>1 && exp_patten=="reads"){a[$1][ARGIND]=$2;}
    }
    # 構建了425個數(shù)組后進行合并:
    END{
        for(i in a){    # 一維是miRNA,所以i就是miRNA
            printf "%s\t",i     #輸出miRNA
            j=1;        # 為了不改變文件順序所以使用漸加的方式循環(huán)
            while(j<file_num+1){        #循環(huán)輸出每個樣本中miRNA的表達量
                printf "%s\t",a[i][j];
                j=j+1;
            }
            print ""    #每一行加個換行
        }
    }' ${file_path[@]} > $out_path
#添加首行列名:
aaa=`echo  ${file_path[@]}|sed 's/ /\n/g'|awk 'BEGIN{FS="/";ORS="\t"}{print $2}'|awk 'BEGIN{printf "%s\t","miRNA"}{print}' -  `
sed -i "1i $aaa" $out_path
echo "成功生成去除注釋的$exp_patten模式的表達量矩陣文件:"$out_path
生成reads count作為表達量值的表達量矩陣文件exp_matrix_reads.tsv 的腳本:
../merge_except_anno.sh ../gdc_manifest.2017-05-26T16-02-11.963011.tsv "reads" ../exp_matrix_reads.tsv
生成reads_per_million作為表達量值的表達量矩陣文件exp_matrix_rpm.tsv 的腳本:
../merge_except_anno.sh ../gdc_manifest.2017-05-26T16-02-11.963011.tsv "rpm" ../exp_matrix_rpm.tsv

本期查看并去除了有annotations的樣本,并將剩余樣本進行了整合,得到了最終的兩個表達量矩陣文件,這為之后的差異表達分析及生存分析做好了準備.

更多原創(chuàng)精彩內容敬請關注生信雜談

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 本期介紹一個測序質控的工具包:RSeQC包,它提供了一系列有用的小工具能夠評估高通量測序尤其是RNA-seq數(shù)據(jù)....
    生信雜談閱讀 22,737評論 4 46
  • 呂克.貝松說過:電影,不過是一片阿司匹林…… 你會發(fā)現(xiàn),到最后只有你一個人。 電影《碧海藍天》以不斷前進的波浪開篇...
    云淼淼閱讀 1,205評論 0 4
  • 1.做好充分準備。凡事都應該做好準備工作,如果只是茫然的去實施,那么是基本上是要受挫的。不打無準備的戰(zhàn),凡事預則立...
    鴻運當頭168閱讀 265評論 0 0
  • 孤島種樹 聽雨看霧
    北畤閱讀 267評論 0 0

友情鏈接更多精彩內容