Учебники

Биопайтон — популяционная генетика

Генетика населения играет важную роль в теории эволюции. Он анализирует генетические различия между видами, а также двух или более особей в пределах одного и того же вида.

Biopython предоставляет модуль Bio.PopGen для популяционной генетики и в основном поддерживает `GenePop, популярный генетический пакет, разработанный Мишелем Рэймондом и Франсуа Руссе.

Простой парсер

Давайте напишем простое приложение для разбора формата GenePop и понимания концепции.

Загрузите файл genePop, предоставленный командой Biopython, по ссылке, приведенной ниже — https://raw.githubusercontent.com/biopython/biopython/master/Tests/PopGen/c3line.gen.

Загрузите модуль GenePop, используя приведенный ниже фрагмент кода —

from Bio.PopGen import GenePop

Разобрать файл, используя метод GenePop.read, как показано ниже —

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

Показать информацию о местах и ​​населении, как указано ниже —

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

Здесь в файле доступны три локуса и три группы населения: первая популяция имеет 4 записи, вторая популяция имеет 3 записи и третья популяция имеет 5 записей. record.populations показывает все группы населения с данными по аллелям для каждого локуса.

Манипулировать файлом GenePop

Biopython предоставляет опции для удаления данных о местонахождении и населении.

Удалить население, установленное положением,

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

Удалить локус по положению,

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

Удалить локус по имени,

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

Интерфейс с программным обеспечением GenePop

Biopython предоставляет интерфейсы для взаимодействия с программным обеспечением GenePop и тем самым предоставляет множество функциональных возможностей. Для этого используется модуль Bio.PopGen.GenePop. Одним из таких простых в использовании интерфейс является EasyController. Давайте проверим, как анализировать файл GenePop и провести анализ с помощью EasyController.

Сначала установите программное обеспечение GenePop и поместите папку установки в системный путь. Чтобы получить основную информацию о файле GenePop, создайте объект EasyController и затем вызовите метод get_basic_info, как указано ниже —

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

Здесь первый элемент — список населения, а второй элемент — список локусов.

Чтобы получить весь список аллелей определенного локуса, вызовите метод get_alleles_all_pops, передав имя локуса, как указано ниже —

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

Чтобы получить список аллелей по определенной популяции и локусу, вызовите get_alleles, передавая имя локуса и положение популяции, как указано ниже —

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

Аналогичным образом EasyController предоставляет множество функций: частоту аллелей, частоту генотипа, статистику мультилокусных F, равновесие Харди-Вайнберга, неравновесие по сцеплению и т. Д.