gpt4 book ai didi

python - 使用 pandas 和 scipy 的树状图

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:49 25 4
gpt4 key购买 nike

我希望使用 pandas 生成基于相关性的树状图和 scipy .我使用一个由 yield 组成的数据集(作为 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 相关性之外,我还想使用其他相关性度量,这是一个包含在 pandas 中的功能。通过简单地调用 DataFrame.corr(method='<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有最大值吗?

最佳答案

找到解决方案。如果您已经计算了一个距离矩阵(无论是相关性还是其他),您只需使用 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()

关于python - 使用 pandas 和 scipy 的树状图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34175462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com