当一个列表包含日期值时,如何找到两个列表之间的相关性?

2024-10-01 07:12:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着每30天用scipy的pearsonr函数计算两个列表之间的相关性。在

一个列表包含日期(称为dateValues),另一个列表包含销售额(称为saleNumbers)。我已经用日期时间.strptime前面,如果我打印出日期值,我会得到一个任意长度的日期范围。在

datetime.datetime(2016, 8, 12, 0, 0), datetime.datetime(2016, 8, 11, 0, 0), datetime.datetime(2016, 8, 10, 0, 0)...etc

下面是销售清单:

^{pr2}$

但是当我这么做的时候

pearsonr(dateValues,saleNumbers)

我知道错误了

TypeError: unsupported operand type(s) for +: 'datetime.datetime' and 'datetime.datetime'

经过无休止的搜索,我发现人们可以使用日期时间.日期在日期之间做算术运算。在

所以我这样做了:

print(datetime.date(dateValues[0]) - datetime.date(dateValues[29]))

当然,这给了我30天的时间差。在

所以我试了一下:

皮尔逊(日期时间.日期(日期值[0])-日期时间.日期(日期值[29]),销售数字)

但是我得到了这个错误

TypeError: len() of unsized object

有什么办法让我继续下去吗?我也不认为日期时间.日期(日期值[0])-日期时间.日期(dateValues[2])是在查找相关性时处理日期列表的正确python方法。在

PS:在这张图片中,是一个Excel电子表格,显示了我已经完成的工作,但是试图用Python复制:http://i.imgur.com/0Fj36Al.jpg


Tags: 函数列表datetimedate错误时间scipy我会
2条回答

你可以试试这样的方法:

import numpy as np
pearsonr(np.array(dateValues, dtype=np.datetime64).astype("int"), np.array(saleNumbers))

先将它们转换为数值:

arbitrary_date = datetime(1970,1,1)
pearsonr([(d - arbitrary_date).total_seconds() for d in dateValues], saleNumbers)

Perason关联不受任何轴上缩放或平移的影响(仿射变换)

相关问题 更多 >