Python爬虫武汉市二手房价格数据采集分析:Linear Regression、XGBoost和LightGBM|代码分享...

本文主要是介绍Python爬虫武汉市二手房价格数据采集分析:Linear Regression、XGBoost和LightGBM|代码分享...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

全文链接:http://tecdat.cn/?p=31958

分析师:Yan Liu

我国有大量的资金都流入了房地产行业,同时与其他行业有着千丝万缕的联系,可以说房地产行业对推动我国深化改革、经济发展、工业化和城市化具有不可磨灭的作用点击文末“阅读原文”获取爬虫代码)。

目前对于二手房交易价格的预测主要考虑的是房屋价格受宏观因素的影响,如国家政策、经济发展水平、人口数量等,并据此推测地区房价及其走势,很少有从微观的角度来准确预测每间房屋的价格。

相关视频

解决方案

任务/目标

从区位特征、房屋属性和交易指标3个角度,选取包括所属区域、建筑面积、楼层高度、周边银行数量、学校数量、电影院数量等在内的多维度特征,帮助客户来预测二手房的挂牌价格,实现基于数据的科学决策,做到一房一价的精准预测。

数据 获取

(1)在链家网上,武汉市区域被划分为15个区,共107个街道,每个页面展示30条房屋数据,通过翻页最多可以达到100页,即3000条数据。为了能尽可能保证抓取到链家上所有的数据查看文末了解爬虫代码免费获取方式,根据深度优先算法思想,采用先遍历区域,再遍历街道的遍历思路来设计爬虫。

b09e45907bf41c5c1ff00f0b5a5cfc6b.png

(2)周边配套设施,房屋所在小区的经纬度数据可以从网页源代码中获得,其关键词为:resblockPosition。通过调用百度地图API可以获得上图所示的周边配套设施数量,涵盖了交通、教育、医疗、购物、生活、文娱共6大类,19个特征变量。

209ab9a65d489094fce2becee70f6b2e.png

特征 预处理

(1)缺失值处理

通过对数据缺失值统计发现有8个变量存在缺失值:

49293bdd6055833fa07bed1f6e6a0fc9.png

分别使用剔除法、填充法来处理缺失值。houseStructure共有四种类型:平层、复式、错层、跃层。考虑到位于同一小区的房屋,其房屋类型大多相同,故采用此方法对缺失值进行填充:对于缺失houseStructure的房屋A,根据community_id(所属小区ID)统计出与A同小区的所有房屋,再统计出这些房屋的houseStructure的众数对A进行填充。buildingTypes、liftEquip和premisesOwnership采用和houseStructure同样的填充方法。propertyFee数据的缺失选择使用均值填充法。

分类变量的处理

对于分布极不均衡的分类变量予以剔除,对于其他分类变量做硬编码或独热编码处理

数值变量的处理

buildingTime:建成年代,数据格式均为年份(如:2018),处理方法为构造新的变量YearsDelta,其值等于2020年与其差值。

通过三σ法则剔除异常值。周边配套设施包含了一公里内的地铁站数量、幼儿园数量、医院数量等19个数值变量,通过绘制分布直方图发现不少变量的分布存在偏态。

9e439d84e0878934e5fa308c3e112016.png

分别予以剔除或是将数值变量转换为二分类变量。

数据变换

通过绘制变量分布图,发现totalBuildings、totalHouses、totalDeals和Yearsdelta呈现出较为明显的右偏分布,而呈现偏态分布的数据是不利于最终所构建模型的效果的,因此需要对这几个变量进行纠偏处理,采用的方法为Johnson变换。

4c7df2582fd14bd50e80f5fc36e8d9de.png

上述变量经过此方法处理前后分布对比图如下,显然,经过处理后的变量分布已近似于正态分布。

c33d9c1da784a472b7fa7c7ba53fc121.png


点击标题查阅往期内容

0fd95da64dbbe0afa1ef1bd96427bc4d.jpeg

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析

outside_default.png

左右滑动查看更多

outside_default.png

01

f73dc166a4623327b4af01724df57b15.png

02

0f959b014a34b6f208b4892bfa803f40.png

03

e2c3399645a238fd0e930c1c66c3eb49.png

04

7f325e0f713d31f1aa3362497c04d1cc.png

建模

分别建立Linear Regression模型、XGBoost模型和LightGBM模型,通过比较模型性能(评价指标使用MSE、MAE、R square)优劣,选出效果最佳的预测模型。

