Biopython - Di truyền quần thể

Di truyền quần thể đóng một vai trò quan trọng trong thuyết tiến hóa. Nó phân tích sự khác biệt di truyền giữa các loài cũng như hai hoặc nhiều cá thể trong cùng một loài.

Biopython cung cấp mô-đun Bio.PopGen cho di truyền dân số và chủ yếu hỗ trợ `GenePop, một gói di truyền phổ biến được phát triển bởi Michel Raymond và Francois Rousset.

Một trình phân tích cú pháp đơn giản

Hãy để chúng tôi viết một ứng dụng đơn giản để phân tích cú pháp định dạng GenePop và hiểu khái niệm này.

Tải xuống tệp genPop do nhóm Biopython cung cấp theo liên kết dưới đây -https://raw.githubusercontent.com/biopython/biopython/master/Tests/PopGen/c3line.gen

Tải mô-đun GenePop bằng đoạn mã bên dưới -

from Bio.PopGen import GenePop

Phân tích cú pháp tệp bằng phương thức GenePop.read như bên dưới:

record = GenePop.read(open("c3line.gen"))

Hiển thị các locus và thông tin dân số như được cung cấp bên dưới -

>>> record.loci_list 
['136255903', '136257048', '136257636'] 
>>> record.pop_list 
['4', 'b3', '5'] 
>>> record.populations 
[[('1', [(3, 3), (4, 4), (2, 2)]), ('2', [(3, 3), (3, 4), (2, 2)]), 
   ('3', [(3, 3), (4, 4), (2, 2)]), ('4', [(3, 3), (4, 3), (None, None)])], 
[('b1', [(None, None), (4, 4), (2, 2)]), ('b2', [(None, None), (4, 4), (2, 2)]), 
   ('b3', [(None, None), (4, 4), (2, 2)])], 
[('1', [(3, 3), (4, 4), (2, 2)]), ('2', [(3, 3), (1, 4), (2, 2)]), 
   ('3', [(3, 2), (1, 1), (2, 2)]), ('4', 
   [(None, None), (4, 4), (2, 2)]), ('5', [(3, 3), (4, 4), (2, 2)])]] 
>>>

Ở đây, có sẵn ba locus trong tệp và ba tập hợp dân số: Quần thể thứ nhất có 4 bản ghi, quần thể thứ hai có 3 bản ghi và quần thể thứ ba có 5 bản ghi. record.population hiển thị tất cả các tập hợp quần thể với dữ liệu alen cho mỗi locus.

Thao tác với tệp GenePop

Biopython cung cấp các tùy chọn để loại bỏ dữ liệu quỹ tích và dân số.

Remove a population set by position,

>>> record.remove_population(0) 
>>> record.populations 
[[('b1', [(None, None), (4, 4), (2, 2)]), 
   ('b2', [(None, None), (4, 4), (2, 2)]), 
   ('b3', [(None, None), (4, 4), (2, 2)])], 
   [('1', [(3, 3), (4, 4), (2, 2)]), 
   ('2', [(3, 3), (1, 4), (2, 2)]), 
   ('3', [(3, 2), (1, 1), (2, 2)]), 
   ('4', [(None, None), (4, 4), (2, 2)]), 
   ('5', [(3, 3), (4, 4), (2, 2)])]]
>>>

Remove a locus by position,

>>> record.remove_locus_by_position(0) 
>>> record.loci_list 
['136257048', '136257636'] 
>>> record.populations 
[[('b1', [(4, 4), (2, 2)]), ('b2', [(4, 4), (2, 2)]), ('b3', [(4, 4), (2, 2)])], 
   [('1', [(4, 4), (2, 2)]), ('2', [(1, 4), (2, 2)]), 
   ('3', [(1, 1), (2, 2)]), ('4', [(4, 4), (2, 2)]), ('5', [(4, 4), (2, 2)])]]
>>>

Remove a locus by name,

>>> record.remove_locus_by_name('136257636') >>> record.loci_list 
['136257048'] 
>>> record.populations 
[[('b1', [(4, 4)]), ('b2', [(4, 4)]), ('b3', [(4, 4)])], 
   [('1', [(4, 4)]), ('2', [(1, 4)]), 
   ('3', [(1, 1)]), ('4', [(4, 4)]), ('5', [(4, 4)])]]
>>>

Giao diện với phần mềm GenePop

Biopython cung cấp các giao diện để tương tác với phần mềm GenePop và do đó thể hiện rất nhiều chức năng từ nó. Mô-đun Bio.PopGen.GenePop được sử dụng cho mục đích này. Một trong những giao diện dễ sử dụng như vậy là EasyController. Hãy để chúng tôi kiểm tra cách phân tích cú pháp tệp GenePop và thực hiện một số phân tích bằng EasyController.

Đầu tiên, cài đặt phần mềm GenePop và đặt thư mục cài đặt vào đường dẫn hệ thống. Để nhận thông tin cơ bản về tệp GenePop, hãy tạo một đối tượng EasyController và sau đó gọi phương thức get_basic_info như được chỉ định bên dưới:

>>> from Bio.PopGen.GenePop.EasyController import EasyController 
>>> ec = EasyController('c3line.gen') 
>>> print(ec.get_basic_info()) 
(['4', 'b3', '5'], ['136255903', '136257048', '136257636'])
>>>

Ở đây, mục đầu tiên là danh sách dân số và mục thứ hai là danh sách loci.

Để có được danh sách tất cả các allele của một locus cụ thể, hãy gọi phương thức get_alleles_all_pops bằng cách chuyển tên locus như được chỉ định bên dưới:

>>> allele_list = ec.get_alleles_all_pops("136255903") 
>>> print(allele_list) 
[2, 3]

Để có được danh sách alen theo quần thể và khu vực cụ thể, hãy gọi get_alleles bằng cách chuyển tên locus và vị trí của quần thể như cho dưới đây:

>>> allele_list = ec.get_alleles(0, "136255903") 
>>> print(allele_list) 
[] 
>>> allele_list = ec.get_alleles(1, "136255903") 
>>> print(allele_list) 
[] 
>>> allele_list = ec.get_alleles(2, "136255903") 
>>> print(allele_list) 
[2, 3] 
>>>

Tương tự, EasyController thể hiện nhiều chức năng: tần số alen, tần số kiểu gen, thống kê đa bội F, cân bằng Hardy-Weinberg, Cân bằng bệnh liên kết, v.v.