Biopython trong tin sinh học là gì?

Vì nhiều công việc sinh học trên máy tính liên quan đến việc kết nối với cơ sở dữ liệu trên internet, nên một số ví dụ cũng sẽ yêu cầu kết nối internet hoạt động để chạy

Bây giờ mọi thứ đã không còn nữa, hãy bắt tay vào những gì chúng ta có thể làm với Biopython

2. 1   Tổng quan chung về những gì Biopython cung cấp

Như đã đề cập trong phần giới thiệu, Biopython là một bộ thư viện cung cấp khả năng xử lý ''những thứ'' mà các nhà sinh vật học làm việc trên máy tính quan tâm. Nói chung, điều này có nghĩa là bạn sẽ cần phải có ít nhất một số kinh nghiệm lập trình (tất nhiên là trong python. ) hoặc ít nhất là quan tâm đến việc học lập trình. Công việc của Biopython là làm cho công việc lập trình viên của bạn trở nên dễ dàng hơn bằng cách cung cấp các thư viện có thể tái sử dụng để bạn có thể tập trung vào việc trả lời câu hỏi cụ thể mà mình quan tâm, thay vì tập trung vào nội dung phân tích cú pháp một định dạng tệp cụ thể (tất nhiên, nếu bạn muốn trợ giúp bằng cách . ). Vì vậy, công việc của Biopython là làm cho bạn hạnh phúc

Một điều cần lưu ý về Biopython là nó thường cung cấp nhiều cách để ``làm cùng một việc. '' Đối với tôi, điều này có thể gây khó chịu vì tôi thường chỉ biết một cách đúng đắn để làm một việc gì đó. Tuy nhiên, đây cũng là một lợi ích thực sự vì nó mang lại cho bạn rất nhiều sự linh hoạt và quyền kiểm soát đối với các thư viện. Phần hướng dẫn giúp chỉ cho bạn những cách phổ biến hoặc dễ thực hiện để bạn có thể thực hiện mọi việc. Để tìm hiểu thêm về các khả năng thay thế, hãy xem phần Sách dạy nấu ăn (phần này cho bạn biết một số thủ thuật và mẹo hay) và phần Nâng cao (cung cấp cho bạn nhiều thông tin chi tiết nhất mà bạn muốn biết. )

2. 2   Làm việc với trình tự

Tranh chấp (tất nhiên. ), đối tượng trung tâm trong tin sinh học là trình tự. Vì vậy, chúng ta sẽ bắt đầu với các cơ chế Biopython để xử lý các chuỗi. Khi tôi nghĩ về một trình tự, điều đầu tiên xuất hiện trong đầu tôi là một chuỗi các chữ cái.
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
3 có vẻ tự nhiên vì đây là cách phổ biến nhất mà các trình tự được nhìn thấy ở định dạng tệp sinh học. Tuy nhiên, bản thân một chuỗi chữ cái đơn giản cũng rất không có thông tin -- đó là chuỗi DNA hay protein (được thôi, một loại protein có nhiều Alanines, Glycines, Cysteines và Threonines. ), nó đến từ loại sinh vật nào, điều gì thú vị về nó, v.v. Thách thức trong việc thiết kế giao diện trình tự là chọn một biểu diễn đủ thông tin để tính đến thông tin phức tạp hơn, nhưng cũng nhẹ và dễ làm việc với chỉ một trình tự đơn giản

Cách tiếp cận được thực hiện trong lớp trình tự Biopython là sử dụng một lớp chứa thông tin phức tạp hơn, nhưng có thể được thao tác như thể nó là một chuỗi đơn giản. Điều này được thực hiện bằng cách sử dụng quá tải toán tử để thao tác với một đối tượng chuỗi giống như thao tác với một chuỗi python. Lớp trình tự, được gọi đơn giản là Seq, được định nghĩa trong tệp

>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
4 Hãy tìm hiểu sâu hơn về lớp Seq để xem nó cung cấp những gì

