鉴于在生物信息分析过程中,有些时候我们的输入/输出的fasta格式文件的基因ID经常会杂乱无章,不知道属于哪个物种或者哪个类别。因此,我写了一个python程序来简化这一方法。
比如,我在前一段时间做基因家族分析的过程中,就遇到了一个类似这样的问题:
假设我们对燕麦、大麦和小麦这三种谷物的多样性研究。我们对每种物种的基因进行测序,得到了大量的基因序列数据。然后我们为每种物种的每个基因分配了一个唯一的基因ID。但是在这个过程中,我们忘记了添加这些基因ID与它们分别属于哪个物种的信息。也就是说,我们现在面对的是一堆像这样的基因ID,"gene12345","gene67890",以及"gene11222"(实际上可能更加复杂,但这只是举例),但我们无法一眼就知道它们分别属于哪个物种。如果这些基因序列分别在三个物种的基因组文件中查看还好,但是基因家族分析往往需要把不同物种的基因序列整合到一个文件中,这就导致了数据分析的困难。
于是,我写出了一个Python程序,它可以遵循一个简单的原则,即为每个物种的基因ID添加一个前缀,以表示它们属于哪个物种。具体为:如果一个基因ID属于燕麦,我就在基因ID前添加"Oat_";如果属于大麦,我就添加"Barley_";如果属于小麦,我则添加"Wheat_"。有了这个前缀,我们就可以在看到基因ID时立即知道它们分别属于哪个物种,而不需要花大量时间去查阅原始文件或表格。
这个Python程序首先会读取一个包含所有基因ID及其所属物种信息/类别的文件。然后,程序会遍历fa文件中的每一行。如果这一行是基因序列的ID行,也就是以">"开头的行,程序就会查找这个ID是否存在于我们的数据库中。如果存在,程序就会找到对应的物种信息,然后在基因ID前添加对应物种的前缀。
这样一来,在进行基因家族分析时,我们只需一眼看到基因ID,就能立即知道这个基因是属于哪个物种,极大地方便了我们的研究。无论未来研究者增加了多少基因、加入了新的物种,这个程序都可以轻松地进行更新和应对。也许看似微小,但此举为实现快速有效的基因家族分析提供了巨大的便利。即使只有一个物种,不同基因也可能会有着不同类别,比如不同功能的基因或者特殊功能的基因ID,我们也想在前面添加它的类别前缀,那也是可以实现滴。
当然,你也可以在整合不同物种的基因之前就使用文本替换命令为每个物种的基因ID添加前缀,这种情况当然不需要用此脚本,但是如果说你的文件已经设计好了每个物种的基因ID前缀,但是你希望每个物种的不同特殊基因再去设置一些更加具体的前缀,比如说一个物种名简写是xx,那么你设计好的基因ID可能为xx1913,这时候,有个基因的功能是a,你希望为这个基因再次添加前缀,就可以用此脚本将ID更改为类似a_xx1913的格式了,我的灵感是来源于我在做基因家族分析时,由于物种数目太多且基因种类太多,才逼迫我不得不写了这么一个python脚本,我个人认为在面对及其复杂的基因ID处理问题时,这程序还是值得一试的。
ok,原理、用途讲清楚了,下面来说说这个程序的用法:
首先,我们需要准备两个文件。
第一个文件的格式没有太多要求,只要是一个制表符分隔的表格文件,且第一列是类别,也就是基因功能或者物种名的简写;第二列是基因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