使用Python关联多个时间序列
我有一个数据框,它由两列“AvailabilityZone”和“InstanceType”组成,如下所示 我使用以下代码创建此文件:使用Python关联多个时间序列,python,pandas,statistics,Python,Pandas,Statistics,我有一个数据框,它由两列“AvailabilityZone”和“InstanceType”组成,如下所示 我使用以下代码创建此文件: #Create full time series and fill data dfSorted = df.groupby(['AvailabilityZone', 'InstanceType']) dfSorted = dfSorted.resample('H') dfSorted = dfSorted.fillna("ffill") dfSorted = df
#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文件的数据帧:
我只是在创建组时使用了df.tocsv(),我假设您使用的是
groupby
。您可以先创建组:
groups = df.groupby(['whatever','grouping'])
然后你可以得到你想要关联的值的列表,我相信在你的例子中这是SpotPrice
。所以,
grouped_prices = [g['SpotPrice'].tolist() for i,g in groups]
numpy.corrcoef
将列表列表作为输入,然后计算每个列表之间的相关性,并返回相关系数矩阵。见:
这是你的相关系数矩阵
numpy.corrcoef
和pandas.DataFrame.corr
应该给出相同的结果,因为默认情况下它们都计算Pearson
相关系数。我选择使用numpy.corrcoef
,因为我认为在这种情况下更容易
此外,在使用Pearson相关性之前,您应该知道它只测量变量之间的线性关系,并且您的数据必须满足某些假设才能使用它。请参阅示例。创建组时,我假设您使用的是
groupby
。您可以先创建组:
groups = df.groupby(['whatever','grouping'])
然后你可以得到你想要关联的值的列表,我相信在你的例子中这是SpotPrice
。所以,
grouped_prices = [g['SpotPrice'].tolist() for i,g in groups]
numpy.corrcoef
将列表列表作为输入,然后计算每个列表之间的相关性,并返回相关系数矩阵。见:
这是你的相关系数矩阵
numpy.corrcoef
和pandas.DataFrame.corr
应该给出相同的结果,因为默认情况下它们都计算Pearson
相关系数。我选择使用numpy.corrcoef
,因为我认为在这种情况下更容易
此外,在使用Pearson相关性之前,您应该知道它只测量变量之间的线性关系,并且您的数据必须满足某些假设才能使用它。请参阅示例。我认为您面临的主要问题是数据帧的结构设置不正确。burhan的上述回答所做的是将数据重组为列表。要继续使用
dataframe.corr()
类,您需要的是数据中的以下结构:
我认为您面临的主要问题是数据帧的结构设置不正确。burhan的上述回答所做的是将数据重组为列表。要继续使用
dataframe.corr()
类,您需要的是数据中的以下结构:
请发布您的数据框示例,我们可以使用pd.read_clipboard()导入该示例(或创建该示例的代码片段)以及所需/预期的输出。@JulienMarec我已编辑并添加了一个指向我的数据框的链接,作为csv下载!后df.head()output@Boud上面的图像就是,我使用了group by函数,这就是返回的内容。请发布一个数据帧示例,我们可以使用pd.read_clipboard()导入它(或创建它的代码片段)以及所需/预期的输出。@JulienMarrec我已经编辑并添加了一个链接到我的数据框,作为csv下载!后df.head()output@Boud上面的图片就是,我使用了按函数分组,这就是返回的结果。我很抱歉,我没有意识到我在如何创建分组的假设中还剩下多少。我遇到了一个ValueError:太多的值无法解包(预期为2个),但您的答案肯定是正确的,我们将继续讨论,看看我能得到什么。只需尝试制作一个SpotPrice的列表,并将其输入到
numpy.corrcoef
中,我很抱歉,我没有意识到我还有多少时间来进行假设,我包括了关于如何创建组的代码。我遇到一个ValueError:太多的值无法解包(预期为2个),但是你的答案肯定是正确的,我们会继续玩下去,看看我能得到什么。试着把SpotPrice
的列表列出来,然后输入numpy。corrcoef
这正是问题的症结所在。我很高兴我很晚才找到答案,哈哈。祝你好运!这正是问题的症结所在。我很高兴我能在晚些时候找到答案。祝你好运!