不要輕易相信AnnotationHub的物種注釋包

2021-09-20 00:24:11 字數 2734 閱讀 3387

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...