Hướng dẫn next generation sequencing python - python trình tự thế hệ tiếp theo

Không có gì bí mật rằng chúng tôi là những người hâm mộ khổng lồ của Python & NBSP; tại công ty tư vấn Amber Biology của chúng tôi. Ít nhất 90% tất cả các dự án tư vấn của chúng tôi liên quan đến một số mã hóa python và đó là một ngôn ngữ linh hoạt, năng suất và biểu cảm mà chúng tôi muốn gọi nó là "con dao ngôn ngữ lập trình của quân đội Thụy Sĩ". Tuy nhiên, một trong những điều chúng ta thường nghe về Python, đi một cái gì đó như thế này:Python at our consulting firm Amber Biology. At least 90% of all our consulting projects involve some Python coding and it's such a versatile, productive and expressive language that we like to call it "The Swiss Army Knife of programming languages". One of the things we commonly hear about Python however, goes something like this:

"Họ nói rằng Python quá chậm và không hiệu quả để sử dụng cho các nhiệm vụ tính toán nặng nề vì đó là một ngôn ngữ được giải thích."

Đây có phải là "họ" & nbsp; cũng nói rằng bạn có thể phát triển tầm nhìn ban đêm phi thường bằng cách ăn nhiều cà rốt?develop extraordinary night vision by eating lots of carrots?

Tại Amber Biology, chúng tôi đã sử dụng Python cho nhiều vấn đề nghiên cứu chuyên sâu tính toán, ví dụ, mô phỏng việc sử dụng trình tự thế hệ tiếp theo mới & NBSP; Giao thức phòng thí nghiệm trên bộ gen của con người.next-generation sequencing laboratory protocol on the human genome.

