1. 查看数据的基本信息
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
path = r"D:\python\course\Aurelien Geron\housing.xlsx"
data = pd.read_excel(path)
print(data.head())
print(data.shape)
print(data.info())
从上图可以看到总登记房屋消息有20640条,而总卧室数量的条目数比其他项目少了7条,说明有7行空缺。
# 查看一下每列数据中有多少缺省值
print(data.isnull().sum(axis=0))
2. 根据data.corr() 绘制heatmap
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
path = r"D:\python\course\Aurelien Geron\housing.xlsx"
data = pd.read_excel(path)
print(data.head())
# 查找关联度, corr()函数会自动忽略掉字符串列“ocean_proximity”
corr_matrix = data.corr()
print(corr_matrix)
plt.figure(figsize=(15, 10))
ax = sns.heatmap(data.corr(), cmap=plt.cm.RdYlGn, annot=True, fmt=".2f", annot_kws={
'size':18})
plt.legend(prop={
"size":18})
# 设置刻度字体大小
plt.xticks(fontsize=18)
plt.yticks(fontsize=18)
# 可手动调整y轴的范围来进行修复。(老版本的Matplotlib不需要调整y轴范围。)
a, b = ax.get_ylim()
ax.set_ylim(a + 0.5, b - 0.5)
plt.show()
从这个heatmap上可以看出来:
- 人口和家庭数的Pearson相关系数高度相关(达到0.98);
- 而总的卧室数目和家庭数目的Pearson相关系数也高度相关(高达0.88);
- 人口和总房间数的相关系数的正相关性也挺高(0.86);
- 而最关心的房价中位数和收入中位数的相关系数最高(0.69)。
因此我们想重点看一年房价中位数和收入中位数间更详细的关系。
先使用不设置alpha值的散点图查看房价中位数和收入中位数的关系(左图),可以看到散点太稠密,堆叠在一起,很看看清楚细节。而右边的图将alpha值设为0.1后,可以看到收入中位数和房价中位数间更加细致的对应关系。而pyplot 中的参数alpha 是负责颜色透明度的,值介于[0, 1]: 1表示不透明,0表示透明。
data.plot(kind='scatter', x='median_income', y='median_house_value'