Biopython - Genética de poblaciones

La genética de poblaciones juega un papel importante en la teoría de la evolución. Analiza la diferencia genética entre especies, así como dos o más individuos dentro de la misma especie.

Biopython proporciona el módulo Bio.PopGen para genética de poblaciones y principalmente es compatible con GenePop, un paquete de genética popular desarrollado por Michel Raymond y Francois Rousset.

Un analizador simple

Escribamos una aplicación simple para analizar el formato GenePop y comprender el concepto.

Descargue el archivo genePop proporcionado por el equipo de Biopython en el enlace que figura a continuación:https://raw.githubusercontent.com/biopython/biopython/master/Tests/PopGen/c3line.gen

Cargue el módulo GenePop usando el siguiente fragmento de código:

from Bio.PopGen import GenePop

Analice el archivo utilizando el método GenePop.read de la siguiente manera:

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

Muestre los loci y la información de la población como se indica a continuación:

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

Aquí, hay tres loci disponibles en el archivo y tres conjuntos de población: la primera población tiene 4 registros, la segunda población tiene 3 registros y la tercera población tiene 5 registros. record.populations muestra todos los conjuntos de población con datos de alelos para cada locus.

Manipular el archivo GenePop

Biopython ofrece opciones para eliminar datos de locus y población.

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

Interfaz con el software GenePop

Biopython proporciona interfaces para interactuar con el software GenePop y, por lo tanto, expone una gran cantidad de funciones. El módulo Bio.PopGen.GenePop se utiliza para este propósito. Una de esas interfaces fáciles de usar es EasyController. Veamos cómo analizar el archivo GenePop y hagamos un análisis usando EasyController.

Primero, instale el software GenePop y coloque la carpeta de instalación en la ruta del sistema. Para obtener información básica sobre el archivo GenePop, cree un objeto EasyController y luego llame al método get_basic_info como se especifica a continuación:

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

Aquí, el primer elemento es la lista de población y el segundo elemento es la lista de loci.

Para obtener toda la lista de alelos de un locus en particular, llame al método get_alleles_all_pops pasando el nombre del locus como se especifica a continuación:

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

Para obtener la lista de alelos por población y locus específicos, llame a get_alleles pasando el nombre del locus y la posición de la población como se indica a continuación:

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

De manera similar, EasyController expone muchas funcionalidades: frecuencia alélica, frecuencia de genotipo, estadísticas F multilocus, equilibrio de Hardy-Weinberg, desequilibrio de ligamiento, etc.