Có, phân phối python tiêu chuẩn có thể không nhanh như vậy trong một số trường hợp nhất định như một số ngôn ngữ khác được biên dịch & nbsp; (ví dụ như c & nbsp; Ít nhất là trong cùng một sân bóng như các ngôn ngữ được biên dịch này, nếu không bằng chúng.compiled (like C for example), but there are many approaches to using Python in ways that can raise its performance to a level that is at least in the same ballpark as these compiled languages, if not equal to them.

Ngoài việc được viết bằng chính ngôn ngữ Python, các mô -đun Python cũng có thể được viết bằng các ngôn ngữ khác như C và sau đó được biên dịch cho các hướng dẫn thực thi của máy & NBSP; và được liên kết với trình thông dịch Python. Điều này có nghĩa là mã python của bạn có thể được chạy dưới dạng mã được giải thích hoặc trực tiếp dưới dạng hướng dẫn thực hiện máy - tất cả từ trong cùng một ứng dụng.machine executable instructions and linked to the Python interpreter. This means that your Python code can be running as interpreted code, or directly as machine-executable instructions - all from within the same application.

Thông dịch viên Python chính thức thực sự được viết bằng C, cũng như nhiều mô -đun đi kèm với nó như là một phần của Thư viện tiêu chuẩn Python. Điều này có nghĩa là khi bạn gọi các mô-đun thư viện tiêu chuẩn này từ mã của bạn đang chạy trong trình thông dịch Python, các hàm và phương thức mà các mô-đun này chứa có thể được chạy trực tiếp (và rất hiệu quả) Có thể chạy mà không gặp phải một tham chiếu đến bất cứ điều gì trở lại trong vòng thông dịch. Về cơ bản, điều này có nghĩa là nếu bạn cấu trúc mã của mình tốt, bạn có thể nhận được một cái gì đó giống với hiệu suất ngôn ngữ, ngay cả từ ngôn ngữ "được giải thích" như Python.Python Standard Library. This means that when you call these standard library modules from your code that is running in the Python interpreter, the functions and methods that these modules contain can be run directly (and very efficiently) as compiled machine-executable instructions for as long as they are able to run without encountering a reference to anything back in the interpreter loop. Essentially what this means is that if you structure your code well, you can get something akin to compiled language performance, even from an "interpreted" language like Python.

Không tin chúng tôi?

Các nhà nghiên cứu làm việc trong các lĩnh vực giải trình tự thế hệ tiếp theo và genomics, thường xuyên làm việc với các trình tự có số lượng hàng triệu hoặc thậm chí hàng tỷ căn cứ. Như một ví dụ về việc Python có thể hoạt động nhanh chóng và hiệu quả khi áp dụng các loại vấn đề này, chúng ta hãy sử dụng phần tiếp giáp lớn nhất của bộ gen người, & NBSP; nhiễm sắc thể 1 và sử dụng Python để tìm kiếm khoảng 250 triệu cơ sở cho bộ khởi động gen tiềm năng & NBSP; trình tự.Chromosome 1, and use Python to search its approximately 250 million bases for potential gene promoter sequences.

Các chất kích thích gen thường bao gồm các chuỗi nhận dạng tương đối được bảo tồn được phân tách bằng một chuỗi spacer, thường có độ dài thay đổi. Nhiều chất kích thích gen vi khuẩn chẳng hạn, bao gồm hai chuỗi nhận dạng khác biệt ngược dòng của gen được phiên âm như thế này:

5' ----PPPPPP-------------------PPPPPP----GGGGGGGGGGG … 3'
       |                        |         |
      -35                     -10         start of gene

Trình tự đồng thuận cho trang web nhận dạng tại vị trí -10 là Tataat & nbsp; trong khi trang web -35 có chuỗi sự đồng thuận của TTGACA. Chúng ta hoàn toàn có thể dễ dàng tạo ra một biểu thức thông thường Python & nbsp; sẽ tìm kiếm một bộ gen cho các khu vực quảng bá đồng thuận như thế này:tataat while the -35 site has a consensus sequence of ttgaca. We can quite easily craft a Python regular expression that would search a genome for such consensus promoter regions like this:

promoter = 'ttgaca...................tataat'

Điều này sẽ phù hợp với bất kỳ chuỗi nào bao gồm chính xác hai trang web nhận dạng đồng thuận được phân tách bằng một số lượng cố định (với bất kỳ cơ sở nào trong số 4 cơ sở được phép tại các vị trí đó).

Nhưng điều gì sẽ xảy ra nếu miếng đệm giữa các chuỗi đồng thuận có độ dài thay đổi?

Nó chỉ ra rằng các biểu thức thường xuyên cho chúng ta một cách đơn giản và mạnh mẽ để đối phó với tình huống này. Chúng ta có thể tạo các mẫu tìm kiếm cho phép một số lượng cơ sở khác nhau giữa các trang web nhận dạng như sau:

promoter = 'ttgaca.{15,25}tataat'

Các dấu ngoặc xoăn sau khoảng thời gian được sử dụng để chỉ ra sự lặp lại từ 15 đến 25 lần xuất hiện của ký tự trước dấu ngoặc - trong trường hợp này, khoảng thời gian phù hợp với bất kỳ cơ sở nào. Mô hình tìm kiếm này sẽ phù hợp với bất kỳ đoạn bộ gen nào bao gồm hai trang web nhận dạng đồng thuận, cách nhau từ 15 đến 25 cơ sở dưới bất kỳ hình thức nào.

Vì vậy, bây giờ chúng tôi có một mô hình quảng bá gen để tìm kiếm, hãy sử dụng Python để tạo ra một nhiễm sắc thể tổng hợp 1 - đặc biệt là vì đây chỉ là một bài kiểm tra hiệu suất tính toán và nó giúp chúng tôi tiết kiệm tất cả thời gian để tìm một tệp nhiễm sắc thể 1 từ một con người trực tuyến Kho lưu trữ bộ gen, và viết mã để đọc và phân tích nó. Để tạo nhiễm sắc thể tổng hợp của chúng tôi, chúng tôi chỉ cần sử dụng một trong các phương thức trong mô -đun ngẫu nhiên Python & nbsp; để tạo ra một chuỗi ngẫu nhiên gồm 250 triệu cơ sở, như thế này:Python random module to generate a randomized sequence of 250 million bases, like this:

import random
bases = ['a', 't', 'c', 'g']
sequenceList = []
for n in range(0, 250000000):
    sequenceList.append(random.choice(bases))
chromosome = ‘’.join(sequenceList)

Điều này thực sự mất vài phút trên iMac & nbsp của tôi;- nhiều hơn (nhiều) so với thời gian cần thiết để tìm kiếm nhiễm sắc thể tổng hợp này cho các trình tự phù hợp với mẫu quảng bá gen đồng thuận của chúng tôi, như chúng ta sẽ thấy trong một phút ...iMac - much (much) longer than the time it will take to search this synthetic chromosome for sequences that match our consensus gene promoter pattern, as we shall see in a minute ...

Vì vậy, đối với bài kiểm tra hiệu suất này, chúng tôi sẽ cần sử dụng mô -đun thời gian Python, như tên này ngụ ý, xử lý thời gian. Thời gian.time () & nbsp; Phương thức trả về số giây kể từ ngày cố định tùy ý và thời gian được gọi trong tài liệu Python là sự khởi đầu của kỷ nguyên. Tất cả điều này nghe có vẻ rất thời tiền sử và/hoặc tận thế, nhưng bạn có thể ngạc nhiên khi biết rằng bình minh lớn của lịch sử này thực sự là ngày 1 tháng 1 năm 1970.Python time module, which as the name implies, handles time. The time.time() method returns the number of seconds since an arbitrary fixed date and time referred to in the Python documentation as the start of the epoch. This all sounds very prehistoric and/or apocalyptic, but you might be surprised to learn that this grand dawn of history is actually January 1st 1970.

Really?

Điều này có liên quan đến thực tế, cách tiếp cận tiêu chuẩn để đếm thời gian trên máy tính được xác định bởi các kỹ sư của Unix & NBSP; đây là một trong những hệ điều hành máy tính thực sự đầu tiên và nó đã được kế thừa bởi hầu như tất cả các nền tảng máy tính khác như một loại Facto & nbsp; tiêu chuẩn cho thời gian.Unix which was one of the first real computer operating systems, and it has been inherited by virtually all other computer platforms as a kind of de facto standard for time.

Và - vì chúng tôi sẽ sử dụng các biểu thức thông thường của Python, chúng tôi cũng sẽ cần nhập mô -đun Python Re, & nbsp; từ đó chúng tôi sẽ sử dụng re.finditer () & nbsp; phương thức để tìm kiếm các chuỗi quảng bá gen đồng thuận của chúng tôi. Thay vì chỉ trả về các chuỗi phù hợp, phương thức finditer () & nbsp; trả về một bộ sưu tập python matchobject & nbsp; cho phép kết quả tìm kiếm được phân tích chi tiết hơn (ví dụ: vị trí bắt đầu và kết thúc của chuỗi phù hợp là cũng được ghi lại).Python re module, from which we will use the wonderfully versatile re.finditer() method to search for our consensus gene promoter sequences. Instead of just returning matching sequences, the finditer() method returns an iterable collection of Python MatchObject objects, that allows the search results to be analyzed in more detail (for example - the start and end positions of the matching sequences are also recorded).

Khi chúng tôi kết hợp tất cả lại với nhau, mã để tìm kiếm nhiễm sắc thể tổng hợp 1 của chúng tôi cho các chuỗi quảng bá gen đồng thuận trông như thế này:

import time, re
promoter = 'ttgaca.{15, 25}tataat' 
t1 = time.time() 
result = re.finditer(promoter, chromosome) 
t2 = time.time() 
print 'Search time was', (t2-t1), 'seconds'

Vì vậy, chúng ta hãy chạy mã python này và xem những gì chúng ta nhận được ...

Search time was 0.00100994110107 seconds

Wow!

Trên máy tính để bàn IMAC khiêm tốn của tôi (khoảng năm 2014), chỉ cần Python chỉ khoảng một mili giây để tìm kiếm chuỗi 250 triệu cơ sở của nhiễm sắc thể 1 cho mẫu quảng bá gen đồng thuận này!(circa 2014), it takes Python only about one millisecond to search the 250 million base sequence of Chromosome 1 for this consensus gene promoter pattern!

Do đó, bằng cách ngoại suy, chúng tôi có thể hy vọng rằng việc loại trừ thời gian cần tải và đọc các tệp trình tự nhiễm sắc thể riêng lẻ của bộ gen người - sẽ chỉ mất khoảng 15 mili giây để tìm kiếm toàn bộ 3 tỷ cơ sở cho mô hình quảng bá gen này!

Nhân tiện - chỉ trong trường hợp bạn tự hỏi liệu nó có nhanh chỉ vì không có gì để tìm, hãy thêm một ít mã bổ sung để in ra các chi tiết của các trận đấu được tìm thấy. Chúng tôi sẽ sử dụng dữ liệu được lưu trữ trong Python MatchObject & nbsp; để in các điểm bắt đầu và điểm cuối của mỗi chuỗi phù hợp, cũng như bản thân trình tự phù hợp (và để lưu không gian, chúng tôi sẽ chỉ hiển thị 3 trận đấu đầu tiên ở đây - nhưng bạn Có được ý tưởng). Cuối cùng, chúng tôi cũng sẽ in tổng số trình tự quảng bá gen phù hợp được tìm thấy trong nhiễm sắc thể tổng hợp của chúng tôi.MatchObject to print the start and endpoints of each matching sequence, as well as the matching sequence itself (and to save space, we will only show the first 3 and last 3 matches here - but you get the idea). Finally, we will also print the total number of matching gene promoter sequences that were found in our synthetic chromosome.

nmatches = 0 
for match in result:
     nmatches += 1     
     print match.start(), match.end(), match.group() 
print 'Number of search hits = ', nmatches

Và khi chúng tôi bao gồm mã bổ sung này, chúng tôi sẽ nhận được ...

1199566 1199603 ttgacactcacatcatcagagccccacatagtataat
2103278 2103308 ttgacacacacagggtttgtgatttataat
3702112 3702141 ttgacactctttcaaaccaggactataat
 … 
 …
245627316 245627350 ttgacaaggtctccgtggccccggctattataat
246256184 246256220 ttgacaggattcctctcgttaattacatcgtataat
248653641 248653674 ttgacaaccgggctcgtaacgtattagtataat
Number of search hits =  185

Vì vậy, bạn có nó.

Lần tới khi ai đó nói với bạn rằng Python quá chậm đối với tính toán nặng nề vì đó là một ngôn ngữ được giải thích - chỉ là một cách lịch sự nói với họ rằng bạn đã nghe về một cây cầu ở bang New York được bán với giá mặc cả!a bridge in New York state that's up for sale at a bargain price!

© 2018 Nhà sinh vật học kỹ thuật số