Biopython

Biopython项目是一个由国际开发者协会创建的，用于计算生物学和生物信息学的非商业性Python工具的开源集合。   它包含表示生物序列和序列注释的类，并且能够读取和写入各种文件格式。它还允许以编程的方式访问生物信息在线数据库，例如NCBI的数据库。单独模块将 Biopython 的功能扩展到序列比对、蛋白质结构、群体遗传学、系统发育学、序列基序和机器学习。 Biopython 是旨在减少计算生物学中代码重复的众多 Bio*（以 Bio 为前缀） 项目之一。

历史 
Biopython 的开发从 1999 年开始，并于 2000 年 7 月首次发布。同时期还开发了一些类似的项目，这些项目将生物信息学功能添加到各自的编程语言中，包括BioPerl 、 BioRuby和BioJava 。该项目的早期开发人员有 Jeff Chang、Andrew Dalke 以及 Brad Chapman，迄今为止已有 100 多人做出了贡献。  2007年，建立了一个类似的Python项目，即PyCogent 。 

Biopython 的最初范围涉及访问、索引和处理生物序列文件。虽然这仍然是一个主要焦点，但在接下来的几年中，添加的模块扩展了其功能以涵盖生物学的其他领域（请参阅主要特点和示例）。

从版本 1.77 开始，Biopython 项目结束对 Python 2 的支持。

设计 
在可能的情况下，Biopython 遵循 Python 编程语言使用的惯例，使熟悉 Python 的用户更容易使用。例如，Seq 和 SeqRecord 对象可以通过 数组分片的方式进行操作，其类似于 Python 的字符串和列表。它在功能设计上也与其他 Bio* 项目（如 BioPerl）相似。

Biopython 能够为其每个功能区域读写最常见的文件格式，并且其许可证是宽松的并且与大多数的其他软件许可证兼容，这使得 Biopython 可以在各种软件项目中使用。

主要特点和示例

序列 
Biopython 的一个核心概念是生物序列，它由 Seq 类表示。  Biopython Seq 对象在许多方面与 Python 字符串相似：它支持 Python 切分符号，可与其他序列连接，并且不可变。此外，它还包括特定于序列的方法，并指定所使用的特定生物字母。>>> # 该脚本创建 DNA 序列并执行一些典型的操作
>>> from Bio.Seq import Seq
>>> dna_sequence = Seq("AGGCTTCTCGTA", IUPAC.unambiguous_dna)
>>> dna_sequence
Seq('AGGCTTCTCGTA', IUPACUnambiguousDNA())
>>> dna_sequence[2:7]
Seq('GCTTC', IUPACUnambiguousDNA())
>>> dna_sequence.reverse_complement()
Seq('TACGAGAAGCCT', IUPACUnambiguousDNA())
>>> rna_sequence = dna_sequence.transcribe()
>>> rna_sequence
Seq('AGGCUUCUCGUA', IUPACUnambiguousRNA())
>>> rna_sequence.translate()
Seq('RLLV', IUPACProtein())

序列注释 
SeqRecord 类以 SeqFeature 对象的形式描述序列以及名称、描述和特征等信息。每个 SeqFeature 对象指定特征的类型及其位置。特征类型可以是“gene”、“CDS”（编码序列）、“repeat_region”、“mobile_element”或其他，特征在序列中的位置可以是精确的或近似的。>>> # 该脚本从文件中加载带注释的序列并查看其部分内容。
>>> from Bio import SeqIO
>>> seq_record = SeqIO.read("pTC2.gb", "genbank")
>>> seq_record.name
'NC_019375'
>>> seq_record.description
'Providencia stuartii plasmid pTC2, complete sequence.'
>>> seq_record.features[14]
SeqFeature(FeatureLocation(ExactPosition(4516), ExactPosition(5336), strand=1), type='mobile_element')
>>> seq_record.seq
Seq("GGATTGAATATAACCGACGTGACTGTTACATTTAGGTGGCTAAACCCGTCAAGC...GCC", IUPACAmbiguousDNA())

输入输出 
Biopython 可以读写多种常见的序列格式，包括 FASTA、FASTQ、GenBank、Clustal、PHYLIP 和 NEXUS。读取文件时，文件中的描述性信息被用于填充 Biopython 类的成员，如 SeqRecord。这允许将一种文件格式的记录转换成其他格式。

