我有一个数据框,按两列分组" AvailbilityZone"和" InstanceType"如下所示。
我使用以下代码创建它:
#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()
答案 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.corrcoef
和pandas.DataFrame.corr
会给您相同的结果,因为默认情况下它们都会计算Pearson
相关系数。我选择使用numpy.corrcoef
因为我认为在这种情况下它更容易。
此外,在使用Pearson Correlation之前,您应该知道它只测量变量之间的线性关系,并且还有一些假设您的数据必须满足才能使用它。例如,请参阅here。
答案 1 :(得分:1)