快速入门 – 使用 Biopython 可以做什么?

本节旨在帮助您快速开始使用 Biopython,并概述可用的功能及其使用方法。本节中的所有示例都假设您对 Python 有一定的了解,并且已成功在您的系统上安装了 Biopython。如果您认为需要复习 Python,主 Python 网站提供了大量免费文档供您入门 (https://docs.pythonlang.cn/3/)。

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

现在我们已经介绍完这些,让我们开始了解 Biopython 的强大功能。

Biopython 提供的功能概述

如引言中所述,Biopython 是一组库,用于提供处理对生物学家在计算机上工作有用的“事物”的能力。一般来说,这意味着您至少需要具有一些编程经验(当然是用 Python!)或至少对学习编程感兴趣。Biopython 的作用是通过提供可重用库来简化您的工作,这样您就可以专注于回答您感兴趣的具体问题,而不是专注于解析特定文件格式的内部机制(当然,如果您想通过编写不存在的解析器并将其贡献给 Biopython 来帮助我们,请继续!)。所以,Biopython 的目标是让您满意!

关于 Biopython 的一个值得注意的地方是,它通常提供多种“完成相同任务”的方法。在最近的版本中,这种情况已经有所改善,但仍然会令人沮丧,因为在 Python 中理想情况下应该有一种正确的方法来完成某件事。然而,这也确实是一个优势,因为它给了您很大的灵活性,可以控制这些库。教程将帮助您了解常用的或简单的方法,这样您就可以轻松地完成工作。要了解其他可能性,请查看食谱(第食谱 – 用 Biopython 做一些酷事章,其中包含一些酷技巧和提示)、内置的“docstrings”(通过 Python 的 help 命令或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 相关的内容之前,让我们设置一个示例来激发我们所做的一切,并使生活更有趣。毕竟,如果本教程中没有任何生物学内容,您为什么要阅读它呢?

由于我热爱植物,我想我们必须使用一个基于植物的示例(抱歉所有其他生物的爱好者!)。我最近刚去过当地的温室,突然对拖鞋兰产生了难以置信的迷恋(如果你想知道为什么,可以看看一些Flickr 上的拖鞋兰照片,或者尝试Google 图片搜索)。

当然,兰花不仅外观美丽,而且对研究进化和系统学的科学家来说也非常有趣。所以,假设我们正在考虑编写一项资助提案,对拖鞋兰的进化进行分子研究,并且想了解已经进行了哪些研究以及我们如何进行补充。

在阅读了一段时间后,我们发现拖鞋兰属于兰科的杓兰亚科,由 5 个属组成:杓兰属兜兰属美洲兜兰属喜马拉雅兜兰属墨西哥兜兰属

这些信息足以让我们开始深入探究更多信息。所以,让我们看看 Biopython 工具如何帮助我们。我们将从第解析序列文件格式节中介绍序列解析,但兰花将在后面继续出现 - 例如,我们将搜索 PubMed 中关于兰花的论文,并在第访问 NCBI 的 Entrez 数据库章中从 GenBank 中提取序列数据,在第Swiss-Prot 和 ExPASy章中从 Swiss-Prot 中提取某些兰花蛋白的数据,并在第ClustalW节中使用 ClustalW 对兰花蛋白进行多序列比对。

解析序列文件格式

许多生物信息学工作都涉及处理各种用于存储生物学数据的文件格式。这些文件充满了有趣的生物学数据,而一个特殊的挑战是将这些文件解析成一种格式,以便您可以使用某种编程语言来操作它们。然而,解析这些文件的任务可能会因为格式经常改变,以及格式可能包含一些细微之处而变得很困难,这些细微之处甚至可能破坏设计良好的解析器。

我们现在将简要介绍Bio.SeqIO模块 - 您可以在第序列输入/输出章中找到更多信息。我们将从在线搜索我们的朋友,拖鞋兰开始。为了使本入门教程简单易懂,我们只手动使用 NCBI 网站。让我们浏览一下 NCBI 的核苷酸数据库,使用 Entrez 在线搜索 (https://www.ncbi.nlm.nih.gov/nuccore/?term=Cypripedioideae) 来查找所有包含“Cypripedioideae”(拖鞋兰的亚科)文本的信息。

当最初编写本教程时,该搜索结果只有 94 个匹配项,我们将它们保存为 FASTA 格式的文本文件和 GenBank 格式的文本文件(文件ls_orchid.fastals_orchid.gbk,也包含在 Biopython 源代码的Doc/examples/目录下)。

如果您今天运行该搜索,您将获得数百个结果!在使用本教程时,如果您想查看相同列表的基因,只需下载上述两个文件或从 Biopython 源代码的docs/examples/目录下复制它们。在第连接生物数据库节中,我们将介绍如何在 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

简单的 GenBank 解析示例

现在,让我们加载 GenBank 文件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 中,但对于一些较少见且不受欢迎的文件格式,要么根本没有解析器,要么存在尚未链接的旧解析器。 请务必查看维基页面 https://biopython.pythonlang.cn/wiki/SeqIOhttps://biopython.pythonlang.cn/wiki/AlignIO 以获取最新信息,或在邮件列表中提问。 维基页面应包含受支持文件类型的最新列表,以及一些额外的示例。

查找有关特定解析器的信息以及如何使用它们执行酷炫操作的下一个地方是 Cookbook(本教程的第 Cookbook – 使用它做酷炫的事 章)。 如果您没有找到您要查找的信息,请考虑帮助您可怜的加班文档编写者并提交有关它的 Cookbook 条目!(一旦您弄清楚如何操作,就是这样!)

连接生物数据库

在生物信息学中,您需要做的非常常见的事情之一是从生物数据库中提取信息。 手动访问这些数据库可能非常乏味,尤其是在您需要进行大量重复工作时。 Biopython 试图通过使一些在线数据库可从 Python 脚本中访问来为您节省时间和精力。 目前,Biopython 具有从以下数据库提取信息的代码

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

接下来该做什么

既然您已经走到了这一步,希望您已经很好地理解了 Biopython 的基本知识,并且已准备好开始使用它来进行有用的工作。 现在最好的做法是完成阅读本教程,然后如果您愿意,可以开始在源代码中四处查看,并查看自动生成的文档。

一旦您了解了您要做什么以及 Biopython 中的哪些库可以做到这一点,您应该看一下 Cookbook(第 Cookbook – 使用它做酷炫的事 章),该章可能包含执行与您要做的类似操作的示例代码。

如果您知道您要做什么,但无法弄清楚如何操作,请随时将问题发布到 Biopython 主列表(请参阅 https://biopython.pythonlang.cn/wiki/Mailing_lists)。 这不仅有助于我们回答您的问题,而且还将使我们能够改进文档,以便它可以帮助下一个人完成您想做的事情。

享受代码!