如何为热图聚类 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 数组存储在 Pandas 数据框的列中?
如何将 numpy 数组存储在 Pandas 数据框的列中?
ML之kmeans:通过数据预处理(分布图箱线图热图/文本转数字/构造特征/编码/PCA)利用kmeans实现汽车产品聚类分析(SSE-平均轮廓系数图/聚类三维图/雷达图/饼图柱形图)/竞品分析之详细