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就是这样一个易于使用的接口。让我们看看如何使用EasyController解析GenePop文件并做一些分析。
首先,安装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平衡、联结不平衡等。