快速入門 – 你可以用 Biopython 做什麼?
本節旨在讓你快速開始使用 Biopython,並概述其提供的功能以及如何使用它。本節中的所有範例都假設你對 Python 有一些基本的工作知識,並且你已成功在你的系統上安裝了 Biopython。如果你認為你需要複習 Python,主要的 Python 網站提供了大量的免費文件供你入門 (https://docs.python.org/3/)。
由於電腦上的許多生物工作都涉及連接到網路上的資料庫,因此某些範例也需要有效的網路連線才能執行。
現在一切都準備就緒,讓我們開始了解如何使用 Biopython。
Biopython 提供的功能概覽
如簡介中所述,Biopython 是一組函式庫,旨在提供生物學家在電腦上工作時處理「事物」的能力。一般來說,這意味著你至少需要一些程式設計經驗(當然是用 Python!)或至少對學習程式設計感興趣。Biopython 的工作是透過提供可重複使用的函式庫來簡化你作為程式設計人員的工作,以便你可以專注於回答你感興趣的特定問題,而不是專注於解析特定檔案格式的內部結構(當然,如果你想透過編寫不存在的解析器並將其貢獻給 Biopython 來提供幫助,請繼續!)。因此,Biopython 的工作是讓你感到快樂!
關於 Biopython,有一點需要注意的是,它通常提供多種「執行相同操作」的方法。最近的版本有所改進,但這仍然令人沮喪,因為在 Python 中,理想情況下應該只有一種正確的方法來執行某些操作。但是,這也可以帶來真正的好處,因為它可以讓你對函式庫具有很大的彈性和控制權。本教學有助於向你展示執行操作的常見或簡單方法,以便你可以直接開始工作。要了解有關其他可能性的更多資訊,請查看食譜(章節 食譜 – 用它做一些酷炫的事情,其中有一些很酷的技巧和提示),以及內建的「docstrings」(透過 Python help 命令或 Bio
和 BioSQL
),或最終查看程式碼本身。
處理序列
可以說(當然!),生物資訊學中的核心物件是序列。因此,我們將從快速介紹 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 圖片搜尋)。
當然,蘭花不僅外觀美麗,對於研究演化和系統學的人來說也非常有趣。因此,假設我們正在考慮撰寫一份資金申請提案,以對兜蘭的演化進行分子研究,並想看看已經做了哪些研究,以及我們如何能做出貢獻。
經過一番閱讀後,我們發現兜蘭屬於蘭科 (Orchidaceae) 和兜蘭亞科 (Cypripedioideae),由 5 個屬組成:Cypripedium、Paphiopedilum、Phragmipedium、Selenipedium 和 Mexipedium。
這足以讓我們開始深入挖掘更多資訊。因此,讓我們看看 Biopython 工具如何幫助我們。我們將從第 解析序列檔案格式 節中的序列解析開始,但蘭花也會在稍後再次出現 – 例如,我們將在第 存取 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.fasta 和 ls_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
中,但對於一些較少見且不受歡迎的檔案格式,則完全沒有解析器,或是有尚未連結的舊解析器。也請查看 wiki 頁面 https://biopython.dev.org.tw/wiki/SeqIO 和 https://biopython.dev.org.tw/wiki/AlignIO 以獲取最新資訊,或是在郵件論壇上提問。wiki 頁面應包含受支援檔案類型的最新列表,以及一些其他範例。
尋找有關特定解析器以及如何使用它們進行炫酷操作的資訊的下一個地方是 Cookbook(本教學的章節 Cookbook – 用它來做酷事)。如果您沒有找到您要尋找的資訊,請考慮幫助我們這些可憐的、工作超載的文件撰寫者,並提交一篇關於它的 Cookbook 文章!(一旦您弄清楚如何操作!)
連結生物資料庫
在生物資訊學中,您需要做的非常常見的事情之一是從生物資料庫中提取資訊。手動存取這些資料庫可能相當繁瑣,尤其是在您有大量重複工作要完成時。Biopython 嘗試透過從 Python 指令碼中提供一些線上資料庫,來節省您的時間和精力。目前,Biopython 有程式碼可從以下資料庫中提取資訊
來自 NCBI 的 Entrez (和 PubMed) – 請參閱章節 存取 NCBI 的 Entrez 資料庫。
ExPASy – 請參閱章節 Swiss-Prot 和 ExPASy。
SCOP – 請參閱
Bio.SCOP.search()
函式。
這些模組中的程式碼基本上可以輕鬆編寫 Python 程式碼,以與這些頁面上的 CGI 指令碼互動,以便您可以輕鬆處理的格式取得結果。在某些情況下,結果可以與 Biopython 解析器緊密整合,以便更輕鬆地提取資訊。
接下來要做什麼
既然您已經走到這一步,希望您對 Biopython 的基礎知識有很好的理解,並且準備好開始使用它來執行有用的工作。現在最好的做法是完成閱讀本教學,然後如果您願意,可以開始查看原始碼,並查看自動產生的文件。
一旦您了解您想做什麼,以及 Biopython 中的哪些程式庫會執行它,您應該查看 Cookbook(章節 Cookbook – 用它來做酷事),其中可能包含執行類似於您想要執行操作的範例程式碼。
如果您知道您想做什麼,但無法弄清楚如何做,請隨時在 Biopython 主要論壇上發布問題(請參閱 https://biopython.dev.org.tw/wiki/Mailing_lists)。這不僅可以幫助我們回答您的問題,還可以讓我們改進文件,以便它可以幫助下一個人執行您想要執行的操作。
享受程式碼吧!