Biopython - Genetica delle popolazioni

La genetica delle popolazioni gioca un ruolo importante nella teoria dell'evoluzione. Analizza la differenza genetica tra le specie e due o più individui all'interno della stessa specie.

Biopython fornisce il modulo Bio.PopGen per la genetica delle popolazioni e supporta principalmente `GenePop, un popolare pacchetto genetico sviluppato da Michel Raymond e Francois Rousset.

Un semplice parser

Scriviamo una semplice applicazione per analizzare il formato GenePop e comprendere il concetto.

Scarica il file genePop fornito dal team di Biopython nel link indicato di seguito -https://raw.githubusercontent.com/biopython/biopython/master/Tests/PopGen/c3line.gen

Carica il modulo GenePop usando lo snippet di codice seguente -

from Bio.PopGen import GenePop

Analizza il file utilizzando il metodo GenePop.read come di seguito -

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

Mostra i luoghi e le informazioni sulla popolazione come indicato di seguito:

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

Qui sono disponibili tre loci nel file e tre gruppi di popolazione: la prima popolazione ha 4 record, la seconda popolazione ha 3 record e la terza popolazione ha 5 record. record.populations mostra tutti i gruppi di popolazione con dati sugli alleli per ogni locus.

Manipola il file GenePop

Biopython fornisce opzioni per rimuovere locus e dati sulla popolazione.

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

Interfaccia con il software GenePop

Biopython fornisce interfacce per interagire con il software GenePop e quindi espone molte funzionalità da esso. A tale scopo viene utilizzato il modulo Bio.PopGen.GenePop. Un'interfaccia così facile da usare è EasyController. Controlliamo come analizzare il file GenePop ed eseguire alcune analisi utilizzando EasyController.

Innanzitutto, installa il software GenePop e posiziona la cartella di installazione nel percorso di sistema. Per ottenere informazioni di base sul file GenePop, creare un oggetto EasyController e quindi chiamare il metodo get_basic_info come specificato di seguito -

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

Qui, il primo elemento è l'elenco della popolazione e il secondo elemento è l'elenco dei loci.

Per ottenere l'elenco di tutti gli alleli di un particolare locus, chiamare il metodo get_alleles_all_pops passando il nome del locus come specificato di seguito -

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

Per ottenere l'elenco degli alleli per popolazione e locus specifici, chiamare get_alleles passando il nome del locus e la posizione della popolazione come indicato di seguito -

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

Allo stesso modo, EasyController espone molte funzionalità: frequenza allelica, frequenza genotipo, statistiche F multilocus, equilibrio di Hardy-Weinberg, Linkage Disequilibrium, ecc.