#!/usr/bin/env python # coding: utf-8 # - **Author:** 马肖 # - **E-Mail:** maxiaoscut@aliyun.com # - **GitHub:** https://github.com/Albertsr # ## 1 导出Boston数据集 # In[1]: import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from sklearn.datasets import load_boston pd.set_option('precision',3) sns.set(style="white", color_codes=True) dataset = load_boston() boston = np.c_[dataset.data, dataset.target] columns = list(dataset.feature_names) columns.append("MEDV") boston = pd.DataFrame(boston, columns=columns) boston.head() # ## 2 绘制部分特征的相关系数矩阵 # In[2]: cols = ['LSTAT', 'INDUS', 'NOX', 'RM', 'MEDV'] # 参数height用于设置每行的高度 sns.pairplot(boston[cols], height=2) # font_scale控制坐标字体的大小 sns.set(font_scale=1) plt.show() # ## 3 查看各特征的相关系数 # In[3]: # 等价于np.corrcoef(boston.values.T) # scipy.stats.pearsonr(X, y)中的X必须为单列的array,不方便 corr_df = pd.DataFrame(boston).corr() corr_df.head(5) # ## 4 根据相关系数的绝对值绘制热力图 # In[4]: plt.figure(figsize=(20, 10)) sns.set(font_scale=1.2) # annot_kws中的size用于设置相关系数字体的大小 # vmin=-1, vmax=1 sns.heatmap(corr_df, cbar=True, annot=True, square=True, cmap='RdBu_r', fmt='.3f', center=0, annot_kws={'size':12}, yticklabels=columns, xticklabels=columns) plt.show() # ## 5 对比pandas的corr函数提供的3种相关系数方式 # In[5]: MEDV_pearson = boston.corr()["MEDV"] MEDV_kendall = boston.corr("kendall")["MEDV"] MEDV_spearman = boston.corr("spearman")["MEDV"] corr_dict = {"MEDV_pearson":MEDV_pearson, "MEDV_kendall":MEDV_kendall, "MEDV_spearman":MEDV_spearman} corr_matrix = pd.DataFrame(corr_dict).sort_values(["MEDV_pearson"], ascending=False) corr_matrix # ### 返回相关系数绝对值不低于0.5的特征 # In[6]: corr_feartue = corr_matrix.index[corr_matrix["MEDV_pearson"].abs() >= 0.5].drop(["MEDV"]) corr_feartue