Biopython - Genetyka populacji

Genetyka populacji odgrywa ważną rolę w teorii ewolucji. Analizuje różnice genetyczne między gatunkami, a także dwoma lub więcej osobnikami w ramach tego samego gatunku.

Biopython dostarcza moduł Bio.PopGen do genetyki populacyjnej i obsługuje głównie `GenePop, popularny pakiet genetyki opracowany przez Michela Raymonda i Francois Rousset.

Prosty parser

Napiszmy prostą aplikację do analizowania formatu GenePop i zrozumienia koncepcji.

Pobierz plik genePop dostarczony przez zespół Biopython z linku podanego poniżej -https://raw.githubusercontent.com/biopython/biopython/master/Tests/PopGen/c3line.gen

Załaduj moduł GenePop za pomocą poniższego fragmentu kodu -

from Bio.PopGen import GenePop

Przeanalizuj plik za pomocą metody GenePop.read, jak poniżej -

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

Pokaż loci i informacje o populacji, jak podano poniżej -

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

W pliku dostępne są trzy loci i trzy zestawy populacji: populacja pierwsza ma 4 rekordy, populacja druga ma 3 rekordy, a populacja trzecia 5 rekordów. record.populations pokazuje wszystkie zestawy populacji z danymi alleli dla każdego locus.

Manipuluj plikiem GenePop

Biopython zapewnia opcje usuwania danych dotyczących lokalizacji i populacji.

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

Interfejs z oprogramowaniem GenePop

Biopython zapewnia interfejsy do interakcji z oprogramowaniem GenePop, a tym samym udostępnia z niego wiele funkcji. Służy do tego moduł Bio.PopGen.GenePop. Jednym z takich łatwych w użyciu interfejsów jest EasyController. Sprawdźmy, jak przeanalizować plik GenePop i przeprowadzić analizę za pomocą EasyController.

Najpierw zainstaluj oprogramowanie GenePop i umieść folder instalacyjny w ścieżce systemowej. Aby uzyskać podstawowe informacje o pliku GenePop, utwórz obiekt EasyController, a następnie wywołaj metodę get_basic_info, jak określono poniżej -

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

Tutaj pierwsza pozycja to lista populacji, a druga to lista miejsc.

Aby uzyskać listę wszystkich alleli określonego miejsca, wywołaj metodę get_alleles_all_pops, przekazując nazwę miejsca, jak określono poniżej -

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

Aby uzyskać listę alleli według określonej populacji i locus, wywołaj get_alleles, przekazując nazwę miejsca i pozycję populacji, jak podano poniżej -

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

Podobnie EasyController udostępnia wiele funkcji: częstotliwość alleli, częstotliwość genotypu, statystyki multilocus F, równowaga Hardy'ego-Weinberga, równowaga sprzężeń itp.