다음의 예제는 Clustering기법을 최근 주목받는 DnaMicroArray 실험해석에 적용한 예이다. 이러한 SubsetsOfBioinformatics 외에도 많은 분야에서 사용되고 있슴을 상기하기 바란다.

실험 : 시간별 대장균 유전자 발현패턴을 알기 위해 DnaMicroArray실험. 대장균 시료를 2분간격으로 샘플링하여 총 16개의 유전자를 올려놓은 칩에 놓고 분석한다.


위 실험을 통해 얻을 수 있는 데이타는 각 유전자의 발현정량정도(수치데이타). 따라서 다음과 같은 matrix를 얻을 수 있다.

위(10 * 16) matrix를 가지고 실제 시간대별 발현양상이 비슷한 유전자끼리 Clustering할 수 있다.


Average linkage method(UPGMA)는 각각의 유전자를 순서에 상관없는 모든 조합에 대해 pair하고 이들 사이의 EuclideanDistance를 구한다. 그리고 가장 작은 쌍을 골라낸뒤, 그값의 평균을 취하고 그 두값을 버린 후 위의 과정을 반복한다.


yong27은 위 과정을 파이썬으로 프로그래밍해보았습니다. 물론 초보가 짠거라 말그대로 허접이지만, 오픈소스의 장점을 살려... 여기서 진화하는 코드가 되었스면 좋겠네요. TreeView까지 해서 Dendrogram까지 그림이미지로 좌악 보여주었으면 좋겠는데, 만만치가 않아서... 지금 PIL 모듈로 노가다하는 중입니다. (이것도 좀 쉽게 할수 있는 방법이 없을까요?)

현재 코드는 Clustering된 후의 마지막 Tree구조를 튜플형식(a,(b,c))으로 프린트해주고 각 연결노드간의 Distance를 사전형식으로 프린트합니다.

소스 Cluster.py


Cluster.py를 만드는데 있어서, Python사전에서 각 value들이 실수값들일때 가장 작은 실수값을 갖는 key,value쌍찾기가 넘 오래걸린다. 현재로선

   1 def minValInDict(aDict): 
   2     minVal=1000000; minKey='' 
   3     for key,value in aDict.iteritems(): 
   4         if value < minVal: 
   5             minVal=value; minKey=key 
   6     return minKey, minVal 

이 가장 빨리 계산하나, 그래도 늦는건 마찬가지다. 어떤 방법이 필요할까 하다가 PythonKoreaUserGroup질문. Perky씨가 대답해주었다. 새로운 것들을 많이 배우네... FibonacciHeap, HeapQueueAlgorithm등등...

물론 다른계산들이 포함되있긴 하나. 기존의 사전(아이템 6만개)으로 44초걸렸던걸, FibHeap써서 37초... 아직 좀 갈길이 멀다. 문제는 다른곳에???

--yong27, 2003-02-11


PIL 모듈을 다운받아서 써 봤는데 재밌네요. 생각보다 느리지도 않고.. destine, 2003-01-23

ClusteringExample (last edited 2012-06-26 11:05:07 by 61)