예전에 공통 부모를 찾는 문제를 풀어야 했던 적이 있다.
그 당시에는 주어진 데이터를 데이터화 하는 단계에서 단순한 띄어쓰기 문제로 제대로 풀지 못했는데, 그때가 생각나서 검색을 해보니 데이터화 해주는 패키지가 있었다.
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 |
댓글