我希望使用pandas
和scipy
生成基于相关性的树状图。我使用一个包含返回值的数据集(如DataFrame
),其大小为n x m
,其中n
是日期数,m
是公司数量。然后我简单地运行脚本
import pandas as pd
import matplotlib.pyplot as plt
from scipy.cluster import hierarchy as hc
import numpy as np
m = 5
dates = pd.date_range('2013-01-01', periods=365)
random_matrix = np.random.normal(0, 0.01, size=(len(dates), m))
dataframe = pd.DataFrame(data=random_matrix, index=dates)
z = hc.linkage(dataframe.values.T, method='average', metric='correlation')
dendrogram = hc.dendrogram(z, labels=dataframe.columns)
plt.show()
我得到了一个很好的树状图。现在,除了普通的Pearson相关性之外,我还想使用其他相关度量,Pearson相关性是一个通过简单调用DataFrame.corr(method='<method>')
而包含在pandas
中的特性。所以,我一开始以为它只是运行下面的代码
但是,如果我这样做,我会在y轴上得到奇怪的值,作为最大值>;1.4。但是如果我运行第一个脚本,大约是1。我做错什么了?我在hc.linkage
中使用了错误的度量吗?在
编辑我可以补充说,树状图的形状完全相同。是否必须用最大值规范化结果z
的第三列?在
找到了解决办法。如果您已经计算了一个距离矩阵(不管是相关性还是其他什么),您只需使用
distance.squareform
来压缩矩阵。也就是说相关问题 更多 >
编程相关推荐