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.