基于python机器学习 Django的二手房交易预测及展示系统 完整代码+报告文档

简介: 基于python机器学习 Django的二手房交易预测及展示系统 完整代码+报告文档

一、项目目的及意义


项目的目的是在采集自贝壳二手房交易平台的成都市二手房成交数据的基础上,对数据进行处理和挖掘,以网站为载体实现二手房交易分析、卖方价格预测和买方房屋推荐三个主要功能。


二手房交易分析功能服务于统计人员,对成都的二手房交易做完整的统计分析,使用折线图、散点图、饼图等展示属性间的关系,提供交互功能,可以对成都市行政区划地图进行点选,展示不同区的具体信息并选择不同的区进行对比。


卖方价格预测功能服务于卖方,通过用户提供的二手房的各种属性预测其成交价,为二手房交易中的卖方提供一个参考值,使卖方对于自己房子的价格有一个较为准确的估计,并在地图上标记房子。


买方房屋推荐功能服务于买方,通过买方选取的各个属性可接受的范围,为买方列出可以选择的二手房范围,在地图上进行标记,使买方在购房前有一个心理预期。


二、技术路线

这是预计的技术路线图:

8c77a458ae3ec7644edb56895fd73111.png



以下为实际技术路线以及部分关键节点:


10-15


确定选择的原始数据集为成都二手房交易信息列表,对原始数据集的字段进行了分析和初步筛选


10-17


制定了初步的技术路线图


10-18


明确了要实现的目标为:买方、卖方预测系统;可视化页面


10-19


确定了使用网页的形式来完成我们的系统并进行展示


10-25


对数据进行了初步预处理,使用正则表达式、数值化等方式得到了经过第一次预处理的数据集


10-26


使用回归决策树的方式,基于十个特征对房价进行了预测,得到了合理的平均误差和方差。


10-27


开始使用经过第一次预处理的数据集进行可视化工作


11-02


进一步确定了可视化的具体展示形式


11-03


使用爬虫获取了时间数据


11-06


使用爬虫和百度地图API获取了地址和经纬度数据


11-11


发现爬取的地址存在一定格式上的问题,重新进行了处理,并找到和删除了部分异常数据,并进行了相关性分析,得到相关性的热力图。得到第三次预处理后的数据集


11-18


实现可视化页面点击中央大地图展示周围子图的功能。实现卖方、买方预测页面的底层功能。


11-19


实现网页后端


11-21


完成网页前端


11-22


对聚类进行了分析实践,对不同分类预测算法进行了评估,选择了效果最好的预测算法。


总结:


通过整个项目的实践,我们亲身体会了数据挖掘的那张路线图,预处理、分析之后发现问题(Knowledge),再进行新的处理,再重新分析挖掘,做评估,然后发现新的问题,再从头开始,在这几个过程的循环往复中完成了整个项目。


三、研发情况

3.1 数据预处理


数据集描述


我们采用的数据集为采集自贝壳二手房交易平台的成都的二手房成交信息列表。数据集中一共有 20001 条数据,原始数据集每条数据有 14 个字段。


该原始数据集的 14 个字段中存在 2 个字段与内容无关/无效,存在 2 个字段需要深入获取信息,另外部分字段的内容需要拆解。


第一阶段我们选取的有效字段为['区','所处楼层级别','总楼层数','建造年份','面积','朝向','关注数','是否有 VR 房源','是否近地铁','单位价格','总价']


数据提取和数值化


原数据集数据存在多个不同数据挤在一个字段中的问题,我们使用正则表达式对需要的字段进行提取,然后对必要的文本型数据进行数值化。


爬虫


为了获取更多的数据,我们从原数据集的房屋链接字段爬取房屋的挂牌年月日;从小区链接字段爬取房屋所处小区的具体位置(文字描述)。然后申请百度地图的 ak,通过百度地图将文字描述的位置转化为对应的经纬度。


相关性分析


通过相关性分析的方式,找出字段之前的关联性。

bb906ea102fd91bbc11b562e5d136cfb.png异常值寻找

利用相关性分析,选取相关性高的两个特征(面积和总价),作出两个特征间的散点图


1921f44e94b88cb617d23054efd07c2a.png


可以看到在最右侧出现面积非常大而价格特别低的点,可以认为这是异常点删去;在最上方也出现面积较小但价格异常高的点,可以认为是异常点删去。

数据处理结果

最终我们处理得到了两份数据,一份用于可视化,一份用于算法。具体数据说明如下:


processedDataForVisual的数据字段为:'编号','位置','区','房型','所处楼层级别','总楼层数','建造年份','面积','朝向','关注数','是否有VR房源','是否近地铁','单位价格','挂牌年','挂牌月','挂牌日','总价','纬度','经度'processedDataForCalculate的数据字段为:'区','所处楼层级别','总楼层数','建造年份','面积','朝向','是否近地铁','挂牌年','挂牌月','挂牌日','纬度','经度','总价'


数值化数据字段说明

区:

{'双流':0,'天府新区':1,'成华':2,'武侯':3,'温江':4,'郫都':5,'金牛':6,'锦江':7,'青羊':8,'高新':9,'高新西':10}


