本文用到的美国房屋数据:
链接:https://pan.baidu.com/s/1wrkzFF87A_Emgid_s7K3aA
提取码:2j77内含两个文件:
data_train.csv:训练集数据,包含房价等81个指标;
data_test.csv:测试集数据,不包含房价;
文章目录
前言
本篇文章研究的是影响房价的因素,数据是美国房屋数据,主要是通过分析各项指标的相关性,得出结论。
下一篇文章将是关于房价预测的相关内容。
一、数据预览
导入包:
import warnings
warnings.filterwarnings('ignore')
import numpy as np
import pandas as pd
import math
from scipy import stats
from scipy.stats import norm
import seaborn
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
%matplotlib inline
导入数据:
df_train = pd.read_csv('./data/data_train.csv',encoding='gbk')
df_train
显示81个指标,分别为住宅类型、地下室面积、屋顶类型、卧室数……
房价数据的分布:
打印各分位数和均值标准差,画出图像;
print(df_train['房价'].describe())
print("\nSkewness: %f" % df_train['房价'].skew())
print("Kurtosis: %f" % df_train['房价'].kurt())
myfont=FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf')
seaborn.set(font=myfont.get_name())
plt.figure(figsize=(16, 8),dpi=600)
plt.ylabel('频数')
plt.title('房价分布')
seaborn.distplot(df_train['房价'],kde=False,hist_kws={"label":"频数"})
plt.legend()
#kde=Ture画出概率密度图像,概率分布是概率密度的积分
图像为右偏,右边面积大,众数右侧的人数多就是右偏;
二、分析各指标与房价的相关性
1.主要指标与房价的相关性
1.1 居住面积
通过绘制散点图,观察到居住面积与房价大致成正比且相关性较强:
data = pd.concat([df_train['房价'], df_train['居住面积']], axis=1)
plt.figure(figsize=(16, 8),dpi=600)
seaborn.scatterplot(data['居住面积'],data['房价'])
1.2 地下室总面积
通过绘制散点图,观察到居住面积与房价大致成正比,有些房屋没有地下室:
data = pd.concat([df_train['房价'], df_train['地下室总面积']], axis=1)
plt.figure(figsize=(16, 8),dpi=600)
seaborn.scatterplot(data['地下室总面积'],data['房价'])
1.3 材料和质量
材料和质量是按照等级划分的,通过箱线图的展示,可以看到质量越高房价也越高;
箱线图从上到下的五条横线分别代表最大值,四分之三分位数、中位数、四分之一分位数和最小值。剩余的点是离群点。离群点是指比Q3大1.5倍的IQR(Q3-Q1)和比Q1小1.5倍的IQR的值。
data = pd.concat([df_train['房价'], df_train['材料和质量']], axis=1)
plt.figure(figsize=(16, 8),dpi=600)
seaborn.boxplot(data=data,x='材料和质量', y="房价")
1.4 所在街区
作箱线图,查看街区与房价的关系,不同街区的房子价格差异明显。
data = pd.concat([df_train['房价'], df_train['街区']], axis=1)
plt.figure(figsize=(16, 8),dpi=600)
plt.xticks(rotation=90)
seaborn.boxplot(data=data,x='街区', y="房价" )
1.5 施工日期
查看原施工日期与房价之间的关系,随原施工日期的变化,房价呈现两头高中间低的趋势。
# 拼接两列
data = pd.concat([df_train['房价'], df_train['原施工日期']], axis=1)
plt.figure(figsize=(16, 8),dpi=600)
# 横坐标90度旋转
plt.xticks(rotation=90)
# 绘制“房价”,“施工日期”箱线图
seaborn.boxplot(data=data,x='原施工日期', y="房价")
2. 查看各指标间的相关性(热力图)
通过热力图的展示,查看所有数值型特征之间的相关性,可以进行相关性对比,颜色越深相关性越强,指标与自身的相关性都是1,可以看到一楼面积、二楼面积、地下室面积间的相关性比较强,从热力图中可以分析出很多结果,例如:房价与材料和质量相关性强,与厨房数量相关性低。
corrmat = df_train.corr()
plt.figure(figsize=(16, 8),dpi=600)
plt.rcParams['axes.unicode_minus'] = False
#去除负号前面的小方框
seaborn.heatmap(corrmat,square=True,cmap='YlGnBu',xticklabels=True,yticklabels=True)
或许观察颜色并不很方便,所以直接把相关性数值标上去,更加直观;
从上述特征中,找出与房价的相关系数排名靠前的10个特征,画出这10个特征之间的热力图:
k = 10
cols = corrmat.nlargest(k, '房价')['房价'].index
cm = np.corrcoef(df_train[cols].values.T)
plt.figure(figsize=(16, 8),dpi=600)
hm = seaborn.heatmap(cm, annot=True, square=True, fmt='.2f', annot_kws={'size': 7},
yticklabels=cols.values, xticklabels=cols.values,cmap='YlGnBu')
上述结果:材料质量,居住面积,车库车位数量等特征与房价有较强的相关性。
总结
本文进行了一些可视化,通过图像查看指标间的相关性,可以分析出一些结果,接下来我会继续基于此数据集,进一步分析数据并进行房价预测。