当前位置:  开发笔记 > 编程语言 > 正文

使用熊猫和scipy的树状图

如何解决《使用熊猫和scipy的树状图》经验,为你挑选了1个好方法。

我希望使用pandas和生成基于相关性的树形图scipy.我使用一个DataFrame由返回组成的数据集(作为a ),其大小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相关之外,我还想使用其他相关度量,这是一个pandas通过简单调用而引入的功能DataFrame.corr(method='').所以,我一开始认为只需运行以下代码即可

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_returns = np.random.normal(0, 0.01, size=(len(dates), m))

dataframe = pd.DataFrame(data=random_returns, index=dates)
corr = dataframe.corr() 

z = hc.linkage(corr.values, method='average')
dendrogram = hc.dendrogram(z, labels=corr.columns)
plt.show()

但是,如果我这样做,我会在y轴上得到奇怪的值,因为最大值> 1.4.然而,如果我运行第一个脚本,那就是1.我做错了什么?我使用了错误的指标hc.linkage吗?

编辑我可能会补充说树形图的形状完全相同.我是否必须将最终z值的第三列标准化?



1> Tingiskhan..:

找到了解决方案.如果您已经计算了距离矩阵(无论是相关性还是其他),您只需使用压缩矩阵即可distance.squareform.那是,

dataframe = pd.DataFrame(data=random_returns, index=dates)
corr = 1 - dataframe.corr() 

corr_condensed = hc.distance.squareform(corr) # convert to condensed
z = hc.linkage(corr_condensed, method='average')
dendrogram = hc.dendrogram(z, labels=corr.columns)
plt.show()

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有