XGBoost和LightGBM模型的参数很多,参数取值不同,模型的性能也会有差别,因此需要对其主要参数进行调优,找出最佳参数组合。常用的调参方法为GridSearchCV(网络搜索法)和RandomizedSearchCV(随机搜索法),采用GridSearchCV进行参数调优。

XGBoost模型调优后的参数:

d9a1f4a64a4f26e9d73b129013256afd.png

LightGBM模型调优后的参数:

74421d42bb38b75302a4d3db1b302ea7.png

模型性能对比

房价预测问题是一个回归问题,属于监督学习范畴。对于所得到的模型,其对未知数据的泛化能力直接决定了模型的性能优劣。因此为了对比不同模型对于未知数据的表现效果,采用十折交叉验证进行模型验证。

三种模型的10折交叉验证在测试集性能评估:

fe8127decfbf9123bbb608dc6f2a17fb.png

三种模型在测试集上预测情况对比:

ff66bf249b160c7a8569cf995bbe7cd9.png

调参后的XGBoost模型和LightGBM模型训练出的各个特征的重要性打分排序对比:

1255ebaa59708fb0287775edff15b0be.png

可以看出,buildingArea特征重要性得分最高,与小区情况有关的5个变量得分都排在前列;与房屋属性相关的变量,如houseFloor、houseDecoration等,得分均位于中游,对房价的影响不大;属于房屋周边设施的变量,如subwayStation、park、stadium等,得分普遍都很低,对房价影响很小。

从区位特征、房屋属性和交易指标3个角度,从链家网上通过Python网络爬虫有针对性的获取武汉市二手房成交记录中的特征数据。对原始数据通过一系列预处理,运用机器学习中的XGBoost算法、LightGBM算法和GridSearchCV算法,对处理后的数据进行建模与参数调优。将两种模型在测试集上的预测效果与训练好的Linear Regression模型进行对比,XGBoost和LightGBM在预测效果上有着显著优势。通过XGBoost和LightGBM模型学习后的特征重要性得分可知,在三类因素中,房屋建筑面积对房价的影响最大,反映房屋所属小区情况的变量重要性得分均排在前列,而其他房屋自身属性、周边配套设施的变量对价格影响较小,与大众的直观感受基本吻合。

数据获取

在公众号后台回复“爬虫代码”,可免费获取完整爬虫代码。

775b21d226ca82761d2c4d67a05fc671.jpeg

本文中分析的爬虫代码分享到会员群,扫描下面二维码即可加群!

81cfef422c839ddcd8c15caaac8026bd.png

关于分析师

5beabc5dc94dea25bd470ac20af3901e.png

在此对Yan Liu对本文所作的贡献表示诚挚感谢,他擅长数据采集、机器学习、深度学习。

36371a299e5cd26ebd66fccfd4537c76.jpeg

点击文末“阅读原文”

获取全文完整代码数据资料。

本文选自《Python互联网大数据的武汉市二手房价格分析:Linear Regression模型、XGBoost模型和LightGBM模型》。

点击标题查阅往期内容

Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类

RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测

结合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络时间序列分析

深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据

用PyTorch机器学习神经网络分类预测银行客户流失模型

PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据

Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化

Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析

R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告

R语言深度学习:用keras神经网络回归模型预测时间序列数据

Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类

R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)

MATLAB中用BP神经网络预测人体脂肪百分比数据

Python中用PyTorch机器学习神经网络分类预测银行客户流失模型

R语言实现CNN(卷积神经网络)模型进行回归数据分析

SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型

【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析

Python使用神经网络进行简单文本分类

R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析

R语言基于递归神经网络RNN的温度时间序列预测

R语言神经网络模型预测车辆数量时间序列

R语言中的BP神经网络模型分析学生成绩

matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类

R语言实现拟合神经网络预测和结果可视化

用R语言实现神经网络预测股票实例

使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测

python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译

用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类

ce9311c745716ecffcb831a9d4bb1928.png

1bb47b17fcabb78b686de892055f9214.jpeg

d4936efea6a1256174afd246f77ff62d.png

这篇关于Python爬虫武汉市二手房价格数据采集分析:Linear Regression、XGBoost和LightGBM|代码分享...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/156026

相关文章

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

pandas数据的合并concat()和merge()方式

《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于... 目录concat() 轴向连接合并(1) join='outer',axis=0(2)join='o

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group