线性回归预测北京房价

  • 数据准备
  • 数据清洗
  • 可视化
  • 构建模型并预测

数据准备

数据来源:kaggle链接
官方提供的数据集,来源自链家网站2011-2017年的交易信息

数据清洗

#首先将数据导入,因为格式的问题,此处选择encoding = 'iso-8859-1'
train = pd.read_csv('beijing_house_train.csv', encoding = 'iso-8859-1')#训练集
test = pd.read_csv('beijing_house_test.csv', encoding = 'iso-8859-1')#测试集
#观察数据
train.head(5)
print('The data size is : {} '.format(train.shape))


从数据中可以看到25k+条的数据集中,每条包括26个特征值,大致归类如下
url 网址
id 交易编号
Lng 经度
Lat 纬度
Cid 小区编号
tradeTime 成交时间
DOM 上架时间-从委托出售到成交的时间
followers 关注度
totalPrice 成交总价
price 成交单价
square 面积
livingRoom 卧室数量
drawingRoom 客厅数量
kitchen 厨房数量
bathRoom 卫生间数
floor 所在楼层
buildingType 建筑类型,包括塔楼,平房,板塔结合,板楼 constructionTime 建造时间
renovationCondition 装修情况,包括其他,毛坯,简装,精装
buildingStructure 建筑结构类型,包括不确定,混合,砖木,砖混,钢
ladderRatio 户梯比例,电梯数量除以住户数量
elevator 有无电梯
fiveYearsProperty 是否满五年
subway 是否地铁沿线
district 所在行政区
communityAverage 本小区均价

train.dtypes
#观察特征值类型,tradeTime应当是int

train.isnull().sum().sort_values(ascending=False)
#统计缺省值


有DOM、constructionTime、buildingType、communityAverage、elevator、fiveYearsProperty、floor、livingRoom、subway、bathRoom存在缺失情况

#大量缺失的DOM用均值填充
train['DOM'].fillna(train['DOM'].dropna().mean(0), inplace=True)
test['DOM'].fillna(test['DOM'].dropna().mean(0), inplace=True)
#test数据集也需进行相关处理
#tradeTime是2000/01/01格式的,先转化成datatime即2000-01-01格式,再分别提出数字的三个部分构成年月日
train['tradeyear'] = train['tradeTime'].astype('datetime64[ns]').astype(str).str[0:4].astype('int64')
train['trademon'] = train['tradeTime'].astype('datetime64[ns]').astype(str).str[5:7].astype('int64')
train['tradeday'] = train['tradeTime'].astype('datetime64[ns]').astype(str).str[8:].astype('int64')
train = train.drop('tradeTime', axis = 1)#最后将已处理的tradeTime去除
train['constructionTime'] = train['constructionTime'].fillna(train['tradeyear'] - train['DOM']/365)
train['constructionTime'] = train['constructionTime'].astype('int64')
#用售出的年份减去上架的时间当做建造时间
train['bathRoom'] = train['bathRoom'].fillna(0)
train['subway'] = train['subway'].fillna(0)
train['fiveYearsProperty'] = train['fiveYearsProperty'].fillna(0)
train['elevator'] = train['elevator'].fillna(0)
train['livingRoom'] = train['livingRoom'].fillna(0)
#房间等特征值的缺失就当做没有,用0填充
train['buildingType'] = train['buildingType'].fillna(train['buildingType'].mode().iloc[0])
train['communityAverage'] = train['communityAverage'].fillna(train['communityAverage'].median())
train['floor'] = train['floor'].fillna(train['floor'].median())
#buildingType用众数填充,floor和communityAverage用中间值填充
train.isnull().sum().sort_values(ascending=False)
#查看缺省值填充后的情况,已经没有空缺了

可视化

plt.xlim([-0.5, 2500])
sns.distplot(train['totalPrice'])
#观察总价,一套房子普遍在500w以下

sns.distplot(train['price'])
#观察每平米单价分布,从0-15w都有分布,主要集中在2w-7w左右

price_by_year = train.groupby('tradeyear').price.mean()
sns.lineplot(data = price_by_year)
#根据年份列出房价均值,10年前房价处于平稳阶段,经过10年的下跌后就一直处于飞速增长的趋势

sns.distplot(a = train['square'],kde=False)
#观察所有房子面积分布情况,主要集中在50-200平之间,符合正常房型的面积

sns.scatterplot(x = train['square'], y = train['followers'])
#观察followers侧重多大的房子,绝大多数都是在关注250平以下的房子,在100平以下出现了极高值,这说明对于绝大多数人还是只能承受一套较小的房子

plt.figure(figsize=(5,5))
sns.scatterplot(x = train['Lng'], y = train['Lat'], hue = train['price'])
#绘制房价分布的地理图,市中心房价极高,从天安门向外递减飞快

sns.distplot(a = train['livingRoom'], kde=False, label='livingRoom_Num')
sns.distplot(a = train['drawingRoom'], kde=False, label='drawingRoom_Num')
plt.xlim(-0.5, 6)
plt.xlabel('Room_Num')
plt.ylabel('House_Num')
plt.legend()
#观察房子的客厅卧室数量情况,大致还是以两室一厅为主,存在多卧的情况,但是不会有多客厅

f,ax = plt.subplots(figsize=(25, 25))
sns.heatmap(train.corr(), annot = True, linewidth = .5, fmt = ".3f",ax = ax)
plt.show()
#绘制所有特征值的相关性图,挑选与总价关系较大的因素
train = train.drop(['url', 'id', 'Cid', 'Lng', 'Lat', 'kitchen', 'bathRoom', 'buildingType', 'constructionTime', 'ladderRatio', 'fiveYearsProperty', 'district', 'trademon', 'tradeday'], axis=1)
#去除无关因素,剩余followers、renovationCondition 、subway 、communityAverage、tradeyear

