2014-12-07 4 views
1

d3.js의 상관 행렬로 그래프를 그릴 때 2D numpy 배열을 계층 적으로 클러스터링하려고합니다.히트 맵에 대해 계수의 numpy 배열을 클러스터하는 방법

내 데이터는 다음과 같습니다 : 나는 당신이 볼 수 있듯이 -1과 1 사이의 피어슨 상관 계수 이러한 계산

[[ 1. 0.091 0.147 ..., -0.239 0.113 -0.012 ] 
[ 0.091 1. -0.153 ..., -0.004 -0.244 -0.00520801] 
[ 0.147 -0.153 1. ..., -0.157 0.013 0.133] 
..., 
[-0.239 -0.004 -0.157 ..., -0.265 -0.362 1. ]] 

,의 왼쪽 상단에서 대각선 아래로 1 일에 상관 관계가있다 배열을 오른쪽 하단으로. 나는이 값을 그래프 경우

, 내 상관 행렬은 다음과 같습니다 클러스터링 후

correlation matrix before clustering

내가이 붉은 색에 postive 상관 관계 및 파란색을 나타내는 곳, 다소 유사 할 부정적인 상관 관계를 나타냅니다 : 나는 히트 맵과 같이 할 수있는 계수를 클러스터 할 수하기 matplotlib와 scipy를 사용

heat

그러나, 값이 변경됩니다 . 내 가치가 동일하게 유지되기를 바랍니다.

I used this answer to graph the heatmap in python, but its not quite what I want since it changes my values.. 내가 필요한 것은 데이터를 클러스터링하고 csv/json 파일에 출력하는 것입니다.

from scipy.spatial.distance import pdist, squareform 
from scipy.cluster.hierarchy import linkage, dendrogram 

data_dist = pdist(final_correlation, 'correlation') # If I use this, 
# it gives me an array that is half the size of my original correlation matrix. These are 
# the distances. How do I use this to re-order my correlation matrix as a clustered matrix? 


Out[1]: # The size is 9730, as opposed to the original size of 19,600 
[ 0.612 0.503 1.653 ..., 0.792 1.577 
0.829] 

UPDATE 사람이 R, 아마 같은 것을 보일 것이다 실행하기 위해 노력하고 코드를 알고있는 경우 this

+2

더미 데이터가 포함 된 완전한 예제는 큰 도움이 될 것입니다. – YXD

답변

1

죄송 완전한 예제를 제공하지만 데이터를 클러스터링하는 방법을 발견하지 않는 , 내가 원했던 것처럼 좋지는 않지만 :

상관 관계와 머리말 행이있는 csv 파일이 있다고 가정합니다. 당신이 반전 그래서 Imgur

csv로의 상관 값이 중복 값을 포함 :

import scipy.cluster.hierarchy as hc 
import pandas 
from matplotlib import pyplot 

# copy the data to the clipboard first 
d = pandas.read_clipboard(sep=",", index_col=0) 
d.columns = [int(x) for x in d.columns] 

link = hc.linkage(d.values, method='centroid') 
o1 = hc.leaves_list(link) 

mat = d.iloc[o1,:] 
mat = mat.iloc[:, o1[::-1]] 
pyplot.imshow(mat) 

이 이런 식으로 뭔가가 발생합니다 : 당신은이 코드를 CSV 파일의 내용을 복사 및 사용할 수 있습니다 배열의 두 번째 부분