Hướng dẫn what is sequence alignment in python? - căn chỉnh trình tự trong python là gì?

Quay trở lại blog

Bởi John Lekberg vào ngày 25 tháng 10 năm 2020.


Bài đăng tuần này là về việc giải quyết vấn đề "liên kết trình tự". Bạn sẽ học:

  • Làm thế nào để tạo ra một giải pháp vũ lực.
  • Làm thế nào để tạo ra một giải pháp hiệu quả hơn bằng cách sử dụng thuật toán NeedMan-Wunsch và lập trình động.

Báo cáo vấn đề

Như đầu vào, bạn được cung cấp hai chuỗi. Ví dụ.sequences. E.g.

"CAT"
"CT"

(Các chuỗi có thể là chuỗi hoặc các mảng dữ liệu khác.)

Là đầu ra, mục tiêu của bạn là tạo ra một sự liên kết, kết hợp các yếu tố của chuỗi. Ví dụ.alignment, which pairs up elements of the sequence. E.g.

C - C
A - T
T - 

Một sự liên kết có thể có khoảng trống. Ví dụ.

C - C
A -
T - T

Mặc dù căn chỉnh có thể có khoảng trống, nó không thể thay đổi thứ tự tương đối của các yếu tố chuỗi. Ví dụ. "CT" không thể được thay đổi thành "TC".

Cụ thể, mục tiêu của bạn là tạo ra một sự liên kết với điểm tối đa. Đây là cách tính điểm số:maximal score. Here's how to calculate the score:

  • Điểm = 0
  • Nhìn vào từng cặp yếu tố:
    • Nếu có khoảng cách, thì điểm -= 1
    • Mặt khác, nếu các phần tử giống nhau, thì điểm += 1.
    • Mặt khác, nếu các yếu tố khác nhau, thì điểm -= 1.

Ví dụ. Sự liên kết này có số điểm -1:

C - C   (same, +1)
A - T   (different, -1)
T -     (gap, -1)

Nhưng sự liên kết này có số điểm +1:

C - C   (same, +1)
A -     (gap, -1)
T - T   (same, +1)

Vì vậy, mục tiêu của bạn là thực hiện hai chuỗi và tìm sự liên kết với điểm tối đa.sequences and find an alignment with maximal score.

Cách tôi đại diện cho dữ liệu của vấn đề

Đối với đầu vào, tôi đại diện cho các chuỗi dưới dạng chuỗi hoặc danh sách. Ví dụ. Tôi có thể đại diện cho chuỗi "con mèo" nhưsequences as strings or lists. E.g. I can represent the sequence "CAT" as

"CAT"

hoặc như

["C", "A", "T"]

Thực sự, bất cứ điều gì thực hiện bộ sưu tập.abc.singence (không chỉ chuỗi và danh sách) sẽ hoạt động.

Đối với đầu ra, tôi đại diện cho một căn chỉnh như một danh sách các bộ dữ liệu của các chỉ số (hoặc không có, nếu có một khoảng cách.) Sự liên kết này:alignment as a list of tuples of indices (or None, if there is a gap.) E.g. this alignment:

C - C
A - T
T -

sẽ được đại diện là

[(0, 0), (1, 1), (2, None)]

Và sự liên kết này:

C - C
A -
T - T

sẽ được đại diện là

Và sự liên kết này:

C - C A - T T - 0

Tạo ra một giải pháp vũ lực

Tôi thích bắt đầu với các giải pháp vũ lực khi tôi làm việc về các vấn đề. Các giải pháp vũ lực có xu hướng đơn giản hơn để thực hiện và, khá thường xuyên, giải pháp vũ lực là "đủ tốt" cho các đầu vào thực tế sẽ gặp phải.

C - C
A - T
T - 
1

Tôi bắt đầu bằng cách tạo một hàm có hai phạm vi chỉ mục và lặp lại tất cả các sắp xếp có thể có:

.

C - C
A - T
T - 
2
C - C
A - T
T - 
3

Ví dụ. Dưới đây là tất cả các sự sắp xếp có thể của "CAT" và "CT":

C - C
A - T
T - 
4
C - C
A - T
T - 
5