房型:

1|1 指一室一厅,以此类推

所处楼层级别:

{'地下室':0,'低楼层':1,'中楼层':2,'高楼层':3}


朝向:

{'北':1,'东北':2,'东':3,'东南':4,'南':5,'西南':6,'西':7,'西北':8}


是否有 VR 房源/是否有地铁:

1 表示是,0 表示否

3.2 可视化分析


我们根据相关性以及感兴趣的部分做出大量图表,现对部分图表进行分析。


928a38489aad43d96a9a70ae69273b2c.png



中心城区(成华区、青羊区、锦江区、武侯区)单位房价更高。在正常的认知下,中心城区的房屋单位价格都要高于相对比较偏远的地区,在较大城市更加明显。我们以行政区为类别,计算量每个行政区房屋单位价格的中位数并标以颜色深浅。从图中可以看到,较靠近中心的几个行政区颜色都较外围行政区要高,在上右图(2020 年数据)体现的尤为明显。


单位房价在随时间升高。从 2018 年到 2020 年,肉眼可见的,每个行政区的颜色在加深,即单位价格在升高。每个行政区,即每个局部的单位价格在升高,可以合理地推断出由局部组成的总体的单位价格在升高。


中心城区(成华区、青羊区、锦江区、武侯区)二手房的关注数更高,更多人关注这些地区的房屋。我们对每个区计算在该行政区内二手房的关注总数:



c006c8a97c98e11c3dd93f266f823459.png

005dfec3e6ca0aecfd13ca18cae35559.png

f087219c2d505b904916420c6f42d38e.png


上方三张图为锦江、武侯、青羊三个中心行政区的总关注人数。

下方三个图为双流、郫都、温江三个较边缘行政区的总关注人数。



2e8e1bf2b06750e7b366388785de6e66.pnga9257e165851e11d103578e15cd69257.png


fa321eaf1af448477ae0c0d6145b51e2.png

可以看到,中心行政区的总关注数要远远大于较边缘的区域。


我们认为这是由于中心区域在交通、地理位置、教育资源、娱乐等各方面都相对比较发达和完善所导致的。人们在选择房子时往往会考虑到周边环境。


中心城区的二手房的挂牌量在进入 2020 年后飙升,而边缘城区的挂牌量则在进入 2020 年后显著下降。



b062ce084e628ec015980fdc6e8123b6.png


2f0491d31e473fd89f54f1f72a11d25b.png

其中锦江和青羊均为地理位置上的中心区,郫都和双流为地理位置上的边缘区。

这一现象我们暂时无法解释,可能与政府政策有很大的关系,也可能是数据集本身的原因。但是我们依然认为这一现象有讨论的价值。

中心城区的房屋建造年份普遍较早。


ad52f7d59e8df14d011662d06256e077.png


左图为武侯区。我们可以看到,武侯区在 2005 年以前建造的房屋比例(红色和黄色)要远远大于双流区,而双流区在 2015 年以后建造的房屋的比例(深蓝色)要远远大于武侯区。


这与成都市的历史有比较大的关系,锦江区、青羊区、武侯区大致在 1953 年就已经存在(当时为东、西城区),而双流等周边行政区是在 1976、2016、2017 才划分出来的。


房型越大,单位价格越高:

a21e9f662c4ea76b61cd8fcf1b5e90c6.png



ce263691dfa383a4adcc411f0d3fba9f.png


总体而言,随着房型的增大,厅室的增多,单位价格在逐步上升。在部分区的趋势很明显,而在少数几个区(例如双流)趋势比较不明显。

其原因大致可以这样推导:

首先,房型增大,面积在变大,这是符合实际情况和逻辑的:


38d995ad3edee393fbab9a684951ed7f.png

其次,面积与单位价格的相关性为 0.73,正相关,且相关性比较高,可以认为随着面积的增大,单位价格在增大。根据传递性,房型增大-> 面积增大,面积增大-> 单位价格升高,则房型增大-> 单位价格升高。

3.3 价格预测及聚类分析

回归决策树


输入:'区','所处楼层级别','总楼层数','建造年份','面积','朝向','是否近地铁','挂牌年','挂牌月','挂牌日','纬度','经度’


输出:总价


层数 12


平均绝对误差 MAE = 35.54


均方根误差 RMSE = 57.83


决定系数 r2_score=0.72


决策树局部展示:(字段为英文)


7efc9189ba1fca3a53bdb2f39a2646fa.png


最优算法选择


回归决策树的结果不尽如人意,为了进行更准确的预测,我们使用线性回归,KNN,支持向量回归,岭回归 Lasso 回归,神经网络,决策回归树,极端随机树,xgboost,随机森林, Adaboost,gradientboost,袋装等算法进行回归预测,使用平均绝对误差、均方误差、决定系数作为评价标准,以期选出最优算法。对算法按照评价标准从优到劣排序如下:

b8bb48d575b2b2ef77a23c67f9ba9c12.png


最优算法为 xgboost

聚类分析

