Biopython - การจัดตำแหน่งตามลำดับ
Sequence alignment เป็นกระบวนการจัดเรียงลำดับสองลำดับขึ้นไป (ของ DNA, RNA หรือลำดับโปรตีน) ตามลำดับเฉพาะเพื่อระบุขอบเขตของความคล้ายคลึงกันระหว่างพวกเขา
การระบุภูมิภาคที่คล้ายกันช่วยให้เราสามารถสรุปข้อมูลได้มากมายเช่นลักษณะที่อนุรักษ์ไว้ระหว่างสปีชีส์ความใกล้ชิดทางพันธุกรรมของสปีชีส์การวิวัฒนาการของสปีชีส์ ฯลฯ Biopython ให้การสนับสนุนอย่างกว้างขวางสำหรับการจัดเรียงลำดับ
ให้เราเรียนรู้คุณสมบัติที่สำคัญบางประการที่มีให้โดย Biopython ในบทนี้ -
การจัดเรียงลำดับการแยกวิเคราะห์
Biopython มีโมดูล BioAlignIO เพื่ออ่านและเขียนการจัดเรียงลำดับ ในชีวสารสนเทศศาสตร์มีรูปแบบมากมายที่สามารถระบุข้อมูลการจัดเรียงลำดับที่คล้ายกับข้อมูลลำดับที่เรียนรู้ก่อนหน้านี้ BioAlignIO ให้ API คล้ายกับ Bio.SeqIO ยกเว้นว่า Bio.SeqIO ทำงานกับข้อมูลลำดับและ BioAlignIO ทำงานกับข้อมูลการจัดตำแหน่งลำดับ
ก่อนที่จะเริ่มเรียนรู้ให้เราดาวน์โหลดไฟล์การจัดเรียงลำดับตัวอย่างจากอินเทอร์เน็ต
ในการดาวน์โหลดไฟล์ตัวอย่างให้ทำตามขั้นตอนด้านล่าง -
Step 1 - เปิดเบราว์เซอร์ที่คุณชื่นชอบแล้วไปที่ http://pfam.xfam.org/family/browseเว็บไซต์. มันจะแสดงตระกูล Pfam ทั้งหมดตามลำดับตัวอักษร
Step 2- เลือกครอบครัวใดครอบครัวหนึ่งที่มีจำนวนเมล็ดน้อยกว่า มีข้อมูลน้อยที่สุดและช่วยให้เราสามารถทำงานกับการจัดตำแหน่งได้อย่างง่ายดาย ที่นี่เราได้เลือก / คลิก PF18225 และเปิดขึ้นไปที่http://pfam.xfam.org/family/PF18225 และแสดงรายละเอียดทั้งหมดเกี่ยวกับเรื่องนี้รวมถึงการจัดตำแหน่งตามลำดับ
Step 3 - ไปที่ส่วนการจัดตำแหน่งและดาวน์โหลดไฟล์การจัดเรียงลำดับในรูปแบบสตอกโฮล์ม (PF18225_seed.txt)
ให้เราลองอ่านไฟล์การจัดเรียงลำดับที่ดาวน์โหลดโดยใช้ BioAlignIO ตามด้านล่าง -
นำเข้าโมดูล BioAlignIO
>>> from Bio import AlignIO
อ่านการจัดตำแหน่งโดยใช้วิธีการอ่าน วิธีการอ่านใช้เพื่ออ่านข้อมูลการจัดตำแหน่งเดียวที่มีอยู่ในไฟล์ที่กำหนด หากไฟล์ที่ระบุมีการจัดตำแหน่งจำนวนมากเราสามารถใช้วิธีการแยกวิเคราะห์ วิธีการแยกวิเคราะห์จะส่งคืนวัตถุการจัดตำแหน่งที่ทำซ้ำได้ซึ่งคล้ายกับวิธีการแยกวิเคราะห์ในโมดูล Bio.SeqIO
>>> alignment = AlignIO.read(open("PF18225_seed.txt"), "stockholm")
พิมพ์วัตถุจัดแนว
>>> print(alignment)
SingleLetterAlphabet() alignment with 6 rows and 65 columns
MQNTPAERLPAIIEKAKSKHDINVWLLDRQGRDLLEQRVPAKVA...EGP B7RZ31_9GAMM/59-123
AKQRGIAGLEEWLHRLDHSEAIPIFLIDEAGKDLLEREVPADIT...KKP A0A0C3NPG9_9PROT/58-119
ARRHGQEYFQQWLERQPKKVKEQVFAVDQFGRELLGRPLPEDMA...KKP A0A143HL37_9GAMM/57-121
TRRHGPESFRFWLERQPVEARDRIYAIDRSGAEILDRPIPRGMA...NKP A0A0X3UC67_9GAMM/57-121
AINRNTQQLTQDLRAMPNWSLRFVYIVDRNNQDLLKRPLPPGIM...NRK B3PFT7_CELJU/62-126
AVNATEREFTERIRTLPHWARRNVFVLDSQGFEIFDRELPSPVA...NRT K4KEM7_SIMAS/61-125
>>>
นอกจากนี้เรายังสามารถตรวจสอบลำดับ (SeqRecord) ที่มีอยู่ในการจัดตำแหน่งได้เช่นกัน -
>>> for align in alignment:
... print(align.seq)
...
MQNTPAERLPAIIEKAKSKHDINVWLLDRQGRDLLEQRVPAKVATVANQLRGRKRRAFARHREGP
AKQRGIAGLEEWLHRLDHSEAIPIFLIDEAGKDLLEREVPADITA---RLDRRREHGEHGVRKKP
ARRHGQEYFQQWLERQPKKVKEQVFAVDQFGRELLGRPLPEDMAPMLIALNYRNRESHAQVDKKP
TRRHGPESFRFWLERQPVEARDRIYAIDRSGAEILDRPIPRGMAPLFKVLSFRNREDQGLVNNKP
AINRNTQQLTQDLRAMPNWSLRFVYIVDRNNQDLLKRPLPPGIMVLAPRLTAKHPYDKVQDRNRK
AVNATEREFTERIRTLPHWARRNVFVLDSQGFEIFDRELPSPVADLMRKLDLDRPFKKLERKNRT
>>>
การจัดตำแหน่งหลายรายการ
โดยทั่วไปไฟล์การจัดเรียงลำดับส่วนใหญ่มีข้อมูลการจัดตำแหน่งเดียวและเพียงพอที่จะใช้ readวิธีการแยกวิเคราะห์ ในแนวคิดการจัดเรียงลำดับหลายลำดับจะมีการเปรียบเทียบลำดับสองลำดับขึ้นไปเพื่อการจับคู่ลำดับต่อมาที่ดีที่สุดระหว่างพวกเขาและผลลัพธ์ในการจัดตำแหน่งหลายลำดับในไฟล์เดียว
หากรูปแบบการจัดเรียงลำดับการป้อนข้อมูลมีการจัดเรียงลำดับมากกว่าหนึ่งเราจำเป็นต้องใช้ parse วิธีการแทน read วิธีการตามที่ระบุด้านล่าง -
>>> from Bio import AlignIO
>>> alignments = AlignIO.parse(open("PF18225_seed.txt"), "stockholm")
>>> print(alignments)
<generator object parse at 0x000001CD1C7E0360>
>>> for alignment in alignments:
... print(alignment)
...
SingleLetterAlphabet() alignment with 6 rows and 65 columns
MQNTPAERLPAIIEKAKSKHDINVWLLDRQGRDLLEQRVPAKVA...EGP B7RZ31_9GAMM/59-123
AKQRGIAGLEEWLHRLDHSEAIPIFLIDEAGKDLLEREVPADIT...KKP A0A0C3NPG9_9PROT/58-119
ARRHGQEYFQQWLERQPKKVKEQVFAVDQFGRELLGRPLPEDMA...KKP A0A143HL37_9GAMM/57-121
TRRHGPESFRFWLERQPVEARDRIYAIDRSGAEILDRPIPRGMA...NKP A0A0X3UC67_9GAMM/57-121
AINRNTQQLTQDLRAMPNWSLRFVYIVDRNNQDLLKRPLPPGIM...NRK B3PFT7_CELJU/62-126
AVNATEREFTERIRTLPHWARRNVFVLDSQGFEIFDRELPSPVA...NRT K4KEM7_SIMAS/61-125
>>>
ที่นี่วิธีการแยกวิเคราะห์จะส่งคืนวัตถุการจัดตำแหน่งที่ทำซ้ำได้และสามารถทำซ้ำเพื่อให้ได้การจัดแนวจริง
การจัดตำแหน่งตามลำดับคู่
Pairwise sequence alignment เปรียบเทียบเพียงสองลำดับต่อครั้งและให้การจัดตำแหน่งลำดับที่ดีที่สุดเท่าที่จะเป็นไปได้ Pairwise เข้าใจง่ายและพิเศษในการอนุมานจากการจัดเรียงลำดับผลลัพธ์
Biopython มีโมดูลพิเศษ Bio.pairwise2เพื่อระบุลำดับการจัดตำแหน่งโดยใช้วิธี pairwise Biopython ใช้อัลกอริทึมที่ดีที่สุดในการค้นหาลำดับการจัดตำแหน่งและเทียบเท่ากับซอฟต์แวร์อื่น ๆ
ให้เราเขียนตัวอย่างเพื่อค้นหาการจัดเรียงลำดับของสองลำดับแบบง่ายและแบบสมมุติโดยใช้โมดูลคู่ สิ่งนี้จะช่วยให้เราเข้าใจแนวคิดของการจัดเรียงลำดับและวิธีการตั้งโปรแกรมโดยใช้ Biopython
ขั้นตอนที่ 1
นำเข้าโมดูล pairwise2 ด้วยคำสั่งที่ระบุด้านล่าง -
>>> from Bio import pairwise2
ขั้นตอนที่ 2
สร้างสองลำดับ seq1 และ seq2 -
>>> from Bio.Seq import Seq
>>> seq1 = Seq("ACCGGT")
>>> seq2 = Seq("ACGT")
ขั้นตอนที่ 3
เรียกเมธอด pairwise2.align.globalxx พร้อมกับ seq1 และ seq2 เพื่อค้นหาการจัดตำแหน่งโดยใช้บรรทัดด้านล่างของโค้ด -
>>> alignments = pairwise2.align.globalxx(seq1, seq2)
ที่นี่ globalxxวิธีการทำงานจริงและค้นหาการจัดตำแหน่งที่ดีที่สุดที่เป็นไปได้ทั้งหมดในลำดับที่กำหนด อันที่จริง Bio.pairwise2 มีวิธีการหลายชุดซึ่งเป็นไปตามหลักการด้านล่างเพื่อค้นหาการจัดแนวในสถานการณ์ต่างๆ
<sequence alignment type>XY
ในที่นี้ประเภทการจัดตำแหน่งตามลำดับหมายถึงประเภทการจัดตำแหน่งซึ่งอาจเป็นแบบโกลบอลหรือโลคัล global type คือการค้นหาการจัดเรียงลำดับโดยคำนึงถึงลำดับทั้งหมด ประเภทโลคัลคือการค้นหาการจัดเรียงลำดับโดยดูส่วนย่อยของลำดับที่กำหนดเช่นกัน สิ่งนี้จะน่าเบื่อ แต่ให้ความคิดที่ดีกว่าเกี่ยวกับความคล้ายคลึงกันระหว่างลำดับที่กำหนด
X หมายถึงคะแนนที่ตรงกัน ค่าที่เป็นไปได้คือ x (การจับคู่แบบตรงทั้งหมด), m (คะแนนตามตัวอักษรที่เหมือนกัน), d (พจนานุกรมที่ผู้ใช้ให้มาพร้อมอักขระและคะแนนการจับคู่) และสุดท้าย c (ฟังก์ชันที่ผู้ใช้กำหนดเพื่อให้อัลกอริทึมการให้คะแนนแบบกำหนดเอง)
Y หมายถึงการลงโทษช่องว่าง ค่าที่เป็นไปได้คือ x (ไม่มีการลงโทษช่องว่าง), s (บทลงโทษเดียวกันสำหรับทั้งสองลำดับ), d (บทลงโทษที่แตกต่างกันสำหรับแต่ละลำดับ) และสุดท้าย c (ฟังก์ชันที่ผู้ใช้กำหนดเพื่อให้การลงโทษช่องว่างที่กำหนดเอง)
ดังนั้น localds ยังเป็นวิธีการที่ถูกต้องซึ่งจะค้นหาการจัดเรียงลำดับโดยใช้เทคนิคการจัดตำแหน่งเฉพาะที่ผู้ใช้จัดเตรียมพจนานุกรมสำหรับการจับคู่และผู้ใช้ให้การลงโทษช่องว่างสำหรับทั้งสองลำดับ
>>> test_alignments = pairwise2.align.localds(seq1, seq2, blosum62, -10, -1)
ในที่นี้ blosum62 หมายถึงพจนานุกรมที่มีอยู่ในโมดูล pairwise2 เพื่อให้คะแนนการแข่งขัน -10 หมายถึงการลงโทษแบบเปิดช่องว่างและ -1 หมายถึงการลงโทษการขยายช่องว่าง
ขั้นตอนที่ 4
วนซ้ำวัตถุการจัดตำแหน่งที่ทำซ้ำได้และรับแต่ละวัตถุการจัดตำแหน่งแต่ละชิ้นและพิมพ์
>>> for alignment in alignments:
... print(alignment)
...
('ACCGGT', 'A-C-GT', 4.0, 0, 6)
('ACCGGT', 'AC--GT', 4.0, 0, 6)
('ACCGGT', 'A-CG-T', 4.0, 0, 6)
('ACCGGT', 'AC-G-T', 4.0, 0, 6)
ขั้นตอนที่ 5
โมดูล Bio.pairwise2 มีวิธีการจัดรูปแบบ format_alignment เพื่อให้เห็นผลลัพธ์ได้ดีขึ้น -
>>> from Bio.pairwise2 import format_alignment
>>> alignments = pairwise2.align.globalxx(seq1, seq2)
>>> for alignment in alignments:
... print(format_alignment(*alignment))
...
ACCGGT
| | ||
A-C-GT
Score=4
ACCGGT
|| ||
AC--GT
Score=4
ACCGGT
| || |
A-CG-T
Score=4
ACCGGT
|| | |
AC-G-T
Score=4
>>>
Biopython ยังมีโมดูลอื่นเพื่อทำการจัดตำแหน่งตามลำดับ Align โมดูลนี้มีชุดของ API ที่แตกต่างกันเพียงแค่การตั้งค่าพารามิเตอร์เช่นอัลกอริทึมโหมดคะแนนการแข่งขันการลงโทษช่องว่าง ฯลฯ การดูง่ายๆในวัตถุจัดแนวมีดังนี้ -
>>> from Bio import Align
>>> aligner = Align.PairwiseAligner()
>>> print(aligner)
Pairwise sequence aligner with parameters
match score: 1.000000
mismatch score: 0.000000
target open gap score: 0.000000
target extend gap score: 0.000000
target left open gap score: 0.000000
target left extend gap score: 0.000000
target right open gap score: 0.000000
target right extend gap score: 0.000000
query open gap score: 0.000000
query extend gap score: 0.000000
query left open gap score: 0.000000
query left extend gap score: 0.000000
query right open gap score: 0.000000
query right extend gap score: 0.000000
mode: global
>>>
การสนับสนุนสำหรับ Sequence Alignment Tools
Biopython มีอินเทอร์เฟซให้กับเครื่องมือจัดเรียงลำดับจำนวนมากผ่านโมดูล BioAlign.Applications เครื่องมือบางอย่างอยู่ด้านล่าง -
- ClustalW
- MUSCLE
- เข็มและน้ำ EMBOSS
ให้เราเขียนตัวอย่างง่ายๆใน Biopython เพื่อสร้างการจัดเรียงลำดับโดยใช้เครื่องมือจัดตำแหน่งที่ได้รับความนิยมมากที่สุด ClustalW
Step 1 - ดาวน์โหลดโปรแกรม Clustalw จาก http://www.clustal.org/download/current/และติดตั้ง นอกจากนี้อัปเดต PATH ของระบบด้วยพา ธ การติดตั้ง "คลัสเตอร์"
Step 2 - นำเข้า ClustalwCommanLine จากโมดูล BioAlign.Applications
>>> from Bio.Align.Applications import ClustalwCommandline
Step 3 - ตั้งค่า cmd โดยเรียก ClustalwCommanLine พร้อมไฟล์อินพุต opuntia.fasta ที่มีอยู่ในแพ็คเกจ Biopython https://raw.githubusercontent.com/biopython/biopython/master/Doc/examples/opuntia.fasta
>>> cmd = ClustalwCommandline("clustalw2",
infile="/path/to/biopython/sample/opuntia.fasta")
>>> print(cmd)
clustalw2 -infile=fasta/opuntia.fasta
Step 4 - การเรียก cmd () จะรันคำสั่ง clustalw และให้เอาต์พุตของไฟล์การจัดตำแหน่งผลลัพธ์ opuntia.aln
>>> stdout, stderr = cmd()
Step 5 - อ่านและพิมพ์ไฟล์จัดตำแหน่งด้านล่าง -
>>> from Bio import AlignIO
>>> align = AlignIO.read("/path/to/biopython/sample/opuntia.aln", "clustal")
>>> print(align)
SingleLetterAlphabet() alignment with 7 rows and 906 columns
TATACATTAAAGAAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA
gi|6273285|gb|AF191659.1|AF191
TATACATTAAAGAAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA
gi|6273284|gb|AF191658.1|AF191
TATACATTAAAGAAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA
gi|6273287|gb|AF191661.1|AF191
TATACATAAAAGAAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA
gi|6273286|gb|AF191660.1|AF191
TATACATTAAAGGAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA
gi|6273290|gb|AF191664.1|AF191
TATACATTAAAGGAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA
gi|6273289|gb|AF191663.1|AF191
TATACATTAAAGGAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA
gi|6273291|gb|AF191665.1|AF191
>>>