본문 바로가기
etc

Common ancestor

by wycho 2022. 1. 24.

예전에 공통 부모를 찾는 문제를 풀어야 했던 적이 있다.

그 당시에는 주어진 데이터를 데이터화 하는 단계에서 단순한 띄어쓰기 문제로 제대로 풀지 못했는데, 그때가 생각나서 검색을 해보니 데이터화 해주는 패키지가 있었다.

 

PRONTO

- https://github.com/althonos/pronto

- https://buildmedia.readthedocs.org/media/pdf/pronto/latest/pronto.pdf

 

문제) 두 샘플 아이디가 주어졌을 때, 가장 낮은 depth의 공통 부모를 찾아라.

 

from pronto import Ontology
import sys

try:
    hp1 = sys.argv[1]
    hp2 = sys.argv[2]
except:
    hp1 = 'HP:0001166'
    hp2 = 'HP:0011300'

fname = 'hp.obo'
ms = Ontology.from_obo_library(fname)

hpl1 = list()
hpl2 = list()

for a in ms[hp1].superclasses(): hpl1.append(a.id)
for a in ms[hp2].superclasses(): hpl2.append(a.id)

hps1 = set(hpl1)
hps2 = set(hpl2)
hps = hps1.intersection(hps2)

nr = 100
ancestor = ''

for smp in hps:
    n = hpl1.index(smp) + hpl2.index(smp)
    if n < nr:
        ancestor = smp
        nr = n

print(ancestor) # HP:0001167

'etc' 카테고리의 다른 글

[DB] SQL with python  (0) 2022.05.31
Markdown guide  (0) 2022.03.09
Read table data with Parquet  (0) 2021.10.18
pandas - Merge, join, concatenate and compare  (0) 2021.10.08
TCGA data  (0) 2021.08.30

댓글