主要来源 Kaggle 上的一个入门挑战 房价预测 房价预测
https://www.kaggle.com/c/house-prices-advanced-regression-techniques
房价预测
数据了解
数据导入—— 了解特征列 ——影响最大的列与目标列y作图 —— 相关性最大的10个特征并做热图 —— 特征间的散点图
import pandas as pd
import warnings
warnings.filterwarnings("ignore")
#控制警告器,忽略警告
train = pd.read_csv('https://labfile.oss.aliyuncs.com/courses/1363/HousePrice.csv')
train
#读取数据
train.head() #前5条数据
train.tail() #最后5份数据
train.shape#查看数据的形状
train.columns #查看列名
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#将matplotlib的图表直接嵌入到Notebook之中
color = sns.color_palette()
#调色盘,设置默认颜色
sns.set_style('darkgrid')
#seaborn.set_style(style=None, rc=None)
#这里style可选参数值有:darkgrid,whitegrid,dark,white,ticks
#设置不同的背景风格
下面做占地面积与房价的散点图
fig, ax = plt.subplots()
#绘制散点图
#plt.subplots()是一个返回包含图形和轴对象的元组的函数
ax.scatter(x=train['GrLivArea'], y=train['SalePrice'])
#给出x,y轴数据
plt.ylabel('SalePrice', fontsize=13)
plt.xlabel('GrLivArea', fontsize=13)
#x,y轴标签
#散点图其他语句:legend添加图例,xlim设置x轴刻度范围,title标题
plt.show() #画出图像
散点图发现存在异常值,做异常值处理,直接drop删掉
train_drop = train.drop(
train[(train['GrLivArea'] > 4000) & (train['SalePrice'] < 300000)].index)
#再做一次图
fig, ax = plt.subplots()
ax.scatter(train_drop['GrLivArea'], train_drop['SalePrice'])
plt.ylabel('SalePrice', fontsize=13)#fontsize是标签大小
plt.xlabel('GrLivArea', fontsize=13)
plt.show()
做完图,给一个结论:从图显示的结果可以看出,占地面积与房价大致呈线性相关关系。也就是说,面积越大,房价越高。
分析重要指标xi对y的影响,数值x则做x与y的散点图,类别x则做与y的箱线图。所以下面做质量指标’OverallQual’与房价的箱线图
data = pd.concat([train_drop['SalePrice'], train_drop['OverallQual']], axis=1)
#pd.concat指将数据拼接到一起,将列SalePrice与列OverallQual拼接到一起
#axis=0 表拼接方式是上下堆叠,当axis=1表示左右拼接,默认值是0
# 画出箱线图sns.boxplot
f, ax = plt.subplots(figsize=(8, 6))
#plt.subplots()是一个返回包含图形和轴对象的元组的函数,figsize给出了图像长宽
fig = sns.boxplot(x='OverallQual', y="SalePrice", data=data)
#seaborn.boxplot做箱线图,给xy命名,给数据集
fig.axis(ymin=0, ymax=800000)
#设置纵坐标刻度范围
结论: OverallQual 的等级越高,也就是房子的材料和质量越好,房价越高。
上面先挑了两个重要的x,分别研究了与y的关系图后,后面通过热图来分析所有特征之间的相关性以及与房价的关系
统计跟我目标变量最有联系的前10个指标,统计热图sns.heatmap
import numpy as np
k = 10
corrmat = train_drop.corr()