? 鑒于在生物信息分析過程中,有些時候我們的輸入/輸出的fasta格式文件的基因ID經(jīng)常會雜亂無章,不知道屬于哪個物種或者哪個類別。因此,我寫了一個python程序來簡化這一方法。
? 比如,我在前一段時間做基因家族分析的過程中,就遇到了一個類似這樣的問題:
? 假設我們對燕麥、大麥和小麥這三種谷物的多樣性研究。我們對每種物種的基因進行測序,得到了大量的基因序列數(shù)據(jù)。然后我們?yōu)槊糠N物種的每個基因分配了一個唯一的基因ID。但是在這個過程中,我們忘記了添加這些基因ID與它們分別屬于哪個物種的信息。也就是說,我們現(xiàn)在面對的是一堆像這樣的基因ID,"gene12345","gene67890",以及"gene11222"(實際上可能更加復雜,但這只是舉例),但我們無法一眼就知道它們分別屬于哪個物種。如果這些基因序列分別在三個物種的基因組文件中查看還好,但是基因家族分析往往需要把不同物種的基因序列整合到一個文件中,這就導致了數(shù)據(jù)分析的困難。
? 于是,我寫出了一個Python程序,它可以遵循一個簡單的原則,即為每個物種的基因ID添加一個前綴,以表示它們屬于哪個物種。具體為:如果一個基因ID屬于燕麥,我就在基因ID前添加"Oat_";如果屬于大麥,我就添加"Barley_";如果屬于小麥,我則添加"Wheat_"。有了這個前綴,我們就可以在看到基因ID時立即知道它們分別屬于哪個物種,而不需要花大量時間去查閱原始文件或表格。
? 這個Python程序首先會讀取一個包含所有基因ID及其所屬物種信息/類別的文件。然后,程序會遍歷fa文件中的每一行。如果這一行是基因序列的ID行,也就是以">"開頭的行,程序就會查找這個ID是否存在于我們的數(shù)據(jù)庫中。如果存在,程序就會找到對應的物種信息,然后在基因ID前添加對應物種的前綴。
? 這樣一來,在進行基因家族分析時,我們只需一眼看到基因ID,就能立即知道這個基因是屬于哪個物種,極大地方便了我們的研究。無論未來研究者增加了多少基因、加入了新的物種,這個程序都可以輕松地進行更新和應對。也許看似微小,但此舉為實現(xiàn)快速有效的基因家族分析提供了巨大的便利。即使只有一個物種,不同基因也可能會有著不同類別,比如不同功能的基因或者特殊功能的基因ID,我們也想在前面添加它的類別前綴,那也是可以實現(xiàn)滴。
? 當然,你也可以在整合不同物種的基因之前就使用文本替換命令為每個物種的基因ID添加前綴,這種情況當然不需要用此腳本,但是如果說你的文件已經(jīng)設計好了每個物種的基因ID前綴,但是你希望每個物種的不同特殊基因再去設置一些更加具體的前綴,比如說一個物種名簡寫是xx,那么你設計好的基因ID可能為xx1913,這時候,有個基因的功能是a,你希望為這個基因再次添加前綴,就可以用此腳本將ID更改為類似a_xx1913的格式了,我的靈感是來源于我在做基因家族分析時,由于物種數(shù)目太多且基因種類太多,才逼迫我不得不寫了這么一個python腳本,我個人認為在面對及其復雜的基因ID處理問題時,這程序還是值得一試的。
? ok,原理、用途講清楚了,下面來說說這個程序的用法:
? 首先,我們需要準備兩個文件。
? 第一個文件的格式?jīng)]有太多要求,只要是一個制表符分隔的表格文件,且第一列是類別,也就是基因功能或者物種名的簡寫;第二列是基因ID即可。比如有一個基因類別為A,另一個基因類別為B,則格式為:
A? ? 基因1
B? ? 基因2
? 至于這個文件怎么準備,你可以直接用blast生成的表格文件,前提是你得把blast的輸入文件中的其中一個文件基因ID替換為這個基因家族的類別或簡寫,這應該很好理解;除此之外,直接手打也是可以的?;蛘吣阋部梢允褂妹钚械姆椒ㄅ可桑辉龠^多講述。我們假設這個文件名字叫1.tab
? 第二個文件就是你整理好的不同物種或單個物種的基因序列fasta格式文件。我們假設文件名叫2.fa
?運行代碼如下:
?python update_fa.py 1.tab 2.fa
?一鍵替換ID前綴就完成了~
鏈接地址:update_fa.py