Đây là một dạng dễ đọc hơn của đầu ra: ("-" Cho biết khoảng cách)

C - C
A - T
T - 
6

Tiếp theo, tôi tạo một hàm có hai chuỗi và căn chỉnh để tạo ra một điểm số:

C - C
A -
T - T

Hãy xem xét sự liên kết này:

C - C
A - T
T - 
8
C - C
A - T
T - 
9

Đây là một ví dụ về tính toán điểm số:

C - C
A -
T - T
0

Với hai chức năng này -

C - C   (same, +1)
A -     (gap, -1)
T - T   (same, +1)
0 và
C - C   (same, +1)
A -     (gap, -1)
T - T   (same, +1)
1 - Giải pháp vũ lực sẽ tìm kiếm tất cả các sắp xếp để tìm một người có điểm tối đa:

C - C
A -
T - T
1
C - C
A - T
T - 
0
C - C
A -
T - T
3
C - C
A -
T - T
4

(Mã này sử dụng: functools.partial, Max.)

  • Độ phức tạp của thời gian của giải pháp này là gì? Đối với hai chuỗi các yếu tố N và M:

    Số lượng sắp xếp có thể được đưa ra bởi các số Delannoy. Số lượng sắp xếp D được đưa ra bởi mối quan hệ tái phát

    D (n, 0) = 1

    D (0, m) = 1

    D (N, M) = D (N - 1, M) + D (N, M - 1) + D (N - 1, M - 1)

    C - C
    A -
    T - T
    
    5
    • Để cho bạn cảm giác về việc con số này tăng nhanh như thế nào:

      C - C
      A -
      T - T
      
      6
      C - C
      A -
      T - T
      
      7
    • Có 3 sự sắp xếp có thể của hai chuỗi 1 phần tử:

      C - C
      A -
      T - T
      
      8
      C - C
      A -
      T - T
      
      9
    • Có 8.097.453 sự sắp xếp có thể của hai chuỗi 10 ký tự:

      C - C   (same, +1)
      A - T   (different, -1)
      T -     (gap, -1)
      
      0
      C - C   (same, +1)
      A - T   (different, -1)
      T -     (gap, -1)
      
      1

      Có 2.05E+75 có thể sắp xếp hai chuỗi 100 ký tự:

    D (100.100) đang tiến gần số Eddington, 10E+80 - số lượng nguyên tử hydro ước tính trong vũ trụ có thể quan sát được.

  • (Xem OEIS A001850 để biết thêm thông tin về số Delannoy của Mẫu D (N, N).)

Tính toán điểm căn chỉnh cần thời gian tuyến tính theo kích thước của cả hai chuỗi: O (N & NBSP;+& NBSP; M).

Kết quả là, độ phức tạp thời gian tổng thể của giải pháp vũ phu là:

O (D (N, M) × (N + M))

Tạo một giải pháp hiệu quả hơn

Giải pháp vũ phu rất đơn giản, nhưng nó không quy mô tốt. Trong thực tế, căn chỉnh trình tự được sử dụng để phân tích chuỗi dữ liệu sinh học (ví dụ: trình tự axit nucleic). Cho rằng kích thước của các chuỗi này có thể dài hàng trăm hoặc hàng ngàn yếu tố, không có cách nào mà giải pháp vũ phu sẽ hoạt động cho dữ liệu có kích thước đó.

Năm 1970, Saul B. Needman và Christian D. Wunsch đã tạo ra một thuật toán nhanh hơn để giải quyết vấn đề này: Thuật toán Needman-Wunsch. . Vấn đề căn chỉnh trình tự trong thời gian O (Mn).

C - C   (same, +1)
A - T   (different, -1)
T -     (gap, -1)
2

.

C - C   (same, +1)
A - T   (different, -1)
T -     (gap, -1)
3
C - C
A - T
T - 
0

Và vì vậy, thuật toán nhanh hơn sẽ đơn giản gọi

C - C   (same, +1)
A -     (gap, -1)
T - T   (same, +1)
2:

C - C   (same, +1)
A - T   (different, -1)
T -     (gap, -1)
5
C - C
A - T
T - 
0
C - C   (same, +1)
A - T   (different, -1)
T -     (gap, -1)
7
C - C
A -
T - T
4

