Python Pandas 相关矩阵

Python Pandas Correlation Matrix

给定一个数据框“df”,我试图打印一个相关矩阵来显示上三角,这样它就不会显示重复的相关系数。我只想输出相关系数为 +/- 0.7 或更大的相关系数。

命令:

# Define correlation matrix
cor_matrix = df.corr().abs()

# Upper triangle of correlation matrix
upper_tri = cor_matrix.where(np.triu(np.ones(cor_matrix.shape),k=1).astype(np.bool))
print(upper_tri)

输出:

               price  bedrooms  bathrooms  sqft_living  sqft_lot    floors  \
price            NaN  0.318373   0.526308     0.701579  0.088422  0.256794   
bedrooms         NaN       NaN   0.532335     0.592354  0.029548  0.184539   
bathrooms        NaN       NaN        NaN     0.754604  0.087124  0.495209   
sqft_living      NaN       NaN        NaN          NaN  0.168363  0.355316   
sqft_lot         NaN       NaN        NaN          NaN       NaN  0.005682   
floors           NaN       NaN        NaN          NaN       NaN       NaN   
waterfront       NaN       NaN        NaN          NaN       NaN       NaN   
view             NaN       NaN        NaN          NaN       NaN       NaN   
condition        NaN       NaN        NaN          NaN       NaN       NaN   
grade            NaN       NaN        NaN          NaN       NaN       NaN   
sqft_above       NaN       NaN        NaN          NaN       NaN       NaN   
sqft_basement    NaN       NaN        NaN          NaN       NaN       NaN   
yr_built         NaN       NaN        NaN          NaN       NaN       NaN   
yr_renovated     NaN       NaN        NaN          NaN       NaN       NaN   
zipcode          NaN       NaN        NaN          NaN       NaN       NaN   
sqft_living15    NaN       NaN        NaN          NaN       NaN       NaN   
sqft_lot15       NaN       NaN        NaN          NaN       NaN       NaN   

               waterfront      view  condition     grade  sqft_above  \
price            0.266369  0.092607   0.036362  0.667434    0.605567   
bedrooms         0.004450  0.022115   0.024955  0.369402    0.492133   
bathrooms        0.068855  0.039679   0.123293  0.664220    0.684384   
sqft_living      0.107053  0.067329   0.059371  0.763833    0.875966   
sqft_lot         0.021173  0.008187   0.009154  0.111713    0.181152   
floors           0.023698  0.022721   0.263768  0.458183    0.523885   
waterfront            NaN  0.006540   0.016653  0.082775    0.072075   
view                  NaN       NaN   0.019697  0.048944    0.021839   
condition             NaN       NaN        NaN  0.144674    0.158214   
grade                 NaN       NaN        NaN       NaN    0.755923   
sqft_above            NaN       NaN        NaN       NaN         NaN   
sqft_basement         NaN       NaN        NaN       NaN         NaN   
yr_built              NaN       NaN        NaN       NaN         NaN   
yr_renovated          NaN       NaN        NaN       NaN         NaN   
zipcode               NaN       NaN        NaN       NaN         NaN   
sqft_living15         NaN       NaN        NaN       NaN         NaN   
sqft_lot15            NaN       NaN        NaN       NaN         NaN   

               sqft_basement  yr_built  yr_renovated   zipcode  sqft_living15  \
price               0.180230  0.054012      0.126092  0.053203       0.585379   
bedrooms            0.164041  0.161578      0.020543  0.159061       0.404490   
bathrooms           0.166565  0.504844      0.050453  0.205309       0.569378   
sqft_living         0.202806  0.319783      0.056751  0.199637       0.756901   
sqft_lot            0.034901  0.052165      0.009096  0.131311       0.145112   
floors              0.256560  0.489319      0.006260  0.059121       0.279885   
waterfront          0.037227  0.026161      0.093294  0.030285       0.086463   
view                0.087539  0.034053      0.033574  0.043251       0.076880   
condition           0.135577  0.361417      0.060139  0.003026       0.092824   
grade               0.051838  0.446963      0.014008  0.184862       0.713202   
sqft_above          0.210991  0.423898      0.023178  0.261190       0.731870   
sqft_basement            NaN  0.167902      0.049004  0.162968       0.043830   
yr_built                 NaN       NaN      0.225195  0.346869       0.326229   
yr_renovated             NaN       NaN           NaN  0.064335       0.002755   
zipcode                  NaN       NaN           NaN       NaN       0.279033   
sqft_living15            NaN       NaN           NaN       NaN            NaN   
sqft_lot15               NaN       NaN           NaN       NaN            NaN   

               sqft_lot15  
price            0.082447  
bedrooms         0.026450  
bathrooms        0.089010  
sqft_living      0.181697  
sqft_lot         0.728800  
floors           0.011269  
waterfront       0.030703  
view             0.009125  
condition        0.003406  
grade            0.119248  
sqft_above       0.194050  
sqft_basement    0.040733  
yr_built         0.070958  
yr_renovated     0.007920  
zipcode          0.147221  
sqft_living15    0.183192  
sqft_lot15            NaN  

有没有办法打印值为 +/- 0.7 或更高的相关矩阵?


更新df.iloc[:6,:6].to_dict()

的输出
{'date': {0: Timestamp('2014-10-13 00:00:00'),
  1: Timestamp('2014-12-09 00:00:00'),
  2: Timestamp('2015-02-25 00:00:00'),
  3: Timestamp('2014-12-09 00:00:00'),
  4: Timestamp('2015-02-18 00:00:00'),
  5: Timestamp('2014-05-12 00:00:00')},
 'price': {0: 221900.0,
  1: 538000.0,
  2: 180000.0,
  3: 604000.0,
  4: 510000.0,
  5: 1225000.0},
 'bedrooms': {0: 3.0, 1: 3.0, 2: 2.0, 3: 4.0, 4: 3.0, 5: 4.0},
 'bathrooms': {0: 1.0, 1: 2.25, 2: 1.0, 3: 3.0, 4: 2.0, 5: 4.5},
 'sqft_living': {0: 1180.0,
  1: 2570.0,
  2: 770.0,
  3: 1960.0,
  4: 1680.0,
  5: 5420.0},
 'sqft_lot': {0: 5650.0,
  1: 7242.0,
  2: 10000.0,
  3: 5000.0,
  4: 8080.0,
  5: 101930.0}}

您可以使用掩码隐藏低于阈值的值,dropna清除空白rows/columns:

(cor_matrix
 .mask(cor_matrix.abs().lt(0.7))
 .dropna(how='all')
 .dropna(how='all', axis=1)
)

输出(我只使用了 col/rows 到 "floors" 作为例子):

           sqft_living
price         0.701579
bathrooms     0.754604

作为一维输出的另一个选项:

m1 = np.triu(np.ones(cor_matrix.shape).astype(bool))
m2 = cor_matrix.abs().ge(0.7)

cor_matrix.where(m1&m2).stack()

输出:

price      sqft_living    0.701579
bathrooms  sqft_living    0.754604
dtype: float64