bioconductor開發的物種注釋包系列集合了乙個物種不同**的注釋資訊,能夠根據基因id對其進行多種**的注釋,比如說基因的別名,基因的功能等。
at1g13970 na na
at1g14120 na na
at1g14240 na na
at1g14600 na na
一開始得到的結果裡沒有多少個基因,所以缺少幾個注釋,通過手工去查詢也行,但是目前差異表達分析動不動就給別人500多個基因,於是就有幾十個甚至上百個未注釋的基因,所以我想著要不自己更新擬南芥的物種包。
img這下就非常有趣了,在原始檔案中能搜尋到的基因用bioconductor的物種注釋包時卻沒有注釋資訊!為了搞清楚這個原因,我花了快半個下午的時間去折騰,終於被我找到了原因。 我分別用乙個能被org.at.tair.db注釋和乙個不能被org.at.tair.db的注釋去搜尋原始文字.
# 無注釋
1 at1g14185.1
2 protein_coding
3 glucose-methanol-choline (gmc) oxidoreductase family protein
45 glucose-methanol-choline (gmc) oxidoreductase family protein; functions in: ...
# 有注釋
1 at1g19610.1
2 protein_coding
3 arabidopsis defensin-like protein
4 predicted to encode a pr (pathogenesis-related) protein. ...
5 pdf1.4; functions in: molecular_function unknown;
簡單的比較之後,你差不多就知道了org.at.tair.db的在功能描述這一部分其實只用第一列和第四列(為了方便展示我轉置了原始資料)。這就是非常讓人意外了,為啥它不用第一列和第三列呢? 我於是又去看了其他幾個基因,就差不多明白了,原始的文字特別的混亂,你除了能保證第一列和第二列有資訊外,其他列你根本無法保證,因此最好的策略以第一列作為檢索的關鍵字,其他列合併成一列才行,然而作者沒有那麼細緻。
於是我就放棄了用org.at.tair.db注釋基因功能描述和基因別名了,還是自己寫乙個python指令碼進行注釋吧。
下面這個指令碼只適用於bed格式的輸入,且第四列為轉錄本id,另外兩個輸入檔案分別為」gene_aliases_20140331.txt」和」tair10_functional_descriptions_20140331.txt」, 用法為
python bed_anno.py to_anno.bed gene_aliases_20140331.txt tair10_functional_descriptions_20140331.txt > anno.xls
import sysfrom collections import defaultdict
bed_file = sys.ar**[1]
alias_file = sys.ar**[2]
func_file = sys.ar**[3]
alias_dict = defaultdict(list)
func_dict = defaultdict(list)
# read alias file
for line in open(alias_file, 'r'):
items = line.strip().split('\t')
alias_dict[items[0]] = items[1:]
# read function description file
for line in open(func_file, 'r'):
items = line.strip().split('\t')
func_dict[items[0]] = items[1:]
# annotation and output
for line in open(bed_file, 'r'):
transcript_id = line.strip().split("\t")[3]
gene_id = transcript_id.split(".")[0]
gene_alias = alias_dict[gene_id] if len(alias_dict[gene_id]) > 0 else ['']
gene_func = func_dict[transcript_id] if len(func_dict[transcript_id]) > 0 else ['']
gene_anno = '{}\t{}\t{}'.format(line.strip(), gene_alias[0], '\t'.join(gene_func))
print(gene_anno)
不要輕易相信ALV
近日發現一詭異顯現,2lis 02 scl採購資料上傳時,資料量字段 例如cpquabu 資料上到dso時,數量被放大了十倍 如psa數量為6,到了dso後變為60 經除錯,例程中未做任何處理。但是執行報表的時候資料顯示又是正確的。原來是alv在作怪。用alv顯示dso資料時,系統自動調整小數字數為...
不要相信 errno 可靠
最近發現第3方提供的 api,引起記憶體不斷增大,如下 int retval kill pshareddata regbuffpids i 0 if retval 0 else if errno eperm else if errno einval else if errno esrch 它用 ki...
不要相信 errno 可靠
最近發現第3方提供的 api,引起記憶體不斷增大,如下 int retval kill pshareddata regbuffpids i 0 if retval 0 else if errno eperm else if errno einval else if errno esrch 它用 ki...