我是Python新手,我试图通过尝试执行一些计算来找到自己的方法(我可以在excel中轻松地完成它们,但现在我想知道如何用Python来实现)。
一种计算是协方差。我有一个简单的例子,我有3个项目出售,我们有每项24个月的需求。
在这里,您可以看到excel文件的快照:
目的是测量所有三个项目之间的协方差。因此,第一项和第二项、第三项和第二项、第三项和第三项之间的协方差。但是,我也想知道如何处理超过三个项目,比如说一千项。
计算如下:
首先,我必须计算每一项的平均数。通过执行以下代码,我已经找到了这一点:
在进口以下文件之后:
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):
应该做的下列计算是计算例如,第1项和第2项之间的协方差,这在数学上是这样做的:
(项目1的"1“栏-项目1的"avg”栏)*(项目2的"1“栏-项目2的"avg”栏)。对于"1“至" 24”栏必须这样做,所以24次。这应该将24列添加到文件df中。
在此之后,我们应该取这些列的平均值,它显示了第1项和第2项之间的协方差。因为我们必须这样做N-1次,所以在这种简单的情况下,我们应该有2个协方差数(对于第一项,第二项的协方差,第二项的协方差,第一项和第三项的协方差,与第一项和第二项的协方差)。
因此,第一个问题是:如何对这3项实现这一点,以便文件中有一列显示每个项的2个协方差结果(第一项应该有一个列,其中包含项目1和2的协方差数,第二列具有项1和3之间的协方差数,等等)。
第二个问题当然是:如果我有1000项,我如何有效地做到这一点,因为我有999个每个项目的协方差数,因此我有999个额外的列,但如果我通过上述方法计算它,也会增加999*25列。那么,如何对每个项目尽可能高效地执行此计算呢?
发布于 2018-11-23 08:25:36
熊猫有一个计算协方差矩阵的内置函数,但是首先你需要确保你的数据格式是正确的。数据中的第一列实际上包含行标签,因此让我们将它们放在索引中:
df = pd.read_excel("Directory\\Covariance.xlsx", index_col=0)然后,您也可以更容易地计算平均值,但不要把它放回您的数据!
avg = df.mean(axis=1)要计算协方差矩阵,只需调用.cov()。然而,这将计算成对的列的协方差,首先转换数据:
cov = df.T.cov()如果您愿意,可以将所有内容放在一个dataframe中:
df['avg'] = avg
df = df.join(cov, rsuffix='_cov')注:协方差矩阵包括与其本身的协方差=每项方差。
https://stackoverflow.com/questions/53442705
复制相似问题