我正在嘗試分析國家證券交易所數據。我想用熊貓計算每隻股票與指數(漂亮)的協方差,然後在那裏計算每隻股票的β。我該怎麼辦呢?我想查找1列與熊貓數據框中所有其他列之間的協方差
我找到了計算1列與另一列的協方差的方法,但我的數據框有大約36個股票收盤價格欄和1個指數收盤欄。我怎樣才能用一個命令來計算索引列的所有列的協方差?
我正在嘗試分析國家證券交易所數據。我想用熊貓計算每隻股票與指數(漂亮)的協方差,然後在那裏計算每隻股票的β。我該怎麼辦呢?我想查找1列與熊貓數據框中所有其他列之間的協方差
我找到了計算1列與另一列的協方差的方法,但我的數據框有大約36個股票收盤價格欄和1個指數收盤欄。我怎樣才能用一個命令來計算索引列的所有列的協方差?
您首先需要計算價格的回報(您正在使用調整後的收盤價,對嗎?)。
returns = df.pct_change()
接下來,你計算的協方差爲一系列(我使用字典解析來創建系列):
index = 'SPY' # Change to your ticker for the index.
s = pd.Series({symbol: returns[index].cov(returns[symbol])
for symbol in df
if symbol != index})
這會給你每隻股票的協方差與指數。
要使用beta = cov(ri,rm)/var(rm)
來計算貝塔值,您可以使用pandas的DataFrame.cov
作爲分子。
下面的示例假定DataFrame的索引包含日期,由to_datetime()
生成。市場指數是CRSP的vwret
,但任何其他市場指數也可以。
get_year = lambda x: x.year
by_year = returns.groupby(get_year) # for yearly betas
def betas(returns, market):
b=returns.cov()/returns[market].var() # generates cov matrix
return(pd.Series(b[market], index=list(returns))) # index includes the stock names
beta=betas(returns, 'vwretd')
函數的最後一行只選擇協方差矩陣的「市場」列。此列包含測試版。
下面這行代碼每年都會生成beta,但我知道一個通常需要60個月的窗口。
by_year.apply(betas, 'vwretd')