测量几行的协方差

时间:2018-11-23 08:01:30

标签: python pandas statistics covariance

我是Python的新手,我试图通过尝试执行一些计算来找到自己的方式(我可以在excel中轻松地进行计算,但是现在我想知道如何在Python中进行计算)。

一种计算是协方差。 我有一个简单的示例,其中有3件商品被出售,而每件商品的需求量为24个月。

在这里,您会看到excel文件的快照:

Items and their demand over 24 months

目标是测量所有三个项目之间的协方差。因此,项目1和2、1,项目3和2和3之间的协方差。但是,我也想知道如何对3个以上的项目(比如说上千个项目)进行处理。

计算如下:

首先,我必须计算每个项目的平均值。通过执行以下代码,已经发现了这一点:

导入以下内容后:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

我导入了文件:

df = pd.read_excel("Directory\\Covariance.xlsx")

并计算出每行的平均值:

x=df.iloc[:,1:].values
df['avg'] = x.mean(axis=1)

这会给文件增加一列,即平均值(avg):

Items, their demand and the average

下面应该进行的计算是计算项目1和项目2之间的协方差。在数学上,该协方差如下:

(项目1的第1列“ avg”的列“ 1”)*(项目2的第2列“ avg”的列“ 1”)。必须对列“ 1”至“ 24”进行24次。这应在文件df中添加24列。

此后,我们应该取这些列的平均值,并显示项目1和2之间的协方差。因为我们必须进行N-1次,所以在这种简单情况下,我们应该有2个协方差数(对于第一项,与项目2和3的协方差,第二项,与项目1和3的协方差,第三项,与项目1和2的协方差。

第一个问题是;如何为这3个项目实现此目标,因此文件中的列显示每个项目2个协方差结果(第一个项目应具有一列,其中项目1和2为协方差数,第二列为项目之间的协方差数1和3,依此类推...)。

第二个问题当然是:如果我有1000件物品怎么办?然后我该如何有效地执行此操作,因为这样我每项就有999个协方差数,因此,如果我通过上述方法计算得出,则有999个额外的列,但是还有999 * 25列。那么,如何对每个项目进行尽可能高效的计算呢?

1 个答案:

答案 0 :(得分:0)

Pandas具有一个内置函数来计算协方差矩阵,但是首先您需要确保数据框的格式正确。数据中的第一列实际上包含行标签,因此我们将其放在索引中:

df = pd.read_excel("Directory\\Covariance.xlsx", index_col=0)

然后,您也可以更轻松地计算均值,但请不要将其放回数据框中!

avg = df.mean(axis=1)

要计算协方差矩阵,只需调用.cov()。但是,这会计算列的成对协方差,以首先对数据帧进行转置:

cov = df.T.cov()

如果需要,可以将所有内容放到1个数据框中:

df['avg'] = avg
df = df.join(cov, rsuffix='_cov')

请注意:协方差矩阵包括自身的协方差=每个项目的方差。