使用Python关联多个时间序列

时间:2016-11-22 18:27:14

标签: python pandas statistics

我有一个数据框,按两列分组" AvailbilityZone"和" InstanceType"如下所示。

enter image description here

我使用以下代码创建它:

#Create full time series and fill data
dfSorted = df.groupby(['AvailabilityZone', 'InstanceType'])
dfSorted = dfSorted.resample('H')
dfSorted = dfSorted.fillna("ffill")
dfSorted = dfSorted.dropna()

每个分组代表一个时间序列。我已经重新采样数据,以便所有时间序列每小时运行一次。如何运行相关性以找出每个时间序列彼此之间的相似程度?

当我使用时:

 dfSorted.corr()

它只返回SpotPrice = 1所以我假设我可能不得不使用类似循环的东西?并比较每个时间序列与另一个?我很失望,我很失望!

这是我的数据帧作为csv文件: https://www.dropbox.com/s/xgv8xm5n5o856mx/out.csv?dl=0

我只是使用了df.tocsv()

2 个答案:

答案 0 :(得分:1)

创建群组时,我假设您使用groupby。您可以先创建论坛:

groups = df.groupby(['whatever','grouping'])

然后你可以获得你想要关联的值的列表列表,我相信你的情况是SpotPrice。所以;

grouped_prices = [g['SpotPrice'].tolist() for i,g in groups]

numpy.corrcoef将列表列表作为输入,然后计算每个列表之间的相关性,并返回相关系数矩阵。请参阅:https://docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html

numpy.corrcoef(grouped_prices)

这是您的相关系数矩阵。

numpy.corrcoefpandas.DataFrame.corr会给您相同的结果,因为默认情况下它们都会计算Pearson相关系数。我选择使用numpy.corrcoef因为我认为在这种情况下它更容易。

此外,在使用Pearson Correlation之前,您应该知道它只测量变量之间的线性关系,并且还有一些假设您的数据必须满足才能使用它。例如,请参阅here

答案 1 :(得分:1)

我认为您遇到的主要问题是您正在错误地设置数据框的结构。 burhan所做的上述答案是将您的数据重组为列表。为了继续使用dataframe.corr()类,您需要的是数据中的以下结构:

table