如何为热图聚类 numpy 系数数组

Posted

技术标签:

【中文标题】如何为热图聚类 numpy 系数数组【英文标题】:How to cluster numpy array of coefficients for a heatmap 【发布时间】:2015-02-05 11:40:18 【问题描述】:

我正在尝试对 2D numpy 数组进行分层聚类,以便在将其绘制为 d3.js 中的相关矩阵时看起来不错。

我的数据如下所示:

[[ 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 和 1 之间的 Pearson 相关系数。如您所见,从数组的左上角到右下角的对角线上存在 1 比 1 的相关性。

如果我绘制这些值,我的相关矩阵如下所示:

聚类后我希望它与此有些相似,其中红色代表正相关,蓝色代表负相关:

使用 matplotlib 和 scipy,我可以对系数进行聚类,使其看起来像热图,但是,值发生了变化。我希望我的价值观保持不变。

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]

更新 如果有人知道R,我尝试执行的代码可能类似于this

【问题讨论】:

一个完整且最小的虚拟数据示例会很有帮助 【参考方案1】:

很抱歉没有给出完整的示例,但我找到了一种对数据进行聚类的方法,虽然不如我想要的那么好:

假设您有一个包含相关性和标题行的 csv 文件。您可以复制 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 中的相关值包含重复值,因此您必须反转数组的第二部分。

【讨论】:

以上是关于如何为热图聚类 numpy 系数数组的主要内容,如果未能解决你的问题,请参考以下文章

如何为 numpy 数组创建圆形掩码?

如何为numpy数组中的特定行和列分配字符串值?

如何将 numpy 数组存储在 Pandas 数据框的列中?

如何将 numpy 数组存储在 Pandas 数据框的列中?

ML之kmeans:通过数据预处理(分布图箱线图热图/文本转数字/构造特征/编码/PCA)利用kmeans实现汽车产品聚类分析(SSE-平均轮廓系数图/聚类三维图/雷达图/饼图柱形图)/竞品分析之详细

2 如何用Python进行数据计算