Biopython
Phylo
#
Find similar titles
- 최초 작성자
- 최근 업데이트
Structured data
- Category
- Programming
Table of Contents
Bio.Phylo #
phylogentics #
Bio.Phylo는 Biopython의 모듈 중 하나로 계통분석을 하기위한 기능들이 구성되었다. 이 모듈은 Biopython/SeqIO, Biopython/AlignIO를 이용하여 분석한 파일을 이용하여 계통분석을 할 수 있다.
[ClustalW] 프로그램을 이용하면 .aln
, .dnd
파일이 생성된다. 파일을 열어 보면 newick format 이라고 불리우는 아래와 같은 형태의 데이터가 담겨 있다.
# newick format 예
(((A,B),(C,D)),(E,F,G));
여기에는 브랜치(branch)의 길이정보가 없고 라벨과 그룹핑정보만 있다. 이 파일을 이용하여 phylogenetic tree를 그리기 위해서는 아래 코드와 같이 작성하면 된다.
>>> from Bio import Phylo
>>> tree = Phylo.read("simple.dnd", "newick")
>>> print(tree)
Tree(rooted=False, weight=1.0)
Clade()
Clade()
Clade()
Clade(name='A')
Clade(name='B')
Clade()
Clade(name='C')
Clade(name='D')
Clade()
Clade(name='E')
Clade(name='F')
Clade(name='G')
from Bio import Phylo
클래스를 호출하고 Phylo.read("파일이름", "파일포맷형태")
로 읽어주고 출력한다. 여기서 Phylo.read()
로 읽어오는 파일이 newick 포맷파일 이다. print 해보면 간략한 정보를 확인할 수 있다.
트리를 아래와 같이 출력할 수도 있다. 실제 이미지를 생성하는 것은 아니지만 텍스트를 이용하여 그림처럼 보여준다. 이를 위해서 draw_ascii()
를 이용해서 그 대략적인 윤곽을 확인할 수 있다.
>>> from Bio import Phylo
>>> tree = Phylo.read("simple.dnd", "newick")
>>> Phylo.draw_ascii(tree)
___________A
______________|
| |___________B
______________|
| | ___________C
| |_____________ |
_| |___________D
|
| __________________________E
| |
|______________|__________________________F
|
|__________________________G
이미지 파일로 트리를 그리는 방법은 아래와 같다. Phylo.draw()
를 이용하면 실제 데이터를 분석하여 이미지로 변환하고 그 이미지를 볼 수 있다 (이미지 뷰어를 통해서)
>>> tree.rooted = True
>>> Phylo.draw(tree)
생성된 트리이미지는 다음과 같다.
coloring #
보이는 부분이 좀 밋밋해 보인다면 컬러를 지정해 줄 수 있다. 이를 위해서는 트리를 XML 포맷으로 만들어야 하는데 이를 위한 Biopython 모듈이 존재한다. Biopython/Bio.Phylo.PhyloXML이 바로 그것인데, 그중 그림을 그리기 위한 Phylogeny
를 사용하면 된다. 예제는 다음과 같다.
>>> from Bio.Phylo.PhyloXML import Phylogeny
>>> tree = Phylogeny.from_tree(tree)
그 후 트리에 컬러를 지정할 수 있는데 방법은 세 가지가 있다.
- RGB 값을 직접입력하는 것
- HTML 컬러코드를 이용하는 것
- 정의된 색의 명칭을 이용한는 것
아래 결과는 모두 gray 색으로 같다.
>>> tree.root.color = (128, 128, 128)
>>> tree.root.color = "#808080"
>>> tree.root.color = "gray"
각 노드, 즉 가지에서도 컬러를 지정할 수 있다.. 여기에서는 MRCA(the most recent common ancestor)를 정한다. 예제에서는 E, F를 가진 노드를 찾아서 mrca로 지정한다. 관련 함수는 common_ancestor()
이다. 이 안에 찾고자 하는 노드의 라벨명을 사전 형태의 리스트로 넣어주면 된다. 그 후 컬러를 지정해주면 된다.
>>> mrca = tree.common_ancestor({"name": "E"}, {"name": "F"})
>>> mrca.color = "salmon"
다음으로는 각 노드(clade)의 위치를 정확하게 알고 있다면 직접 입력해줘도 된다. 여기서는 인덱스 값을 사용한다. 아래 예제에서는 root를 기준으로 첫 번째와 두 번째를 지정하는 것이다.
>>> tree.clade[0, 1].color = "blue"
>>> Phylo.draw(tree)
그 후 트리를 그리면 된다. 이 후 수정이 된 내용은 저장되지 않기 때문에 별도로 저장해줘야 한다. 먼저 트리의 표준 출력을 이용하여 저장한다. write()
메서드를 이용하여 트리객체, 출력, 파일포맷의 세 인수를 넘겨주는데 포맷의 형태는 phyloxml로 지정해주면 된다.
>>> import sys
>>> Phylo.write(tree, sys.stdout, "phyloxml")
<phy:phyloxml xmlns:phy="http://www.phyloxml.org">
<phy:phylogeny rooted="true">
<phy:clade>
<phy:branch_length>1.0</phy:branch_length>
<phy:color>
<phy:red>128</phy:red>
<phy:green>128</phy:green>
<phy:blue>128</phy:blue>
</phy:color>
<phy:clade>
<phy:branch_length>1.0</phy:branch_length>
<phy:clade>
<phy:branch_length>1.0</phy:branch_length>
<phy:clade>
<phy:name>A</phy:name>
...
I/O Function #
먼저 트리 파일을 읽어보자. from Bio import Phylo
를 호출하고, Phylo.read()
메서드를 이용하면 된다. 인자로는 파일경로, 포맷이다. 보통 확장자가 nwk라고 하는 부분은 newick 포맷이라는 말이다. 그 후 트리를 출력하면 원하는 결과를 얻을 수 있다.
>>> from Bio import Phylo
>>> tree = Phylo.read("Tests/Nexus/int_node_labels.nwk", "newick")
>>> print(tree)
다음의 예제에서는 phyloxml 형태의 파일을 읽어 볼 수 있다.
>> trees = Phylo.parse("phyloxml_examples.xml", "phyloxml")
>>> for tree in trees:
... print(tree)
>>> trees = list(Phylo.parse("phyloxml_examples.xml", "phyloxml"))
>>> tree1 = trees[0]
>>> others = trees[1:]
>>> Phylo.write(tree1, "tree1.nwk", "newick")
1
>>> Phylo.write(others, "other_trees.nwk", "newick")
12
또한 다음과 같이 convert()
메서드를 이용하여 데이터 간 포맷을 변경하여 저장할 수 있다. 사용법은 (원본파일, 포맷, 변경파일, 포맷)의 형태로 써 주면 된다.
>>> Phylo.convert("tree1.nwk", "newick", "tree1.xml", "nexml")
1
>>> Phylo.convert("other_trees.xml", "phyloxml", "other_trees.nex", "nexus")
12