非常大的序列文件可能会超出计算机的内存资源，因此 Biopython 提供了各种选项来访问大文件中的记录。它们可以完全加载到 Python 数据结构（例如列表或字典）的内存中，以占用内存为代价提供快速访问。或者，可以根据需要从磁盘读取文件，但性能较慢，但内存要求较低。>>> # 该脚本加载一个包含多个序列的文件，并以不同的格式保存每个序列。
>>> from Bio import SeqIO
>>> genomes = SeqIO.parse("salmonella.gb", "genbank")
>>> for genome in genomes:
...     SeqIO.write(genome, genome.id + ".fasta", "fasta")

访问在线数据库 
通过 Bio.Entrez 模块，Biopython 用户可以从 NCBI 数据库下载生物数据。Entrez 搜索引擎提供的每项功能都可通过该模块的功能实现，包括搜索和下载记录。>>> # 该脚本从 NCBI 核苷酸数据库下载基因组并将其保存在 FASTA 文件中。
>>> from Bio import Entrez
>>> from Bio import SeqIO
>>> output_file = open("all_records.fasta", "w")
>>> Entrez.email = "my_email@example.com"
>>> records_to_download = ["FO834906.1", "FO203501.1"]
>>> for record_id in records_to_download:
...     handle = Entrez.efetch(db="nucleotide", id=record_id, rettype="gb")
...     seqRecord = SeqIO.read(handle, format="gb")
...     handle.close()
...     output_file.write(seqRecord.format("fasta"))

Bio.Phylo 模块提供了用于处理和可视化系统发育树的工具。支持多种文件格式的读写，包括Newick 、 NEXUS和phyloXML 。通过Tree和Clade对象支持常见的树操作和遍历。示例包括转换和整理树文件、从树中提取子集、更改树的根以及分析分支特征（例如长度或分数）。 

有根树可以用ASCII或使用matplotlib绘制（参见图 1），并且Graphviz库可用于创建无根布局（参见图 2）。

基因组图 

GenomeDiagram 模块提供了在 Biopython 中可视化序列的方法。 序列可以以线性或圆形形式绘制（参见图 3），并且支持许多输出格式，包括PDF和PNG 。图表是通过制作轨迹然后向这些轨迹添加序列特征来创建的。通过循环序列的特征并使用它们的属性来决定是否以及如何将它们添加到图表的轨道中，人们可以对最终图表的外观进行更多控制。可以在不同轨道之间绘制交叉链接，从而允许在单个图表中比较多个序列。

高分子结构 
Bio.PDB 模块于2003年被添加到Biopython中，它可以从PDB和mmCIF文件加载分子结构，并 Structure对象是该模块的核心，它以分层方式组织大分子结构： Structure对象包含Model对象，Model对象包含Chain对象，Chain对象包含Residue对象，Residue对象包含Atom对象。无序残基和原子有自己的类， DisorderedResidue和DisorderedAtom ，描述它们的不确定位置。

通过使用Bio.PDB，人们可以浏览大分子结构文件的各个组成部分，例如检查蛋白质中的每个原子。可以进行常见的分析，例如测量距离或角度、比较残留物以及计算残留物深度。

群体遗传学 
Bio.PopGen 模块增加了对 Biopython for Genepop 的支持，Genepop 是一个用于群体遗传学统计分析的软件包。 这允许分析哈迪-温伯格平衡、连锁不平衡和群体等位基因频率的其他特征。

该模块还可以使用 fastsimcoal2 程序，利用凝聚态理论进行群体遗传模拟。

命令行工具的包装 
Biopython 的许多模块都包含常用工具的命令行包装器，允许在 Biopython 中使用这些工具。这些包装器包括BLAST 、 Clustal 、PhyML、 EMBOSS和SAMtools 。用户可以对通用包装类进行子类化，以添加对任何其他命令行工具的支持。

参见 

 开放生物信息学基金会
 BioPerl
 BioRuby
 BioJS
 BioJava

参考文献

外部链接 

 
 Biopython Tutorial and Cookbook (PDF)
 Biopython source code on GitHub
Python科学库
计算科学
生物信息学软件
带有Python代码示例的条目