Biopython - 种群遗传学

种群遗传学在进化论中起着重要作用。 它分析物种之间以及同一物种内两个或多个个体之间的遗传差异。

Biopython 提供了用于群体遗传学的 Bio.PopGen 模块,主要支持`GenePop,这是一个由 Michel Raymond 和 Francois Rousset 开发的流行的遗传学包。


一个简单的解析器

让我们编写一个简单的应用程序来解析 GenePop 格式并理解其中的概念。

在下面给出的链接中下载 Biopython 团队提供的 genePop 文件 −https://raw.githubusercontent.com/biopython/biopython/master/Tests/PopGen/c3line.gen

使用以下代码片段加载 GenePop 模块 −

from Bio.PopGen import GenePop

使用 GenePop.read 方法解析文件,如下所示 −

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

如下所示显示基因座和种群信息 −

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

这里,文件中有三个位点和三组人口:第一人口有 4 条记录,第二人口有 3 条记录,第三人口有 5 条记录。 record.populations 显示所有人口集以及每个基因座的等位基因数据。


操作 GenePop 文件

Biopython 提供了删除基因座和种群数据的选项。

移除一个按位置设置的种群,

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

按位置移除一个轨迹,

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

按名称删除轨迹,

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

与 GenePop 软件的接口

Biopython 提供与 GenePop 软件交互的接口,从而从中公开许多功能。 Bio.PopGen.GenePop 模块用于此目的。 EasyController 就是这样一种易于使用的界面。 让我们检查如何解析 GenePop 文件并使用 EasyController 进行一些分析。

首先,安装GenePop软件,将安装文件夹放在系统路径下。 要获取有关 GenePop 文件的基本信息,请创建一个 EasyController 对象,然后调用如下指定的 get_basic_info 方法 −

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

这里第一项是种群列表,第二项是位点列表。

要获取特定基因座的所有等位基因列表,请通过传递下面指定的基因座名称来调用 get_alleles_all_pops 方法 −

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

要按特定种群和基因座获取等位基因列表,请通过传递基因座名称和种群位置来调用 get_alleles,如下所示 −

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

同样,EasyController 提供了许多功能:等位基因频率、基因型频率、多位点 F 统计、Hardy-Weinberg 平衡、连锁不平衡等。