构建模型并预测

#将准备好的train数据4:1划分成训练集和测试集
X = train.drop(['totalPrice'], axis = 1)
y = train['totalPrice']
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=7)
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression(normalize=True)
lin_reg.fit(X_train,y_train)
pred = lin_reg.predict(X_test)
results = append_results("Linear Regression",  LinearRegression(), results, y_test, pred)
results#在划分的训练集上进行拟合并测试

pre_results = pd.DataFrame()
model = LinearRegression(normalize=True)
model.fit(X, y)
pred = model.predict(test)
pre_results = pre_append_results("Linear Regression",  LinearRegression(), pre_results, pre_y, pred)
pre_results#通过训练train对test进行预测,test的真实价格可以通过单价*面积得到


本文展示代码只用了线性回归,使用时可以选择多种方式进行预测,通过对比不同方式的效果选择最合适的model,最终房价预测误差在6k+左右

北京房价预测——线性回归相关推荐

  1. python北京房价预测_python分析——2018北京房价降了吗

    数据来源:python 爬取的链家官网二手房交易数据 数据量:有效数据约30万条,包含信息:'行政区','片区', '小区', '格局', '面积', '楼层', '建成年代', '建成年', '楼体 ...

  2. 2.24波斯顿房价预测线性回归

  3. 2月24作业波斯顿房价预测线性回归

  4. 房价预测Python

    房价预测包括以下几个部分:导入数据.数据的预处理.求梯度 题目要求: 1.影响房价的因素:面积.房间数 2.利用梯度下降法,求出预测函数t=x1*w1+x2*w2+b 这个是我写的代码,我对于这个题的 ...

  5. 项目1: 波士顿房价预测

    第一步. 导入数据 在这个项目中,你将利用马萨诸塞州波士顿郊区的房屋信息数据训练和测试一个模型,并对模型的性能和预测能力进行测试.通过该数据训练后的好的模型可以被用来对房屋做特定预测---尤其是对房屋 ...

  6. 深度学习经典入门项目—波士顿房价预测

    目录 房价预测--线性回归 数据处理 数据形状变换 数据集划分 数据归一化处理 housing.data数据格式 模型设计 线性回归模型设计 训练配置 训练过程 保存并测试模型 保存模型 测试模型 房 ...

  7. 基于多元线性回归的房价预测

    基于多元线性回归的房价预测 摘要 市场房价的走向受到多种因素的影响,通过对影响市场房价的多种因素进行分析,有助于对未来房价的走势进行较为准确的评估. 多元线性回归适用于对受到多因素影响的数据进行分析的 ...

  8. 机器学习(11)线性回归(2)实战 -- 正规方程优化、梯度下降优化(波士顿房价预测)

    目录 一.波士顿房价预测(正规方程优化) API 1.获取数据集 2.划分数据集 3.标准化 4. 创建预估器,得到模型 5.模型评估(均方差评估) 代码 二.波士顿房价预测(正规方程优化) API ...

  9. 【机器学习入门】(8) 线性回归算法:正则化、岭回归、实例应用(房价预测)附python完整代码和数据集

    各位同学好,今天我和大家分享一下python机器学习中线性回归算法的实例应用,并介绍正则化.岭回归方法.在上一篇文章中我介绍了线性回归算法的原理及推导过程:[机器学习](7) 线性回归算法:原理.公式 ...

  10. 线性回归之案例:波士顿房价预测

    线性回归之案例:波士顿房价预测 数据介绍   [13个特征值,1个目标值] 给定的这些特征,是专家们得出的影响房价的结果属性.此阶段不需要自己去探究特征是否有用,只需要使用这些特征.到后面量化很多特征 ...

最新文章

  1. 河北高速盘点七大假牌假证违法案例:寒冬穿大裤衩开车
  2. 使用BeautifulSoup爬虫
  3. C# selecd,new,virtual,abstract与override
  4. 超全的Android组件及UI框架
  5. poj 2390 Bank Interest(计算本利和)
  6. 第二十二篇:Spring简单定时任务
  7. 不小心把硬盘摔了一下,结果电脑变成这样了......
  8. esp8266 micropython oled_micropython(4):使用ESP8266 控制 oled 屏幕,并显示 helloworld 字符...
  9. Centos 7 RabbitMQ + Haproxy 集群高可用部署
  10. 春运车票为谁“秒空”?第三方软件的困与危
  11. 求n!中末尾零的个数
  12. 【WinCE版凯立德】2012春季版地图下载
  13. 2018最新--Win10屏幕亮度无法调节问题的解决方法
  14. java题库管理考试管理源码,基于jsp的题库管理系统-JavaEE实现题库管理系统 - java项目源码...
  15. qt bianyishiliechengxu cube
  16. 如何修改host文件
  17. KGB知识图谱能够为公司分析上市影响因素
  18. 263企业邮箱:客户端授权码登录
  19. scala either_使用Either和Option处理功能错误
  20. python数组求和_python数组求和

热门文章

  1. sqlplus命令支持上、下翻功能
  2. storm32云台说明书_STorM32 BGC三轴云台控制板电机驱动电路设计(驱动芯片DRV8313)
  3. c语言三个人的象棋,强悍,300多行实现中国象棋人机对战
  4. Axure原型图 时间跳动 计时动画效果
  5. STM32F407概述
  6. Linux常用命令和Vi编辑器操作
  7. 大学生自学网python_大学生免费自学网官网
  8. 用pandas对分类变量作统计
  9. 基于FPGA的DS18B20数字温度传感器测温实例
  10. 对外汉语语料库有哪些_国内外有哪些比较好的语料库?(corpora)