1.各数值变量的相关性分析,绘制相关性矩阵的热力图,矩阵只是数值型
import seaborn as sns
corrmat = data_train.corr() ##corrmat是相关性矩阵
f, ax = plt.subplots(figsize=(20, 9))##绘制画布
sns.heatmap(corrmat, vmax=0.8, square=True) ##得到各特征图的热力图
像素块越红表示两者之间相关性越强,也可以查看corrmat变量查询具体数值。我们可以很清楚地看到与“SalePrice”相关性很强的有:
- OverallQual:总评价
- YearBuilt:建造年份
- ToatlBsmtSF:地下室面积
- 1stFlrSF:一楼面积
- GrLiveArea:生活区面积?
- FullBath:浴室?what。。。到底什么意思,知道的麻烦说一下
- TotRmsAbvGrd:总房间数(不包括浴室)
- GarageCars:车库可容纳车辆数
- GarageArea:车库面积
2.对非数值型变量预处理之后进行相关性分析
上面的矩阵只是数值型的,像Neighborhood这种离散型数据则没有参与计算,所以下面尝试着使用sklearn来对这些特征进行处理。
from sklearn import preprocessing
import matplotlib.pyplot as plt
import seaborn as sns
f_names = ['CentralAir', 'Neighborhood'] #'CentralAir', 'Neighborhood'这两列数据都不是数值型数据
##进行数值化之后进行处理
for x in f_names:
label = preprocessing.LabelEncoder()
data_train[x] = label.fit_transform(data_train[x])
corrmat = data_train.corr()
f, ax = plt.subplots(figsize=(20, 9)) ##绘制画布
sns.heatmap(corrmat, vmax=0.8, square=True)##绘制相关矩阵的热力图
3.显示和主变量相近的十个变量的关系矩阵
- annot: 默认为
False
,为True
的话,会在格子上显示数字 - vmax, vmin: 热力图颜色取值的最大值,最小值,默认会从
data
中推导
import matplotlib.pyplot as plt
import seaborn as sns
k = 10 # 关系矩阵中将显示10个特征
cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index ##显示和saleprice相近的十个关系变量矩阵
cm = np.corrcoef(data_train[cols].values.T)
sns.set(font_scale=1.25)
hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 10}, yticklabels=cols.values, xticklabels=cols.values)
plt.show()