首先找出合适的 k 值。使用轮廓系数和肘方法,作图如下:

e6451195f49686595fc0b1cdb26aff71.png


设置 k=6,进行聚类。对聚类结果进行三维展示。

设置 x 轴为面积, y 轴为单价,z 轴为‘区’,‘所处楼层级别’,‘总楼层数’,‘建造年份’,‘面积’,‘朝向‘等属性中的一个。


fd1380c48dcf33f178b23da10e41cd7d.png

经过对比发现聚类结果仅与面积和单价相关,与其它属性(z 轴)均无关。因此使用二维图展示聚类结果。


881cdc21976e4a6668d78dfa059d4246.png


对数据进行观察后,可以对聚类结果做如下分析:

小面积高价格的房屋多为市区旧建小宅,大面积高价格多为市区新建大宅,极大面积为豪宅,大面积低价格的房屋多为郊区偏远大宅,小面积低价格多为地段不好的小宅,极低价格为老旧小区住宅。

3.4 可视化页面


可视化页面的设计思路是:以中心的成都市的部分行政区划的地图为核心,以行政区划为类别,展示不同行政区划的各个图表。


利用 echarts 的点击事件,使得用户可以通过点击某个行政区划,来讲该行政区划的图表展示在周围的子表当中。


同时,如果用户对某个子表产生兴趣,并想要做区之间的对比的话,可以点击子表中的任何一点,将想看的子表展示在下方的“大屏”上。


顶部信息栏:



00d247b62c4539c62579a7a000718809.png


中央区域:

999b559dfe125c49922ae6de529ab3dc.png


底部大屏展示区:


image.png



3.5 卖方价格预测页面


卖方在左侧表单内输入房子的各种属性(填空值可以缺省),点击提交,右侧显示预测价格,并在地图上将该房子标出来。


892d969473b6c28d365ee1d2cc163ee7.png

3.6 买方房屋推荐页面

买房在上方表单内输入自己有意向购买的房屋的属性范围(填空值可以缺省),点击提交,下方左边表格内显示系统推荐房屋的信息,右侧地图上标记出这些房子的位置。


579e6119471ae436dc90ad131dd1b185.png


完整项目代码:https://download.csdn.net/download/qq_38735017/87416445


相关文章
|
5天前
|
缓存 监控 测试技术
Python中的装饰器:功能扩展与代码复用的利器###
本文深入探讨了Python中装饰器的概念、实现机制及其在实际开发中的应用价值。通过生动的实例和详尽的解释,文章展示了装饰器如何增强函数功能、提升代码可读性和维护性,并鼓励读者在项目中灵活运用这一强大的语言特性。 ###
|
8天前
|
缓存 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第35天】装饰器在Python中是一种强大的工具,它允许开发者在不修改原有函数代码的情况下增加额外的功能。本文旨在通过简明的语言和实际的编码示例,带领读者理解装饰器的概念、用法及其在实际编程场景中的应用,从而提升代码的可读性和复用性。
|
4天前
|
Python
探索Python中的装饰器:简化代码,提升效率
【10月更文挑战第39天】在编程的世界中,我们总是在寻找使代码更简洁、更高效的方法。Python的装饰器提供了一种强大的工具,能够让我们做到这一点。本文将深入探讨装饰器的基本概念,展示如何通过它们来增强函数的功能,同时保持代码的整洁性。我们将从基础开始,逐步深入到装饰器的高级用法,让你了解如何利用这一特性来优化你的Python代码。准备好让你的代码变得更加优雅和强大了吗?让我们开始吧!
12 1
|
5天前
|
存储 缓存 监控
掌握Python装饰器:提升代码复用性与可读性的利器
在本文中,我们将深入探讨Python装饰器的概念、工作原理以及如何有效地应用它们来增强代码的可读性和复用性。不同于传统的函数调用,装饰器提供了一种优雅的方式来修改或扩展函数的行为,而无需直接修改原始函数代码。通过实际示例和应用场景分析,本文旨在帮助读者理解装饰器的实用性,并鼓励在日常编程实践中灵活运用这一强大特性。
|
5天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
21 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
7天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
17 2
|
3月前
|
IDE API 开发工具
|
6月前
|
IDE 开发工具 开发者
Python函数说明文档:编写清晰易懂的文档字符串
Python函数说明文档:编写清晰易懂的文档字符串
96 1
|
6月前
|
Python
Python 的编码规范和最佳实践: 解释 Python 的文档字符串(docstring)是什么?如何编写好的文档字符串?
【4月更文挑战第16天】Python docstrings是注释,用于说明代码功能。放置于对象定义前,用三引号包围。遵循PEP 257,使用reStructuredText格式,确保简洁、完整、准确。例如: ```markdown ```python def add(a, b): """ 计算两数之和。 参数: a -- 第一加数 b -- 第二加数 返回: 和 """ return a + b ``` ```
82 0
|
6月前
|
IDE 程序员 开发工具
Python 进阶指南(编程轻松进阶):十一、注释、文档字符串和类型提示
Python 进阶指南(编程轻松进阶):十一、注释、文档字符串和类型提示
477 0