python - 以有效的方式计算一百万对的相关性
问题描述
我如何在合理的时间内计算两个产品价格的两个时间序列的相关性?我有一套产品长度为 8485。可能的组合大约是 3600 万对。每个产品都是一个带有时间戳索引(以天为单位)和价格值的熊猫系列。数据时间约为1年。
比如某产品的数据是这样的:
price
2020-01-01 200
2020-01-02 250
... ...
2021-02-01 600
我将数据保存在具有产品 id 的元组中:
products = tuple((id_products, series_products)) = ((111, series_product_111), (222, series_product_222), ...)
len(products) = 8485
我需要在嵌套循环中对每种产品的价格进行最大互相关(我使用 pandas shift 函数来交叉数据,使用 pandas corr 函数来计算相关性)。为此,我创建了一个包含所有可能的索引组合 (35M) 的列表,称为 list_products。
list_products= [(i,j) for i in range(len(products)) for j in range(len(products)) if i<j]
另一方面,时间序列有不同的大小,所以为了计算相同时间长度的相关性,我创建了一个名为 -subset_datatime- 的函数
correlation = list()
for i,j in list_products:
series_1, series_2 = subset_datatime(products[i][1], products[j][1])
correlation.append([ series1.corr(series2.shift(t)) for t in range(-10,10)],
products[i][0],
products[j][0]))
不幸的是,这在我的计算机上最多可能需要 3 天。有没有更有效的方法来实现它?