Python 中面板数据的相关矩阵
Correlation matrix for panel data in Python
我想为数据面板创建相关矩阵。数据框包含 11 年每月 15 个数值变量的数据。
如果可能的话,我想知道如何为此类数据帧的变量生成单个相关矩阵。
我想到的替代方案是每年生成一个相关矩阵,但我想知道如果年数非常大,是否可以为整个数据框只生成一个相关矩阵(这将使每年制作一个矩阵变得不可行)。
提前致谢。
IIUC,你主要是在寻找DataFrame的corr
方法。考虑这个例子:
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.rand(30, 5)).add_prefix("feature_")
df["year"] = np.repeat(["2012", "2013", "2014"], 10)
print(df.head()) # first 5 rows. Note that there are 30 rows
feature_0 feature_1 feature_2 feature_3 feature_4 year
0 0.548814 0.715189 0.602763 0.544883 0.423655 2012
1 0.645894 0.437587 0.891773 0.963663 0.383442 2012
2 0.791725 0.528895 0.568045 0.925597 0.071036 2012
3 0.087129 0.020218 0.832620 0.778157 0.870012 2012
4 0.978618 0.799159 0.461479 0.780529 0.118274 2012
子集你想要在 cormat 中的数字列(在这种情况下,我使用 .filter
只得到“feature_X”列)并使用 DataFrame.corr
:
cormat = df.filter(like="feature").corr()
print(cormat)
feature_0 feature_1 feature_2 feature_3 feature_4
feature_0 1.000000 0.004582 0.412658 0.269969 0.151162
feature_1 0.004582 1.000000 -0.200808 0.140620 -0.138652
feature_2 0.412658 -0.200808 1.000000 -0.019439 0.284211
feature_3 0.269969 0.140620 -0.019439 1.000000 -0.063653
feature_4 0.151162 -0.138652 0.284211 -0.063653 1.000000
如果你想得到一组其他变量的相关矩阵,你可以先使用.groupby
。
annual_cormat = df.groupby("year").corr()
print(annual_cormat)
feature_0 feature_1 feature_2 feature_3 feature_4
year
2012 feature_0 1.000000 0.359721 -0.266740 0.285998 -0.526528
feature_1 0.359721 1.000000 -0.330484 0.180620 -0.580236
feature_2 -0.266740 -0.330484 1.000000 0.262000 0.428895
feature_3 0.285998 0.180620 0.262000 1.000000 -0.144745
feature_4 -0.526528 -0.580236 0.428895 -0.144745 1.000000
2013 feature_0 1.000000 0.135499 0.704653 0.081326 0.453111
feature_1 0.135499 1.000000 -0.385677 0.732700 -0.065941
feature_2 0.704653 -0.385677 1.000000 -0.607016 0.143572
feature_3 0.081326 0.732700 -0.607016 1.000000 0.107971
feature_4 0.453111 -0.065941 0.143572 0.107971 1.000000
2014 feature_0 1.000000 -0.624004 0.056185 0.351376 -0.038286
feature_1 -0.624004 1.000000 0.103911 -0.284685 0.266124
feature_2 0.056185 0.103911 1.000000 0.249860 0.145773
feature_3 0.351376 -0.284685 0.249860 1.000000 -0.347361
feature_4 -0.038286 0.266124 0.145773 -0.347361 1.000000
我想为数据面板创建相关矩阵。数据框包含 11 年每月 15 个数值变量的数据。
如果可能的话,我想知道如何为此类数据帧的变量生成单个相关矩阵。
我想到的替代方案是每年生成一个相关矩阵,但我想知道如果年数非常大,是否可以为整个数据框只生成一个相关矩阵(这将使每年制作一个矩阵变得不可行)。
提前致谢。
IIUC,你主要是在寻找DataFrame的corr
方法。考虑这个例子:
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.rand(30, 5)).add_prefix("feature_")
df["year"] = np.repeat(["2012", "2013", "2014"], 10)
print(df.head()) # first 5 rows. Note that there are 30 rows
feature_0 feature_1 feature_2 feature_3 feature_4 year
0 0.548814 0.715189 0.602763 0.544883 0.423655 2012
1 0.645894 0.437587 0.891773 0.963663 0.383442 2012
2 0.791725 0.528895 0.568045 0.925597 0.071036 2012
3 0.087129 0.020218 0.832620 0.778157 0.870012 2012
4 0.978618 0.799159 0.461479 0.780529 0.118274 2012
子集你想要在 cormat 中的数字列(在这种情况下,我使用 .filter
只得到“feature_X”列)并使用 DataFrame.corr
:
cormat = df.filter(like="feature").corr()
print(cormat)
feature_0 feature_1 feature_2 feature_3 feature_4
feature_0 1.000000 0.004582 0.412658 0.269969 0.151162
feature_1 0.004582 1.000000 -0.200808 0.140620 -0.138652
feature_2 0.412658 -0.200808 1.000000 -0.019439 0.284211
feature_3 0.269969 0.140620 -0.019439 1.000000 -0.063653
feature_4 0.151162 -0.138652 0.284211 -0.063653 1.000000
如果你想得到一组其他变量的相关矩阵,你可以先使用.groupby
。
annual_cormat = df.groupby("year").corr()
print(annual_cormat)
feature_0 feature_1 feature_2 feature_3 feature_4
year
2012 feature_0 1.000000 0.359721 -0.266740 0.285998 -0.526528
feature_1 0.359721 1.000000 -0.330484 0.180620 -0.580236
feature_2 -0.266740 -0.330484 1.000000 0.262000 0.428895
feature_3 0.285998 0.180620 0.262000 1.000000 -0.144745
feature_4 -0.526528 -0.580236 0.428895 -0.144745 1.000000
2013 feature_0 1.000000 0.135499 0.704653 0.081326 0.453111
feature_1 0.135499 1.000000 -0.385677 0.732700 -0.065941
feature_2 0.704653 -0.385677 1.000000 -0.607016 0.143572
feature_3 0.081326 0.732700 -0.607016 1.000000 0.107971
feature_4 0.453111 -0.065941 0.143572 0.107971 1.000000
2014 feature_0 1.000000 -0.624004 0.056185 0.351376 -0.038286
feature_1 -0.624004 1.000000 0.103911 -0.284685 0.266124
feature_2 0.056185 0.103911 1.000000 0.249860 0.145773
feature_3 0.351376 -0.284685 0.249860 1.000000 -0.347361
feature_4 -0.038286 0.266124 0.145773 -0.347361 1.000000