Biopython-population-genetics

提供:Dev Guides
移動先:案内検索

Biopython-集団遺伝学

集団遺伝学は進化論において重要な役割を果たします。 種と同じ種内の2人以上の個体間の遺伝的差異を分析します。

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

ここで、ファイルには3つの遺伝子座と3つの母集団があります。最初の母集団には4つのレコード、2番目の母集団には3つのレコード、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モジュールは、この目的に使用されます。 このような使いやすいインターフェイスの1つが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'])
>>>

ここで、最初の項目は母集団リストであり、2番目の項目は遺伝子座リストです。

特定の遺伝子座のすべての対立遺伝子リストを取得するには、以下に指定されているように遺伝子座名を渡すことにより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平衡、連鎖不平衡など。