Biopython - Genética Populacional

A genética populacional desempenha um papel importante na teoria da evolução. Ele analisa a diferença genética entre as espécies, bem como dois ou mais indivíduos da mesma espécie.

Biopython fornece o módulo Bio.PopGen para genética de populações e principalmente suporta `GenePop, um pacote de genética popular desenvolvido por Michel Raymond e François Rousset.

Um analisador simples

Vamos escrever um aplicativo simples para analisar o formato GenePop e entender o conceito.

Baixe o arquivo genePop fornecido pela equipe Biopython no link abaixo -https://raw.githubusercontent.com/biopython/biopython/master/Tests/PopGen/c3line.gen

Carregue o módulo GenePop usando o trecho de código abaixo -

from Bio.PopGen import GenePop

Analise o arquivo usando o método GenePop.read conforme abaixo -

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

Mostre os loci e as informações da população conforme fornecido abaixo -

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

Aqui, há três loci disponíveis no arquivo e três conjuntos de população: a primeira população tem 4 registros, a segunda população tem 3 registros e a terceira população tem 5 registros. record.populations mostra todos os conjuntos de população com dados de alelos para cada locus.

Manipular o arquivo GenePop

Biopython fornece opções para remover dados de locus e população.

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

Interface com software GenePop

Biopython fornece interfaces para interagir com o software GenePop e, portanto, expõe muitas funcionalidades dele. O módulo Bio.PopGen.GenePop é usado para essa finalidade. Uma dessas interfaces fáceis de usar é o EasyController. Vamos verificar como analisar o arquivo GenePop e fazer algumas análises usando o EasyController.

Primeiro, instale o software GenePop e coloque a pasta de instalação no caminho do sistema. Para obter informações básicas sobre o arquivo GenePop, crie um objeto EasyController e chame o método get_basic_info conforme especificado abaixo -

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

Aqui, o primeiro item é a lista de população e o segundo item é a lista de locais.

Para obter a lista de todos os alelos de um locus específico, chame o método get_alleles_all_pops passando o nome do locus conforme especificado abaixo -

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

Para obter a lista de alelos por população e locus específicos, chame get_alleles passando o nome do locus e a posição da população conforme fornecido abaixo -

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

Da mesma forma, EasyController expõe muitas funcionalidades: frequência de alelos, frequência de genótipos, estatísticas F multilocus, equilíbrio de Hardy-Weinberg, desequilíbrio de ligação, etc.