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
>>>