快速入门-您可以用Biopython做什么?

本节旨在让您快速开始使用Biopython,并概述可用的功能以及如何使用它。本节中的所有示例都假设您拥有一些Python的一般工作知识,并且您已成功在您的系统上安装Biopython。如果您认为需要复习Python,Python主要网站提供了大量免费入门文档(https://docs.python.org/3/)。

由于计算机上的许多生物工作涉及与互联网上的数据库连接,因此一些示例还需要有效的互联网连接才能运行。

既然这些都已经解决了,让我们来看看我们可以用Biopython做什么。

Biopython提供的内容的总体概述

正如引言中提到的那样,Biopython是一组库,旨在提供处理在计算机上工作的生物学家感兴趣的“事物”的能力。一般来说,这意味着您至少需要有一些编程经验(当然是Python!)或者至少对学习编程感兴趣。Biopython的工作是通过提供可重复使用的库来让您作为程序员的工作更容易,以便您可以专注于回答您感兴趣的特定问题,而不是专注于解析特定文件格式的内部(当然,如果您想通过编写不存在的解析器来提供帮助并将其贡献给Biopython,请继续!)所以Biopython的工作就是让你快乐!

关于Biopython需要注意的一件事是,它经常提供多种“做同一件事”的方法。最近的版本中情况有所改善,但这仍然可能令人沮丧,因为在Python中,理想情况下应该有一种正确的方法来做某事。然而,这也可能是一个真正的好处,因为它为您提供了对库的很大灵活性和控制权。该教程帮助您向您展示常见或简单的做事方法,以便您可以让事情顺利进行。要了解有关替代可能性的更多信息,请参阅食谱(第章  食谱-很酷的事情与它有关 ,这有一些很酷的技巧和技巧),以及内置的“docstrings”(通过Python帮助命令或 BioBioSQL ),或者最终是代码本身。

使用序列

值得注意的是(当然!),生物信息学中的中心对象是序列。因此,我们将首先快速介绍处理序列的Biopython机制, Seq 对象,我们将在第二章中更详细地讨论它  序列对象 .

大多数时候,当我们考虑序列时,我的脑海中会有一串字母,比如 AGTACACTGGT .您可以创建这样的 Seq 具有如下序列的对象- >>> 代表Python提示符,后面是您要输入的内容:

>>> from Bio.Seq import Seq
>>> my_seq = Seq("AGTACACTGGT")
>>> my_seq
Seq('AGTACACTGGT')
>>> print(my_seq)
AGTACACTGGT

Seq 对象与Python字符串的不同之处在于其支持的方法。您不能使用普通字符串来做到这一点:

>>> my_seq
Seq('AGTACACTGGT')
>>> my_seq.complement()
Seq('TCATGTGACCA')
>>> my_seq.reverse_complement()
Seq('ACCAGTGTACT')

下一个最重要的课程是 SeqRecord 或序列记录。这包含一个序列(作为 Seq 对象)带有包括标识符、名称和描述在内的附加注释。的 Bio.SeqIO 用于读写序列文件格式的模块与 SeqRecord 对象,下面将介绍这些对象,并在第二章中进行更详细的介绍  序列输入/输出 .

这涵盖了Biopython序列类的基本功能和用途。现在您已经了解了与Biopython库交互的感觉,是时候深入研究处理生物文件格式的有趣世界了!

使用示例

在我们直接进入解析器和与Biopython有关的其他一切之前,让我们树立一个榜样来激励我们所做的一切并让生活变得更有趣。毕竟,如果本教程中没有任何生物学内容,您为什么要阅读它呢?

由于我喜欢植物,我认为我们必须有一个基于植物的例子(对不起所有其他生物的粉丝!)。最近刚刚结束了当地温室的旅行,我们突然对Lady Slipper Orchids产生了令人难以置信的痴迷(如果您想知道为什么,请看看一些 Lady Slipper Orchids photos on Flickr ,或者尝试 Google Image Search ).

当然,兰花不仅看起来漂亮,而且对于研究进化和系统学的人来说也非常有趣。因此,假设我们正在考虑撰写一份资助提案,对Lady Slipper进化进行分子研究,并想看看已经进行了哪些类型的研究以及我们如何补充。

经过一点阅读,我们发现Lady Slipper Orchids属于兰科和塞浦路斯亚种,由5个属组成: Cypripedium , Paphiopedilum , Phragmipedium , SelenipediumMexipedium .

这使我们足以开始深入研究更多信息。那么,让我们看看Biopython工具如何为我们提供帮助。我们将从第一节中的序列解析开始  解析序列文件格式 ,但兰花稍后也会回来-例如,我们将在PubMed中搜索有关兰花的论文,并在第二章中从基因库中提取序列数据  NCBI的 ,从Swiss-Prot中的某些兰花蛋白中提取数据  Swiss-Prot和ExPasy ,并与CustalW合作对第一节中的兰花蛋白进行多序列比对  ClustalW .

解析序列文件格式

许多生物信息学工作的很大一部分涉及处理旨在保存生物数据的许多类型的文件格式。这些文件装载了有趣的生物数据,一个特殊的挑战是将这些文件解析成一种格式,以便您可以使用某种编程语言来操作它们。然而,解析这些文件的任务可能会因为格式可能会经常变化而受挫,并且格式可能包含即使是设计最好的解析器也会崩溃的小细节。

我们现在要简单介绍一下 Bio.SeqIO 模块-您可以在第一章中了解更多信息  序列输入/输出 .我们将从在线搜索我们的朋友,女士拖鞋兰花开始。为了使介绍简单,我们仅手工使用NCBI网站。让我们使用Deliverz在线搜索(https://www.example.com)来看看NCBI的核苷酸数据库www.ncbi.nlm.nih.gov/nuccore/?术语=塞浦路斯兰(Sepripedioideae)对于所有提及文本塞浦路斯兰(这是女士拖鞋兰花的亚种)的内容。

当本教程最初编写时,该搜索仅为我们提供了94个匹配项,我们将其保存为FASTA格式的文本文件和GenBank格式的文本文件(文件 ls_orchid.fastals_orchid.gbk ,也包含在Biopython源代码中 Doc/examples/ ).

如果您今天运行搜索,您将得到数百个结果!在学习教程时,如果您想查看相同的基因列表,只需下载上面的两个文件或从 docs/examples/ 在Biopython源代码中。节中  与生物数据库连接 我们将研究如何在Python中进行这样的搜索。

简单的FASTA解析示例

如果您打开女士拖鞋兰花FASTA文件 ls_orchid.fasta 在您最喜欢的文本编辑器中,您会看到文件的开头是这样的:

>gi|2765658|emb|Z78533.1|CIZ78533 C.irapeanum 5.8S rRNA gene and ITS1 and ITS2 DNA
CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGATGAGACCGTGGAATAAACGATCGAGTG
AATCCGGAGGACCGGTGTACTCAGCTCACCGGGGGCATTGCTCCCGTGGTGACCCTGATTTGTTGTTGGG
...

它包含94条记录,每条记录都有一行以 > (字符串符号)后面是一行或多行上的序列。现在在Python中尝试一下:

>>> from Bio import SeqIO
>>> for seq_record in SeqIO.parse("ls_orchid.fasta", "fasta"):
...     print(seq_record.id)
...     print(repr(seq_record.seq))
...     print(len(seq_record))
...

你应该在屏幕上看到这样的东西:

gi|2765658|emb|Z78533.1|CIZ78533
Seq('CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGATGAGACCGTGG...CGC')
740
...
gi|2765564|emb|Z78439.1|PBZ78439
Seq('CATTGTTGAGATCACATAATAATTGATCGAGTTAATCTGGAGGATCTGTTTACT...GCC')
592

简单的基因库解析示例

现在让我们加载SEN文件 ls_orchid.gbk 相反-请注意,执行此操作的代码几乎与上面用于FASTA文件的代码片段相同-唯一的区别是我们更改了文件名和格式字符串:

>>> from Bio import SeqIO
>>> for seq_record in SeqIO.parse("ls_orchid.gbk", "genbank"):
...     print(seq_record.id)
...     print(repr(seq_record.seq))
...     print(len(seq_record))
...

这应该给出:

Z78533.1
Seq('CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGATGAGACCGTGG...CGC')
740
...
Z78439.1
Seq('CATTGTTGAGATCACATAATAATTGATCGAGTTAATCTGGAGGATCTGTTTACT...GCC')
592

您会注意到,使用了一个较短的字符串作为 seq_record.id 在这种情况下。

我喜欢解析-请不要停止谈论它!

Biopython有很多解析器,每个解析器都有自己的小特殊利基,这些利基基于它正在解析的序列格式等等。章  序列输入/输出 覆盖 Bio.SeqIO 更详细地,而章节  序列比对 介绍 Bio.Align 用于序列比对。

虽然最流行的文件格式都集成了解析器 Bio.SeqIO 和/或 Bio.AlignIO ,对于一些更罕见和不受欢迎的文件格式,要么根本没有解析器,要么是尚未链接的旧解析器。还请查看维基页面http://biopython.org/wiki/SeqIO和http://biopython.org/wiki/AlignIO以获取最新信息,或在邮件列表中询问。维基页面应包括支持的文件类型的最新列表以及一些其他示例。

查找有关特定解析器以及如何使用它们做很酷的事情的下一个地方是Cookbook(第一章  食谱-很酷的事情与它有关 这个收件箱)。如果您找不到您要寻找的信息,请考虑帮助您那些过度劳累的可怜的记录者,并提交有关此的食谱条目!(once你弄清楚如何做到这一点,就是这样!)

与生物数据库连接

在生物信息学中需要做的一件非常常见的事情就是从生物数据库中提取信息。手动访问这些数据库可能非常乏味,特别是如果您有很多重复性工作要做。Biopython试图通过从Python脚本提供一些在线数据库来节省您的时间和精力。目前,Biopython拥有从以下数据库中提取信息的代码:

这些模块中的代码基本上可以轻松编写与这些页面上的CGI脚本交互的Python代码,以便您可以以易于处理的格式获得结果。在某些情况下,结果可以与Biopython解析器紧密集成,以便更容易提取信息。

下一步该做什么

现在您已经走到了这一步,希望您对Biopython的基础知识有了很好的了解,并准备好开始使用它来做有用的工作。现在最好的事情就是读完本教程,然后如果您想开始窥探源代码,并查看自动生成的文档。

一旦您了解了您想做的事情以及Biopython中的哪些库将做这件事,您就应该在Cookbook上达到顶峰(第章  食谱-很酷的事情与它有关 ),其中可能有示例代码来执行与您想要执行的操作类似的操作。

如果您知道自己想做什么,但不知道如何做,请随时将问题发布到Biopython.org/wiki/Mailing_lists)。这不仅可以帮助我们回答您的问题,还可以让我们改进文档,以便帮助下一个人做您想做的事情。

享受代码!