Độ phức tạp của thời gian của giải pháp này là gì? Đối với hai chuỗi các yếu tố N và M:

  • Tạo bảng
    C - C   (same, +1)
    A -     (gap, -1)
    T - T   (same, +1)
    
    3 và
    C - C   (same, +1)
    A -     (gap, -1)
    T - T   (same, +1)
    
    4 mất thời gian O (Mn).
  • Tạo sự liên kết bằng cách điều hướng từ
    C - C   (same, +1)
    A -     (gap, -1)
    T - T   (same, +1)
    
    5 đến
    C - C   (same, +1)
    A -     (gap, -1)
    T - T   (same, +1)
    
    6 mất thời gian O (N+M).

Kết quả là, độ phức tạp thời gian tổng thể của thuật toán là

O(mn)

Tóm lại là...

Trong bài viết tuần này, bạn đã học được cách giải quyết vấn đề "liên kết trình tự". Bạn đã học cách tạo ra một giải pháp vũ lực tạo ra mọi sự liên kết có thể. Sau đó, bạn đã học được rằng lực lượng vũ phu là không khả thi cho các chuỗi lớn hơn: hai chuỗi 10 phần tử có hơn 8.000.000 sự sắp xếp khác nhau! Cuối cùng, bạn đã học được cách thực hiện lại thuật toán Needman-Wunsch trong Python.

Thử thách của tôi với bạn:

Sửa đổi

C - C   (same, +1)
A -     (gap, -1)
T - T   (same, +1)
2 để lấy các tham số để ghi điểm:

  • C - C   (same, +1)
    A -     (gap, -1)
    T - T   (same, +1)
    
    8 - Làm thế nào để ghi một khoảng cách. (Mặc định: -1)
  • C - C   (same, +1)
    A -     (gap, -1)
    T - T   (same, +1)
    
    9 - Làm thế nào để ghi điểm các yếu tố bằng nhau. (Mặc định: +1)
  • "CAT"
    
    0 - Cách ghi điểm các yếu tố không bình đẳng. (Mặc định: -1)

Ví dụ. Bạn có thể gọi chức năng mới như thế này:

C - C   (same, +1)
A - T   (different, -1)
T -     (gap, -1)
9

Nếu bạn thích bài đăng trong tuần này, hãy chia sẻ nó với bạn bè của bạn và theo dõi bài đăng vào tuần tới. Gặp bạn sau!


(Nếu bạn phát hiện ra bất kỳ lỗi hoặc lỗi chính tả nào trên bài đăng này, liên hệ với tôi qua trang liên hệ của tôi.)

Căn chỉnh trình tự là gì?

Căn chỉnh trình tự là quá trình so sánh và phát hiện sự tương đồng giữa các chuỗi sinh học.Những gì tương tự của người Viking đang được phát hiện sẽ phụ thuộc vào các mục tiêu của quá trình căn chỉnh cụ thể.Căn chỉnh trình tự dường như cực kỳ hữu ích trong một số ứng dụng tin sinh học.the process of comparing and detecting similarities between biological sequences. What “similarities” are being detected will depend on the goals of the particular alignment process. Sequence alignment appears to be extremely useful in a number of bioinformatics applications.

Làm cách nào để sắp xếp hai chuỗi Python?

Vì vậy, mục tiêu của bạn là thực hiện hai chuỗi và tìm sự liên kết với điểm số tối đa ...
Nếu có khoảng cách, thì điểm -= 1 ..
Nếu không, nếu các phần tử giống nhau, thì điểm += 1 ..
Nếu không, nếu các yếu tố khác nhau, thì điểm -= 1 ..

Công cụ căn chỉnh trình tự nào?

Cobalt là một công cụ căn chỉnh nhiều chuỗi tìm thấy một tập hợp các ràng buộc cặp có nguồn gốc từ cơ sở dữ liệu miền được bảo tồn, cơ sở dữ liệu mô-đun protein và độ tương tự trình tự, sử dụng RPS-blast, blastp và Phi-blast. is a multiple sequence alignment tool that finds a collection of pairwise constraints derived from conserved domain database, protein motif database, and sequence similarity, using RPS-BLAST, BLASTP, and PHI-BLAST.