Python上的关联
我有以下数据帧:Python上的关联,python,pandas,correlation,Python,Pandas,Correlation,我有以下数据帧: StockId Date Value 1 2015-01-02 -0.070012 2 2015-01-02 -0.022447 4 2015-01-02 -0.011474 6 2015-01-02 0.003796 13 2015-01-02 -0.032061 ... 355 2018-09-14 -0.035717
StockId Date Value
1 2015-01-02 -0.070012
2 2015-01-02 -0.022447
4 2015-01-02 -0.011474
6 2015-01-02 0.003796
13 2015-01-02 -0.032061
...
355 2018-09-14 -0.035717
356 2018-09-14 -0.007899
357 2018-09-14 0.065217
358 2018-09-14 0.063536
359 2018-09-14 -0.023433
我在寻找股票之间随时间的相关性,以便找到与股票1最相关的五只股票。有没有一种使用熊猫的快速方法?或者这需要创建数组,然后逐个计算相关性吗?数据框中有359只股票。假设您的数据框为长格式,每天对每只股票进行一次估值,则可以使用该函数将其重塑为宽格式。指定
Date
作为新数据帧的索引,并指定StockID
作为列。如果您的数据采样次数超过每天,则可以将aggfunc
参数指定为min/max/avg或您认为适合您的应用程序的任何其他参数。如果采样的数据少于每日采样,则仍然可以运行代码,但请注意相关性将基于一些空值
注意:我只是说每天,因为这是你的表似乎意味着什么
从那里可以使用查看相关矩阵
df = df.pivot(index='Date', columns='StockID')
df.columns = df.columns.droplevel() # Convert multi-index to single index
print(df)
# StockID a b c
# Date
# 1/10/2020 0.956625 0.175345 0.999375
# 1/11/2020 0.458859 0.714604 0.995440
# 1/12/2020 0.603331 0.881022 0.215262
# 1/13/2020 0.584198 0.303796 0.332117
matrix = df.corr()
print(matrix)
# StockID a b c
# StockID
# a 1.000000 -0.680290 0.305365
# b -0.680290 1.000000 -0.336229
# c 0.305365 -0.336229 1.000000
从这里开始,您可以遍历每一行,按值对行进行排序,然后您将得到一个按最强相关性排序的dict
for stock, corr in matrix.to_dict().items():
corr = {
k: v for k, v
in sorted(corr.items(), key=lambda item: -item[1])
if k != stock
}
print(stock, corr)
# a {'c': 0.30536503121224934, 'b': -0.6802897760166712}
# b {'c': -0.3362290204607999, 'a': -0.6802897760166712}
# c {'a': 0.30536503121224934, 'b': -0.3362290204607999}
或者,如果你想要更直观的对比
plt.matshow(matrix)
plt.colorbar()
plt.show()
前几行是否缺少一列?数据帧似乎从3列跳到4列。如果是,可以更新列标题。另外,您的数据帧的形状是什么?抱歉-没有遗漏列,我只是省略了索引。形状大约是2555x3。遗憾的是,我没有每天对每只股票估价一次。当我运行命令时,我得到:“列中没有任何['StockID']。我注意到我的代码中的
StockID
在你的代码中是StockID
。股票估值的频率是高于一天还是低于一天?pivot函数有一个可以使用的aggfunc
参数。如果我只想从相关矩阵中可视化一只股票,如何替换print(stock,corr)命令?这取决于你想如何可视化它。如果您已经对数据进行了透视,则可以执行df[[stock\u id]].plot()
假设您已导入matplotlib
,然后可以使用plt.show()
谢谢!如果我只想从相关矩阵中看到一只股票(股票1)(看看它与其他股票的相关性),我该怎么做?矩阵[[1]]不工作。