在利用python语言处理生物信息学数据时,利用一些成熟的模块或类可以降低我们处理数据的难度,提高速度与增加灵活性。Biopython就是这样的一个模块,它具备解析各种生物学格式的文件,并访问一些在线的服务器(NCBi等)等功能。因此,学习这样一个工具的使用对于我处理一些关于序列的问题时可能会有意想不到的效果,这里将分享我的学习历程与理解。参考资料基本来自https://biopython-cn.readthedocs.io/zh_CN/latest/
1.安装biopython
对于biopython的安装相对来说比较容易一些,由于我配置了anaconda,就直接使用conda安装了。事实上,这也确实是相对最为省事的一种方法:
conda create -n biopython python=3.10 biopython
此外,如果用conda创建了一个环境的话,使用pip安装也是一个不错的选择
pip install biopython
2.体验
通过阅读官方文档,我发现biopython是一个相当完善的模块,这意味着其功能是复杂而多样的,为了能够系统性使用它,必须先建立对biopython处理生物信息数据的感性认识,也就是体验使用它。
我们先在ipython的交互界面中尝试一下:
In [1]: from Bio.Seq import Seq
In [2]: seq = Seq('AGCTAGCT')
In [3]: seq
Out[3]: Seq('AGCTAGCT')
In [4]: print(seq)
AGCTAGCT
观察以上步骤,可以发现biopython处理序的思路是将序列转换为 Seq 对象,在某种形式上,这看上去很像是python内部的字符串,但是很显然,我们无法对字符串进行一些操作,例如Seq中提供的构建互补序列这一非常实用的方法:
In [5]: my_seq.complement()
Out[5]: Seq('TCGATCGA')
现在我们必须要面对一个问题,那就是在处理生物信息学数据时,我们的数据基本是保存在特定的文件中,例如fasta格式的文件,并且序列条数并不为1,序列还存有其他注释信息(即以“>”开头一行所记录的内容),因此我们必须借助其他类来实现我们的需求。在这里,我们使用的示范序列来自raw.githubusercontent.com/biopython/biopython/master/Doc/examples/ls_orchid.fasta,它的内容形如:
>gi|2765658|emb|Z78533.1|CIZ78533 C.irapeanum 5.8S rRNA gene and ITS1 and ITS2 DNA
CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGATGAGACCGTGGAATAAACGATCGAGTG
AATCCGGAGGACCGGTGTACTCAGCTCACCGGGGGCATTGCTCCCGTGGTGACCCTGATTTGTTGTTGGG
...
这是一个典型的fasta文件格式,那么为了解析这个文件,我们引入了新的类 SeqIO ,它是处理这种文件强有力的武器:
In [1]: from Bio import SeqIO
In [2]: for seq_obj in SeqIO.parse("seq1.fa", "fasta"):
...: print(seq_obj.id)
...: print(repr(seq_obj.seq))
...: print(len(seq_obj))
...:
gi|2765658|emb|Z78533.1|CIZ78533
Seq('CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGATGAGACCGTGG...CGC')
740
gi|2765657|emb|Z78532.1|CCZ78532
Seq('CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGTTGAGACAACAG...GGC')
753
观察代码结构,可以体会到:
(1) SeqIO的parse函数会返回某种迭代器,以便我们可以逐个解析序列对象,并输出每个序列的">"行信息,转化后的序列对象(Seq),以及序列的长度等信息
(2) Seq对象的具备的一般字符串的性质在这里再一次得到了体现
以上就是对于biopython模块的初步认识,在下一次学习中,我将重点对里面的Seq对象进行讨论。
网友评论