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

时间:2016-08-13 20:32:29

标签: python numpy scipy data-analysis python-datetime

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

一个列表包含日期(称为 dateValues ),另一个列表包含销售(称为 saleNumbers )。我之前使用datetime.strptime提取了日期,如果我打印出 dateValues ,我会得到一系列任意长度的日期。

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

虽然这是销售清单:

saleNumbers = [3567,2348,1234,....etc]

但是当我这样做时

pearsonr(dateValues,saleNumbers)

我收到错误

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

在无休止地搜索之后,我发现可以使用 datetime.date 在日期之间进行算术运算。

所以我这样做了:

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

果然,给我30天的时差。

所以我接着尝试了这个:

pearsonr(datetime.date(dateValues [0]) - datetime.date(dateValues [29]),saleNumbers)

但是我得到了这个错误

TypeError: len() of unsized object

关于如何向前推进的任何想法?此外,我不认为 datetime.date(dateValues [0]) - datetime.date(dateValues [2])是找到相关性时处理日期列表的正确Pythonic方法。

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

2 个答案:

答案 0 :(得分:1)

首先将它们转换为数值:

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

Perason相关性不受任一轴(仿射变换)中的缩放或平移的影响

答案 1 :(得分:1)

您可以尝试这样的事情:

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