Đối tượng Seq biopython có hai thuộc tính quan trọng

  1. >>> protein_seq = Seq('EVRNAK', IUPAC.protein)
    >>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
    >>> protein_seq + dna_seq
    Traceback (most recent call last):
      File "", line 1, in ?
      File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
        raise TypeError, ("incompatable alphabets", str(self.alphabet),
    TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
    
    5 -- như tên ngụ ý, đây là chuỗi dữ liệu trình tự thực tế của trình tự
  2. >>> protein_seq = Seq('EVRNAK', IUPAC.protein)
    >>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
    >>> protein_seq + dna_seq
    Traceback (most recent call last):
      File "", line 1, in ?
      File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
        raise TypeError, ("incompatable alphabets", str(self.alphabet),
    TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
    
    6 -- một đối tượng mô tả ý nghĩa của các ký tự riêng lẻ tạo nên chuỗi ``mean'' và cách giải thích chúng
Rõ ràng đối tượng bảng chữ cái là điều quan trọng làm cho đối tượng Seq không chỉ là một chuỗi. Các bảng chữ cái hiện có cho Biopython được xác định trong mô-đun
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
7. Chúng tôi sẽ sử dụng bảng chữ cái IUPAC (http. //www. hóa học. qmw. AC. uk/iupac/) ở đây để xử lý một số đối tượng yêu thích của chúng tôi. DNA, RNA và Protein

________ 08 cung cấp các định nghĩa cơ bản cho protein, DNA và RNA, ngoài ra còn cung cấp khả năng mở rộng và cắt bỏ các định nghĩa cơ bản. Ví dụ, đối với protein, có một lớp IUPACProtein cơ bản, nhưng có một lớp ExtendedIUPACProtein bổ sung cung cấp cho các nguyên tố bổ sung ``Asx'' (asparagine hoặc axit aspartic), ``Sec'' (selenocysteine) và ``Glx . Đối với DNA, bạn có các lựa chọn IUPACUnambiguityDNA, chỉ cung cấp các chữ cái cơ bản, IUPACAmbiguousDNA (cung cấp các chữ cái mơ hồ cho mọi tình huống có thể xảy ra) và ExtenedIUPACDNA, cho phép các chữ cái cho các cơ sở đã sửa đổi. Tương tự, RNA có thể được đại diện bởi IUPACAmbigousRNA hoặc IUPACUnambigousRNA

Ưu điểm của việc có một lớp bảng chữ cái là gấp đôi. Đầu tiên, điều này đưa ra ý tưởng về loại thông tin mà đối tượng

>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
5 chứa. Thứ hai, điều này cung cấp một phương tiện hạn chế thông tin bạn có trong đối tượng dữ liệu, như một phương tiện kiểm tra kiểu

Bây giờ chúng ta biết những gì chúng ta đang giải quyết, hãy xem cách sử dụng lớp này để thực hiện công việc thú vị

Đầu tiên, tạo một đối tượng Sequence từ một chuỗi thông tin mà chúng ta có. Chúng tôi sẽ tạo một đối tượng DNA rõ ràng

>>> from Bio.Alphabet import IUPAC
>>> my_alpha = IUPAC.unambiguous_dna
>>> from Bio.Seq import Seq
>>> my_seq = Seq('GATCGATGGGCCTATATAGGATCGAAAATCGC', my_alpha)
>>> print my_seq
Seq('GATCGATGGGCCTATATAGGATCGAAAATCGC', IUPACUnambiguousDNA())
Mặc dù đây là một đối tượng chuỗi, nhưng chúng ta có thể xử lý nó theo một số cách như thể nó là một chuỗi python bình thường. Chẳng hạn, hãy lấy một phần của chuỗi.
>>> my_seq[4:12]
Seq('GATGGGCC', IUPACUnambiguousDNA())
Có hai điều thú vị cần lưu ý. Đầu tiên, điều này tuân theo các quy ước thông thường cho chuỗi python. Vì vậy, phần tử đầu tiên của chuỗi là 0 (điều này là bình thường đối với khoa học máy tính, nhưng không bình thường đối với sinh học). Khi bạn thực hiện một lát cắt, mục đầu tiên được bao gồm (tôi. e. 4 trong trường hợp này) và cái cuối cùng bị loại trừ (12 trong trường hợp này), đó là cách mọi thứ hoạt động trong python, nhưng tất nhiên không nhất thiết là cách mà mọi người trên thế giới mong đợi. Mục tiêu chính là phù hợp với những gì python làm. Điều thứ hai cần lưu ý là lát cắt được thực hiện trên chuỗi dữ liệu chuỗi, nhưng đối tượng mới được tạo vẫn giữ lại thông tin bảng chữ cái từ đối tượng Seq ban đầu

Bạn có thể coi đối tượng Seq giống như chuỗi theo nhiều cách

>>> len(my_seq)
32
>>> new_seq = my_seq[0:5]
>>> print new_seq
Seq('GATCG', IUPACUnambiguousDNA())
>>> my_seq + new_seq
Seq('GATCGATGGGCCTATATAGGATCGAAAATCGCGATCG', IUPACUnambiguousDNA())
>>> my_seq[5]
'A'
>>> my_seq == new_seq
0
Trong tất cả các hoạt động, thuộc tính bảng chữ cái được duy trì. Điều này rất hữu ích trong trường hợp bạn vô tình cố gắng làm điều gì đó kỳ lạ như thêm chuỗi protein và chuỗi DNA.
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
Và nếu bạn thực sự chỉ cần chuỗi để chèn vào thứ gì đó, thì điều này rất dễ trích xuất.
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
1Đối tượng chuỗi không thể thay đổi theo mặc định, vì trong nhiều ứng dụng sinh học, bạn muốn đảm bảo rằng bạn không thay đổi dữ liệu của mình.
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
2Tuy nhiên, bạn có thể chuyển đổi nó thành một chuỗi có thể thay đổi và làm bất cứ điều gì bạn muốn với nó.
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
3Bây giờ, bản chất của đối tượng trình tự đã có ý nghĩa nào đó, điều tiếp theo cần xem xét là chúng ta có thể làm gì với một trình tự. Thư mục
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
10 chứa hai mô-đun hữu ích để phiên âm và dịch đối tượng trình tự. Các công cụ này hoạt động dựa trên bảng chữ cái của dãy. Chẳng hạn, giả sử chúng ta muốn phiên âm đối tượng
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
11 của mình. Hãy nhớ rằng điều này chứa một bảng chữ cái rõ ràng, vì vậy để phiên âm, chúng tôi sẽ làm như sau.
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
6Bảng chữ cái của đối tượng RNA Seq mới được tạo miễn phí, do đó, một lần nữa, xử lý một đối tượng Seq không khó hơn xử lý một chuỗi đơn giản

Bạn cũng có thể phiên mã ngược các chuỗi RNA

>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
7Để dịch đối tượng DNA của chúng tôi, chúng tôi có khá nhiều lựa chọn. Đầu tiên, chúng ta có thể sử dụng bất kỳ số lượng bảng dịch nào tùy thuộc vào những gì chúng ta biết về trình tự DNA của mình. Các bảng dịch có sẵn trong biopython được lấy từ thông tin tại ftp. //ncbi. nlm. không. gov/entrez/misc/data/gc. prt. Vì vậy, bạn có rất nhiều sự lựa chọn để lựa chọn. Đối với điều này, chúng ta hãy chỉ tập trung vào hai lựa chọn. bảng dịch tiêu chuẩn và bảng dịch cho DNA ti thể của động vật có xương sống. Các bảng này được gắn nhãn với số id lần lượt là 1 và 2. Bây giờ chúng tôi biết những bảng chúng tôi đang tìm kiếm, tất cả chúng tôi đã sẵn sàng để thực hiện một bản dịch cơ bản. Trước tiên, chúng tôi cần có những người dịch sử dụng các bảng này. Vì chúng tôi vẫn đang xử lý đối tượng DNA rõ ràng của mình, nên chúng tôi muốn tìm nạp các trình dịch có tính đến điều này.
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
8Khi chúng tôi đã có những người dịch thích hợp, đã đến lúc tiếp tục và dịch một chuỗi.
>>> my_seq[4:12]
Seq('GATGGGCC', IUPACUnambiguousDNA())
0Lưu ý rằng bản dịch mặc định sẽ tiếp tục và tiến hành một cách mù quáng thông qua một codon dừng. Nếu bạn biết rằng bạn đang dịch một số loại khung đọc mở và chỉ muốn xem mọi thứ cho đến mã kết thúc, điều này có thể dễ dàng thực hiện với hàm
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
12.
>>> my_seq[4:12]
Seq('GATGGGCC', IUPACUnambiguousDNA())
1Tương tự như máy phiên mã, cũng có thể dịch ngược protein thành chuỗi DNA.
>>> my_seq[4:12]
Seq('GATGGGCC', IUPACUnambiguousDNA())
2Phần này bao gồm các tính năng và cách sử dụng cơ bản của lớp trình tự Biopython. Có một mô tả chi tiết hơn về các ý tưởng thiết kế đằng sau lớp trình tự trong phần Nâng cao của hướng dẫn này. Lớp này vẫn đang được phát triển và tất nhiên, rất hoan nghênh các nhận xét về thiết kế và sử dụng. Bây giờ bạn đã có một số ý tưởng về việc tương tác với các thư viện Biopython sẽ như thế nào, đã đến lúc đi sâu vào thế giới thú vị, vui nhộn khi xử lý các định dạng tệp sinh học

2. 3   Một ví dụ sử dụng

Trước khi chúng ta đi thẳng vào trình phân tích cú pháp và mọi thứ khác liên quan đến Biopython, hãy thiết lập một ví dụ để thúc đẩy mọi thứ chúng ta làm và làm cho cuộc sống thú vị hơn. Xét cho cùng, nếu không có bất kỳ kiến ​​thức sinh học nào trong hướng dẫn này, tại sao bạn lại muốn đọc nó?

Vì tôi yêu thực vật, tôi nghĩ chúng ta sẽ phải có một ví dụ dựa trên thực vật (xin lỗi tất cả những người hâm mộ các sinh vật khác ngoài kia. ). Vừa hoàn thành một chuyến đi gần đây đến nhà kính địa phương của chúng tôi, chúng tôi đột nhiên phát triển một nỗi ám ảnh lạ thường với Lady Slipper Orchids (nếu bạn thắc mắc tại sao hãy xem http. //www. thiên niên kiện. com/nhà kính/hình ảnh/papesq01. jpg. Nếu điều đó không thuyết phục bạn, bạn có thể xem tất cả các ảnh có sẵn tại http. //www. thiên niên kiện. com/nhà kính/indexphoto. htm). Tất nhiên, hoa lan không chỉ đẹp khi nhìn mà còn cực kỳ thú vị đối với những người nghiên cứu về sự tiến hóa và hệ thống. Vì vậy, chúng tôi đang nghĩ đến việc viết một đề xuất nhỏ để thực hiện một nghiên cứu phân tử về sự tiến hóa của Lady Slipper và muốn xem loại nghiên cứu nào đã được thực hiện và chúng tôi có thể thêm vào đó như thế nào

Sau khi tìm hiểu một chút, chúng tôi phát hiện ra rằng Lan Hài Nữ thuộc họ Orchidaceae và phân họ Cypripedioideae và được tạo thành từ 5 chi. Cypripedium, Paphiopedilum, Phragmipedium, Selenipedium và Mexipedium. Điều đó cung cấp cho chúng tôi đủ thông tin để bắt đầu tìm hiểu thêm thông tin. Vì vậy, hãy xem các công cụ biopython có thể giúp chúng ta như thế nào

2. 4   Phân tích cú pháp các định dạng tệp sinh học

Phần lớn công việc tin sinh học liên quan đến việc xử lý nhiều loại định dạng tệp được thiết kế để chứa dữ liệu sinh học. Các tệp này được tải với dữ liệu sinh học thú vị và một thách thức đặc biệt là phân tích cú pháp các tệp này thành một định dạng để bạn có thể thao tác chúng bằng một số loại ngôn ngữ lập trình. Tuy nhiên, nhiệm vụ phân tích cú pháp các tệp này có thể bị cản trở bởi thực tế là các định dạng có thể thay đổi khá thường xuyên và các định dạng đó có thể chứa các tập con nhỏ có thể phá vỡ cả những trình phân tích cú pháp được thiết kế tốt nhất

2. 4. 1   Thiết kế trình phân tích cú pháp chung

Giải pháp biopython cho vấn đề này là phát triển khung trình phân tích cú pháp có cấu trúc có thể áp dụng cho tất cả các trình phân tích cú pháp. Ưu điểm gấp đôi. Đầu tiên, điều này cho phép sử dụng lại mã giữa các trình phân tích cú pháp (xem
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
13). Thứ hai, điều này cung cấp một khuôn khổ tương tự cho tất cả các trình phân tích cú pháp để tương đối dễ dàng truy cập vào phần bên trong của trình phân tích cú pháp và tìm ra các vấn đề mà bạn có thể gặp phải

Tất cả các trình phân tích cú pháp đều có hai thành phần

  1. Trình quét - Phần của trình phân tích cú pháp thực sự thực hiện công việc hoặc duyệt qua tệp và trích xuất thông tin hữu ích. Thông tin hữu ích này được chuyển đổi thành Sự kiện
  2. Người tiêu dùng - Người tiêu dùng thực hiện công việc xử lý thông tin hữu ích và đưa ra định dạng mà lập trình viên có thể sử dụng. Người tiêu dùng làm điều này bằng cách nhận các sự kiện được tạo bởi máy quét
Vì vậy, thiết kế trình phân tích cú pháp là hướng sự kiện. Ý tưởng chung là một máy quét sẽ đi qua và tạo ra các sự kiện cho mọi mục có thể được quan tâm trong một tệp. Ví dụ: giả sử chúng tôi có mục nhập được định dạng FASTA sau (được chỉnh sửa để phù hợp với trang).
>>> my_seq[4:12]
Seq('GATGGGCC', IUPACUnambiguousDNA())
3Khi máy quét di chuyển qua tệp chứa mục nhập này, nó sẽ tạo ra các sự kiện sau

Tên sự kiệnEntry inputbegin_sequence(ngay khi chúng tôi nhận thấy chúng tôi có một tiêu đề
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
14) mới
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
15sequence
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
16sequence
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
17sequence
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
18 (và cứ thế -- bạn đã hiểu. )end_sequence(ngay khi chúng tôi đến một dòng trống sau dữ liệu chuỗi)

Vì vậy, các sự kiện đang được sản xuất. Vấn đề lớn, trừ khi chúng ta có thể ghi lại những sự kiện này và làm điều gì đó thú vị với chúng. Đây là nơi người tiêu dùng đến. Người tiêu dùng cần làm hai việc

  1. Tự đăng ký với máy quét để cho nó biết rằng nó muốn nhận những sự kiện đang được tạo
  2. Làm điều gì đó với các sự kiện (và thông tin liên quan đến chúng)
Một ví dụ sẽ làm rõ hơn cách thức hoạt động của nó

2. 4. 2   Viết người tiêu dùng của riêng bạn

Bây giờ là lúc để hiểu khung trình phân tích cú pháp của chúng tôi và cũng bắt đầu xem xét những người bạn của chúng tôi, hoa lan dép nữ. Để bắt đầu tìm kiếm, chúng ta hãy xem qua cơ sở dữ liệu nucleotide tại NCBI, sử dụng tìm kiếm Entrez (lhttp. //www. ncbi. nlm. không. chính phủ. 80/entrez/truy vấn. fcgi?db=Nucleotide) cho tất cả mọi thứ đề cập đến văn bản Cypripedioideae (đây là phân họ của lan hài nữ). Tìm kiếm này cung cấp cho chúng tôi 94 lần truy cập, chúng tôi lưu vào tệp văn bản có định dạng FASTA

Bây giờ, hãy thử sử dụng trình phân tích cú pháp để tóm tắt loại thông tin chúng tôi nhận được. Lấy một ví dụ đơn giản, tại sao chúng ta không lướt qua và lấy tất cả các tên sinh vật được đề cập, để xem có bao nhiêu loài lan hài nữ khác nhau được đại diện trong dữ liệu này

Để làm được công việc hữu ích này, chúng ta cần phải nhúng tay vào viết ra giải pháp cho tất cả các vấn đề của mình -- một người tiêu dùng. Đây là những gì người tiêu dùng của chúng tôi triển khai để trích xuất các sinh vật sẽ như thế nào

>>> my_seq[4:12]
Seq('GATGGGCC', IUPACUnambiguousDNA())
4Điều đầu tiên chúng tôi làm là nhập lớp cơ sở mà Người tiêu dùng nên lấy từ đó,
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
19. Lớp cơ sở này làm những điều tốt đẹp cho chúng tôi như chăm sóc tất cả các phần mà chúng tôi không quan tâm. Sau đó, chúng tôi tạo lớp người tiêu dùng cá nhân của mình bằng cách xuất phát từ lớp AbstractConsumer cơ sở này

Giống như bất kỳ lớp python nào khác, chúng tôi định nghĩa một hàm

>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
20 sẽ được gọi khi một thể hiện mới của lớp được tạo. Trong quá trình khởi tạo, chúng tôi đặt thuộc tính lớp
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
21. Thao tác này sẽ lưu trữ thông tin về loài khi tệp được phân tích cú pháp và sẽ cho phép chúng tôi trích xuất thông tin này sau này

Bây giờ chúng ta đến với hàm thực sự tiện lợi, hàm

>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
22. Chức năng này sẽ được Máy quét gọi mỗi khi sự kiện 'tiêu đề' được tạo. Vì vậy, khi Máy quét đến dòng đầu tiên trong tệp FASTA mẫu của chúng tôi

>>> my_seq[4:12]
Seq('GATGGGCC', IUPACUnambiguousDNA())
5Nó sẽ nhận dạng đây là tiêu đề và gọi hàm
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
22 với đối số
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
24 được đặt làm giá trị của tiêu đề

Bây giờ chúng tôi đã nắm bắt được tiêu đề, chúng tôi muốn trích xuất thông tin từ nó mà chúng tôi quan tâm. Nhìn vào thông tin tiêu đề FASTA, chúng tôi nhận thấy rằng mục thứ hai trong chuỗi thông tin là tên sinh vật. Để giải quyết vấn đề này, chúng ta chỉ cần sử dụng hàm dựng sẵn của python

>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
25 để phân tách chuỗi ở mọi khoảng trắng, tạo danh sách
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
26. Vì yếu tố thứ hai của danh sách này là tên loài, nên chúng tôi sẽ lấy phần này ra khỏi danh sách. Sau đó, chúng tôi chỉ cần kiểm tra xem loài đó đã có trong danh sách sinh vật hiện tại của chúng tôi chưa và nếu chưa, chúng tôi sẽ thêm nó vào.

Được rồi, điều đó thật dễ dàng -- vì vậy bây giờ chúng ta cần gọi Máy quét và thực sự thực hiện công việc này. Để làm điều này, chúng tôi viết một chức năng nhỏ

________ 86 Hãy tìm hiểu từng bước về chức năng này. Đầu tiên, chúng tôi nhập trình phân tích cú pháp Fasta từ thư viện Biopython, sau đó chúng tôi tiến hành xác định chức năng của mình. Phải mất hai đối số, tệp được định dạng FASTA để phân tích cú pháp và số lượng bản ghi trong tệp. Sau đó, nó tạo Máy quét để quét qua các tệp FASTA và trình tiêu dùng SpeciesExtractor sẽ lấy tất cả các sinh vật, như chúng tôi đã mô tả ở trên

Sau đó, chúng tôi mở tệp của mình để phân tích cú pháp và sẵn sàng hoạt động. Tất cả các trình phân tích cú pháp Biopython đều xử lý tệp làm đầu vào. Điều này có nghĩa là bạn có thể truyền cho chúng bất kỳ loại đối tượng ``giống tệp'' nào. Chẳng hạn, thư viện

>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
27 cho phép bạn làm việc với một tài liệu trên một URL từ xa như thể đó là một tệp cục bộ, vì vậy bạn có thể sử dụng thư viện này để chuyển trình phân tích cú pháp một tài liệu ở đâu đó trên mạng

Bây giờ chúng tôi đã có tệp đang mở, đã đến lúc phân tích cú pháp tệp. Cách trình phân tích cú pháp hoạt động là bạn gọi

>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
28 cho mọi mục trong tệp mà bạn muốn phân tích cú pháp, chuyển đối tượng giống như tệp để phân tích cú pháp và người tiêu dùng gọi lại. Vì vậy, chúng tôi lặp qua tất cả các bản ghi trong tệp và quét chúng, dựa vào người tiêu dùng để xử lý các tệp khi thích hợp. Cuối cùng, khi đã hoàn tất, chúng tôi nhận được thuộc tính
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
21 của lớp người tiêu dùng, chứa tất cả thông tin được trích xuất và trả về

Chà, với tất cả những thứ đó đã được giải quyết, việc phân tích cú pháp tệp sẽ thực sự dễ dàng

>>> my_seq[4:12]
Seq('GATGGGCC', IUPACUnambiguousDNA())
7Chạy tất cả chương trình này như một chương trình lớn (chương trình có sẵn dưới dạng
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
30 trong thư mục
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
31) cung cấp cho chúng tôi thông tin mà chúng tôi mong muốn.
>>> my_seq[4:12]
Seq('GATGGGCC', IUPACUnambiguousDNA())
8

2. 4. 3   Làm cho nó dễ dàng hơn

Phần cuối cùng đã giải thích tất cả những điều cơ bản khi viết một người tiêu dùng chuyên biệt. Tính linh hoạt của việc có thể viết người tiêu dùng của riêng bạn là rất tốt, tuy nhiên đối với nhiều ứng dụng, nó có thể quá mức cần thiết. Đối với một ứng dụng đơn giản, những người tốt bụng của Biopython đã cung cấp một số lớp hữu ích hoạt động giống như trình phân tích cú pháp đầy đủ hơn. Vì vậy, đối với các ứng dụng nhanh và bẩn, đây là những gì bạn muốn xem xét

Một vấn đề lớn với trình phân tích cú pháp mà chúng tôi đã sử dụng ở trên là chúng tôi được yêu cầu biết số phần tử trong tệp. Điều này có thể khá không thực tế đối với nhiều ứng dụng khi bạn chỉ muốn phân tích cú pháp qua một tệp và tìm kiếm thứ gì đó. Để giải quyết vấn đề này, chúng ta có thể sử dụng giao diện

>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
32 cho các tệp FASTA. Giao diện này cho phép bạn không phải lo lắng về người tiêu dùng và máy quét và tất cả nhạc jazz đó, và chỉ cần di chuyển qua một tệp một bản ghi tại một thời điểm. Tuy nhiên, làm điều này yêu cầu Iterator trả về một số loại đối tượng mà bạn có thể thao tác để trích xuất thông tin bạn muốn

Để giải quyết vấn đề này, một lớp rất hữu ích đã được viết vào nhiều bộ phân tích cú pháp Biopython -- một

>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
33, lớp này phân tích một tệp thành một lớp python đại diện cho nó. Chẳng hạn, đối với các tệp FASTA, lớp Bản ghi chỉ là một đối tượng có thuộc tính
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
22 và
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
35

Hãy làm cho tất cả những điều này cụ thể hơn bằng cách sử dụng các giao diện Iterator và Record để làm những gì chúng ta đã làm trước đây -- trích xuất một danh sách duy nhất của tất cả các loài trong tệp FASTA của chúng ta. Trước tiên, chúng ta cần thiết lập trình phân tích cú pháp và trình vòng lặp

>>> my_seq[4:12]
Seq('GATGGGCC', IUPACUnambiguousDNA())
9Đầu tiên, chúng tôi tạo trình phân tích cú pháp -- RecordParser phân tích mục nhập FASTA vào lớp Bản ghi đại diện cho nó. Sau đó, chúng tôi mở tệp và tạo một trình vòng lặp và chúng tôi đã sẵn sàng để bắt đầu phân tích cú pháp

Giống như hầu hết các giao diện iterator, chúng tôi truy xuất các đối tượng bằng cách gọi

>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
36. Khi không còn chuỗi nào để phân tích cú pháp,
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
36 sẽ trả về
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
38, vì vậy chúng tôi biết rằng đã đến lúc dừng. Để có được kỷ lục đầu tiên của chúng tôi

>>> len(my_seq)
32
>>> new_seq = my_seq[0:5]
>>> print new_seq
Seq('GATCG', IUPACUnambiguousDNA())
>>> my_seq + new_seq
Seq('GATCGATGGGCCTATATAGGATCGAAAATCGCGATCG', IUPACUnambiguousDNA())
>>> my_seq[5]
'A'
>>> my_seq == new_seq
0
0Hãy xem đối tượng bản ghi. Nó có các thuộc tính trình tự và tiêu đề mà chúng ta có thể dễ dàng nhận được tại.
>>> len(my_seq)
32
>>> new_seq = my_seq[0:5]
>>> print new_seq
Seq('GATCG', IUPACUnambiguousDNA())
>>> my_seq + new_seq
Seq('GATCGATGGGCCTATATAGGATCGAAAATCGCGATCG', IUPACUnambiguousDNA())
>>> my_seq[5]
'A'
>>> my_seq == new_seq
0
1Theo tôi, điều thú vị nhất là việc lấy lại kỷ lục FASTA dễ dàng như thế nào.
>>> len(my_seq)
32
>>> new_seq = my_seq[0:5]
>>> print new_seq
Seq('GATCG', IUPACUnambiguousDNA())
>>> my_seq + new_seq
Seq('GATCGATGGGCCTATATAGGATCGAAAATCGCGATCG', IUPACUnambiguousDNA())
>>> my_seq[5]
'A'
>>> my_seq == new_seq
0
2Chúng ta có thể sử dụng tất cả những thứ này để viết lại hàm
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
39 của mình.
>>> len(my_seq)
32
>>> new_seq = my_seq[0:5]
>>> print new_seq
Seq('GATCG', IUPACUnambiguousDNA())
>>> my_seq + new_seq
Seq('GATCGATGGGCCTATATAGGATCGAAAATCGCGATCG', IUPACUnambiguousDNA())
>>> my_seq[5]
'A'
>>> my_seq == new_seq
0
3Chạy cái này sẽ cho chúng ta kết quả giống như những gì chúng ta đã thấy trước đó. Việc bạn chọn sử dụng giao diện này hay giao diện trước tùy thuộc vào nhu cầu của bạn và điều bạn cảm thấy thoải mái nhất. Này, Perl không phải là nơi duy nhất có nhiều cách để làm mọi việc

2. 4. 4   Các tệp FASTA dưới dạng Từ điển

Điều cuối cùng mà chúng tôi sẽ làm với tệp fasta phong lan phổ biến của chúng tôi là chỉ ra cách lập chỉ mục và truy cập nó như một cơ sở dữ liệu. Điều này rất hữu ích cho các tệp lớn mà bạn chỉ cần truy cập vào một số phần tử nhất định của tệp và tạo cơ sở dữ liệu bẩn nhanh chóng đẹp mắt

Hãy lập chỉ mục hồ sơ của chúng tôi thông qua số gia nhập GenBank của họ, đây có vẻ là một cách hữu ích để theo dõi họ. Để làm điều này, trước tiên chúng ta cần viết một hàm nhỏ trả về các số gia nhập từ một bản ghi FASTA (đây là lớp Bản ghi mà chúng ta đã thảo luận trước đó)

>>> len(my_seq)
32
>>> new_seq = my_seq[0:5]
>>> print new_seq
Seq('GATCG', IUPACUnambiguousDNA())
>>> my_seq + new_seq
Seq('GATCGATGGGCCTATATAGGATCGAAAATCGCGATCG', IUPACUnambiguousDNA())
>>> my_seq[5]
'A'
>>> my_seq == new_seq
0
4Bây giờ chúng ta cần tạo một chỉ mục từ tệp này, điều này sẽ cho chúng ta thấy tại sao việc viết chức năng này lại quan trọng. Định dạng chung để lập chỉ mục một tệp là.
>>> len(my_seq)
32
>>> new_seq = my_seq[0:5]
>>> print new_seq
Seq('GATCG', IUPACUnambiguousDNA())
>>> my_seq + new_seq
Seq('GATCGATGGGCCTATATAGGATCGAAAATCGCGATCG', IUPACUnambiguousDNA())
>>> my_seq[5]
'A'
>>> my_seq == new_seq
0
5Lập luận khó khăn là
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
60. Về cơ bản, đây là một tham chiếu đến một hàm có thể được gọi và trả về một phần tử để sử dụng làm khóa. Ý tưởng ở đây là
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
61 nên dành cho mục đích chung và không có cách nào tốt để các nhà phát triển Biopython đọc được suy nghĩ của bạn và biết cách bạn muốn lập chỉ mục các tệp của mình. Vì vậy, bây giờ hàm
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
62 ở trên rất có ý nghĩa

Sử dụng tất cả những thứ này, bây giờ chúng ta có thể tạo một tệp chỉ mục và xem nó hoạt động như thế nào. Đầu tiên, hãy tạo tệp chỉ mục

>>> len(my_seq)
32
>>> new_seq = my_seq[0:5]
>>> print new_seq
Seq('GATCG', IUPACUnambiguousDNA())
>>> my_seq + new_seq
Seq('GATCGATGGGCCTATATAGGATCGAAAATCGCGATCG', IUPACUnambiguousDNA())
>>> my_seq[5]
'A'
>>> my_seq == new_seq
0
6Điều này tạo ra một tệp chỉ mục
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
63 dựa trên đầu vào từ
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
64 và được lập chỉ mục bởi các giá trị được trả về bởi hàm
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
65 của chúng tôi

Bây giờ chúng ta đã có chỉ mục, chúng ta có thể tạo từ điển trong bộ nhớ để truy cập nội dung tệp bằng cách sử dụng chỉ mục

>>> len(my_seq)
32
>>> new_seq = my_seq[0:5]
>>> print new_seq
Seq('GATCG', IUPACUnambiguousDNA())
>>> my_seq + new_seq
Seq('GATCGATGGGCCTATATAGGATCGAAAATCGCGATCG', IUPACUnambiguousDNA())
>>> my_seq[5]
'A'
>>> my_seq == new_seq
0
7Từ điển được tạo từ tệp
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
63 của chúng tôi và trả về các đối tượng Sequence. Loại đối tượng được tệp chỉ mục trả về dựa trên đối số thứ hai được truyền. Đối số này phải là trình phân tích cú pháp mà tệp chỉ mục sẽ chuyển thông tin qua trước khi trả về. Nếu không có trình phân tích cú pháp nào được thông qua, thì từ điển sẽ chỉ trả về đối tượng thô (tôi. e. chính xác như nó xuất hiện trong tệp)

Trình phân tích cú pháp mà chúng tôi vượt qua ở đây là một

>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
67 chuyển đổi các tệp FASTA thành các đối tượng
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
68.
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
67 lấy một đối số của bảng chữ cái mà chúng ta nên sử dụng cho các chuỗi. Vì trình phân tích cú pháp không thể đủ thông minh để biết chính xác nó sẽ phân tích cái gì, nên chúng ta cần nói cho nó biết. Nếu không có bảng chữ cái nào được cung cấp, thì trình phân tích cú pháp sẽ mặc định là
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
70

Vì đây là từ điển nên chúng tôi có thể xem tất cả các khóa chúng tôi có sẵn

>>> len(my_seq)
32
>>> new_seq = my_seq[0:5]
>>> print new_seq
Seq('GATCG', IUPACUnambiguousDNA())
>>> my_seq + new_seq
Seq('GATCGATGGGCCTATATAGGATCGAAAATCGCGATCG', IUPACUnambiguousDNA())
>>> my_seq[5]
'A'
>>> my_seq == new_seq
0
8Chúng ta có thể truy cập một đối tượng chuỗi duy nhất thông qua các phím và thao tác với đối tượng như một đối tượng
>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
68 bình thường.
>>> len(my_seq)
32
>>> new_seq = my_seq[0:5]
>>> print new_seq
Seq('GATCG', IUPACUnambiguousDNA())
>>> my_seq + new_seq
Seq('GATCGATGGGCCTATATAGGATCGAAAATCGCGATCG', IUPACUnambiguousDNA())
>>> my_seq[5]
'A'
>>> my_seq == new_seq
0
9Thật dễ dàng, chúng tôi đã tạo một cơ sở dữ liệu của tệp FASTA sẽ tạo ra các đối tượng chuỗi

2. 4. 5   Tôi thích phân tích cú pháp -- xin đừng ngừng nói về nó

Biopython có rất nhiều trình phân tích cú pháp và mỗi trình phân tích cú pháp có các hốc nhỏ đặc biệt của riêng nó dựa trên định dạng trình tự mà nó đang phân tích cú pháp và tất cả những thứ đó. Nơi tốt nhất để tìm kiếm thông tin về các trình phân tích cú pháp cụ thể và cách thực hiện những điều thú vị với chúng là trong phần Sách dạy nấu ăn của Hướng dẫn. Nếu bạn không tìm thấy thông tin mình đang tìm kiếm, vui lòng cân nhắc giúp đỡ những người làm tài liệu tội nghiệp đang làm việc quá sức của bạn và gửi một mục sách dạy nấu ăn về thông tin đó. (một khi bạn tìm ra cách để làm điều đó, đó là. )

2. 5   Kết nối với cơ sở dữ liệu sinh học

Một trong những điều rất phổ biến mà bạn cần làm trong tin sinh học là trích xuất thông tin từ cơ sở dữ liệu sinh học. Việc truy cập các cơ sở dữ liệu này theo cách thủ công có thể khá tẻ nhạt, đặc biệt nếu bạn có nhiều công việc lặp đi lặp lại phải làm. Biopython cố gắng tiết kiệm thời gian và năng lượng cho bạn bằng cách cung cấp một số cơ sở dữ liệu trực tuyến từ các tập lệnh python. Hiện tại Biopython có code trích xuất thông tin từ các cơ sở dữ liệu sau

Mã là các mô-đun này về cơ bản giúp dễ dàng viết mã python tương tác với các tập lệnh CGI trên các trang này để bạn có thể nhận được kết quả ở định dạng dễ xử lý. Trong một số trường hợp, kết quả có thể được tích hợp chặt chẽ với trình phân tích cú pháp Biopython để giúp trích xuất thông tin dễ dàng hơn

Ở đây chúng tôi sẽ hiển thị một ví dụ đơn giản về việc thực hiện truy vấn Entrez từ xa. Thông tin thêm về các dịch vụ khác có trong Sách dạy nấu ăn, bắt đầu trên trang ??

Trong phần 2. 4. 2 trong số các ví dụ phân tích cú pháp, chúng tôi đã nói về việc sử dụng Entrez để tìm kiếm cơ sở dữ liệu nucleotide NCBI để biết thông tin về Cypripedioideae, bạn của chúng tôi là hoa lan hài nữ. Bây giờ, chúng ta sẽ xem cách tự động hóa quy trình đó bằng tập lệnh python. Đối với tìm kiếm Entrez, điều này hữu ích hơn để hiển thị kết quả sau đó là công cụ để nhận trình tự. Trang web NCBI chủ yếu được thiết lập để cho phép các truy vấn từ xa để bạn có thể viết các tập lệnh cgi cục bộ của riêng chúng tôi để trả về thông tin từ các trang NCBI. Vì lý do này, kết quả được trả về dưới dạng HTML và khá khó để có được tệp phẳng một cách nhanh chóng

Trong ví dụ này, chúng tôi sẽ chỉ cho bạn cách kết nối, nhận kết quả và hiển thị chúng trong trình duyệt web. Trước tiên, chúng ta sẽ bắt đầu bằng cách xác định tìm kiếm của mình và cách hiển thị kết quả

>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
0Bốn ​​thuật ngữ đầu tiên xác định tìm kiếm mà chúng ta sẽ thực hiện. Để sử dụng mô-đun Entrez, bạn cần biết một chút về cách hoạt động của các tập lệnh CGI từ xa tại NCBI và bạn có thể tìm hiểu thêm về điều này tại http. //www. ncbi. nlm. không. gov/entrez/query/static/linking. html. Thuật ngữ cuối cùng chỉ mô tả trình duyệt để hiển thị kết quả trong

Bây giờ chúng tôi đã thiết lập xong tất cả, chúng tôi có thể truy vấn Entrez và xử lý kết quả. Điều này được thực hiện với đoạn mã sau

>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
1Hàm truy vấn thực hiện tất cả công việc chuẩn bị dòng lệnh tập lệnh CGI và làm tròn kết quả HTML

Bây giờ chúng tôi đã có kết quả, chúng tôi sẵn sàng lưu chúng vào một tệp và hiển thị chúng trong trình duyệt của chúng tôi, điều mà chúng tôi có thể thực hiện với mã như

>>> protein_seq = Seq('EVRNAK', IUPAC.protein)
>>> dna_seq = Seq('ACGT', IUPAC.unambiguous_dna)
>>> protein_seq + dna_seq
Traceback (most recent call last):
  File "", line 1, in ?
  File "/usr/local/lib/python1.6/site-packages/Bio/Seq.py", line 42, in __add__
    raise TypeError, ("incompatable alphabets", str(self.alphabet),
TypeError: ('incompatable alphabets', 'IUPACProtein()', 'IUPACUnambiguousDNA()')
2Snazzy. Chúng tôi có thể tìm nạp mọi thứ và hiển thị chúng tự động -- bạn có thể sử dụng công cụ này để thiết lập nhanh các tìm kiếm mà bạn muốn lặp lại hàng ngày và kiểm tra thủ công hoặc để thiết lập một tập lệnh CGI nhỏ để thực hiện truy vấn và lưu cục bộ kết quả trước đó . Hy vọng rằng bất kể nhiệm vụ của bạn là gì, mã kết nối cơ sở dữ liệu sẽ giúp bạn thực hiện mọi việc dễ dàng hơn

2. 6   Việc cần làm tiếp theo

Bây giờ bạn đã tiến xa đến mức này, hy vọng bạn đã hiểu rõ về những điều cơ bản của Biopython và sẵn sàng bắt đầu sử dụng nó để thực hiện những công việc hữu ích. Điều tốt nhất cần làm bây giờ là bắt đầu rình mò mã nguồn và xem tài liệu được tạo tự động

Sau khi bạn có được bức tranh về những gì bạn muốn làm và những thư viện nào trong Biopython sẽ làm điều đó, bạn nên xem qua Sách dạy nấu ăn, cuốn sách này có thể có mã ví dụ để làm điều gì đó tương tự như những gì bạn muốn làm

Nếu bạn biết mình muốn làm gì, nhưng không thể tìm ra cách thực hiện, vui lòng đăng câu hỏi lên danh sách biopython chính (biopython@biopython. tổ chức). Điều này không chỉ giúp chúng tôi trả lời câu hỏi của bạn mà còn cho phép chúng tôi cải thiện tài liệu để có thể giúp người tiếp theo làm những gì bạn muốn làm

Sự khác biệt giữa Python và Biopython là gì?

Một đối tượng Biopython Seq tương tự như một chuỗi Python ở nhiều khía cạnh. nó hỗ trợ ký hiệu lát Python, có thể được nối với các chuỗi khác và không thay đổi . Ngoài ra, nó bao gồm các phương pháp cụ thể theo trình tự và chỉ định bảng chữ cái sinh học cụ thể được sử dụng.

Python được sử dụng để làm gì trong tin sinh học?

Python được sử dụng cho một số nhiệm vụ trong tin sinh học bao gồm nghiên cứu học thuật, thao tác dữ liệu, giải trình tự protein, phân tích dữ liệu, trực quan hóa dữ liệu, truy cập cơ sở dữ liệu và học thống kê. It is also used for macromolecular structure analysis, DNA sequence analysis, and microarray data analysis.

Biopython có phải là một mô-đun không?

Về cơ bản, Biopython là tập hợp các mô-đun python cung cấp các chức năng xử lý các hoạt động của chuỗi DNA, RNA & protein chẳng hạn như bổ sung ngược của .

Biopython có sử dụng NumPy không?

Bản phát hành cũ. Các bản phát hành gần đây của Biopython yêu cầu NumPy (chứ không phải Numeric).