我有一个包含历史股票数据的数据框,如下所示:
股票名称 | 价格 | 时间戳 |
---|---|---|
库存_a | 35.6 | 2024-01-01 |
库存_a | 34.7 | 2024-01-02 |
库存_b | 56.7 | 2024-01-01 |
库存_b | 55 | 2024-01-02 |
我的数据库中有最多 500 只股票,我想计算 stock_a 和所有其他股票(例如 stock_b、股票 c、股票 d...)之间的相关性及其在时间间隔内的价格价值。
我希望得到这样的结果:
Stock_A相关性
股票名称 | 相关性 |
---|---|
库存_b | 0.87 |
库存_c | 0.76 |
现在我只能一一指定除股票以外的每只股票来计算相关性(以 PostgreSQL 为例):
select stock_b, corr(d1.close_price, d2.close_price)
from stock_dmt d1
inner join stock_dmt d2
on d1.time_stamp = d2.time_stamp
where d1.stock_code = 'stock_a' and d2.stock_code = 'stock_b';
但是,对于超过 500 只股票,手动执行此操作是不可能的。
有什么有效的方法来完成这个任务吗?欢迎使用 SQL 或 Python 脚本。
谢谢你
我正在尝试用 python 来做。我希望这种方式能够满足您的问题。
import pandas as pd
# Creating a sample data
data = {
"stock_name": ["stock_a", "stock_a", "stock_b", "stock_b"],
"price": [35.6, 34.7, 56.7,55],
"time_stamp": ["2024-01-01", "2024-01-02", "2024-01-01", "2024-01-02"]
}
# Create the DataFrame from the dictionary
df = pd.DataFrame(data)
# Convert to the pivot table
df_pivot = df.pivot(index = 'time_stamp',columns=["stock_name"], values="price").reset_index()
# If you can drop the column timestamp
df_pivot.drop(['time_stamp'], axis = 1).corr()