基于大数据的二手房交易数据可视化研究
摘要:本文设计并实现了一个城市二手房交易数据的可视化系统,从历史和实时两个维度充分挖掘和展示二手房交易数据中的价值信息。本文采用了 GBDT 模型来预测在售房源中短期内会被售出的热门部分,并用余弦相似度构建在售房源间的相似关联关系。此外,本文设计了一个高效、友好的可视化界面,使用了筛选框、二维地图热力图、关系图、螺旋柱状图、折线图和文本图等多种视图模式,帮助用户探索和获取更多价值信息。
关键词:二手房交易数据;可视分析;多视图协同
城市的住房问题,作为日常生活的根本,其市场发展成为人们最为关注的问题。各项统计数据表明,城市中二手房的交易数量和规模正在超越一手房,逐渐占据房地产交易市场的主导地位。但是,目前市场上不仅缺少对行业相关数据查看平台,更是少有相关工具能够使人们实时了解城市二手房市场的发展与现状。一方面是市场相关需求的旺盛,城市二手房市场经济的繁荣;另一面是信息获取不对称,相关分析工具的缺失。为了解决上述问题,本文的目标是设计并实现城市二手房交易数据的可视化系统,为用户实收集城市二手房市场交易数据信息并进行可视化的分析与展示。
一、系统需求分析
目前,二手房市场发展繁荣并逐渐占据房地产市场交易的主导地位,二手房成为越来越多城市居民解决购房需求的首选。链家网的房产数据库中存储了大量的城市二手房交易数据,这些数据包含实时在售和历史交易数据,涵盖了房屋地理位置、总价、单价、面积、交易时长等诸多市场行为属性信息。如何有效展示已有信息,并不挖掘数据背后的价值信息是本文研究的初衷。能够有效的获取这些二手房交易数据,进行存储与处理,并可视分析出这些交易信息的时空属性及演变变化,挖掘房源间相似关系,预测热门房源,都是本系统建设和研究的方面。 本系统的总体目标是,通过数据挖掘技术发现数据潜在的价值信息,并由可视化技术友好的展示出来。设计并实现面向用户的城市二手房交易数据可视化系统,支持用户筛选、点击、关联等交互操作筛选出感兴趣的数据展示。本系统可帮助用户充分理解城市二手房交易的历史演变,并快速宏观理解实时在售房源的市场概况、微观发现城市中的热门房源以及同类别房源。从而帮助用户充分理二手房的市场状态,进而辅助用户进行市场行为决策或市场监管决策等。为了实现研究目的,本系统将需要实现以下功能需求:
(1)历史交易数据及实时在售数据的获取;
(2)原始数据经纬度及异常数据处理;
(3)多维数据存储与管理;
setoption(4)实时在售房源数据的可视化展示;
(5)预测出短期内将售出的热门房源并可视化展示;
(6)挖掘出相似度较高的同类房源并可视化展示;
(7)挖掘历史交易数据演变并可视化展示;
(8)支持筛选、点击、统计等交互操作;
(9)相关筛选结构的统计展示及链家网对应网页的跳转。
根据系统总体功能的需求分析,可以将系统更细化为数据获取、数据处理以及数据可视化展示几个模块,各模块内部独立设计并实现,模块间协同工作,共同完成系统全局各功能的实现。
二、城市二手房交易数据可视化系统实现
2.1 数据获取模块
数据抓取部分的工作,本文首先是从链家网的二手房第一级的列表页入手,在列表页我们能够看到现在市场上目前正在售卖的二手房跟已经成交的二手房。但是列表页仅展示了几个的房源属性数据,如价格、面积等。为了获取更多的房源属性信息,爬取工作以列表为起点,进而抓取详情页的信息。抓取采用的工具是 Java 的 HTTP Client,HTTP Client 是对 http 请求进行封装,可以方便的去发起请求获取网页内容。在抓取的过程中,遇到了仅能够获取 1000 条数据项的限制。为了能够获取更多的数据,这里对抓取策略进行了修改,通过组合查询方式的方法,可以突破的限制,进而获取到十几万的数据。同时链家网为了防止被恶意攻击,对请求进行了限制。对此,在访问链家网时添加了用户的 cookie,同时限制抓取的频率。
抓取的过程中会遇到很多死链,在死链判断上对爬虫进行了优化工作。首先将死链分为物理死链和逻辑死链 2 种:物理死链是指我们访问时不存在的连接,逻辑死链是指通过列表页跳转后是 404 的页面,链家网的死链大部分是逻辑死链。针对物理死锁,在抓取时进行了判断
工作,将不存在的访问请求直接过滤。针对逻辑死锁的页面,采用对返回的状态码进行判断策略。
通过对抓取策略的修改,可以方便的抓取链家网的数据。抓取网页后,系统通过 Jsoup 对 html 网页内容进行分析,获取其中我们需要的数据。其中,Jsoup 是一个 Java 语言的 HTML 解析器,能够用于直接捷信个 URL 地址和 HTML 文本内容。详细的数据获取流程如下图。
2.2 数据处理模块
在数据处理阶段,首先确认了链家网上可以获取到的数据信息,包括小区名、面积、单价、总价等,这些数据基本可以满足系统对原始数据的需求。但在实际抓取过程中,遇到了部分数据质量较差的情况。一些早期的历史交易数据存在部分属性字段,如总价、成交时间等数据缺失问题,对于这部分数据,采用了直接丢弃的过滤方式。而对于一些可以通过其他值可以计算得出的属性字段,如单价、成交周期等,采用了计算的方式进行填充。
针对房源关键的空间属性信息,链接网采用文字描述,无法直接获取数据经纬度的问题。采用调用地图产品 API 接口的方式解决,本文调用了百度地图的API 接口,采根据中文地理位置来获取具体的经纬度坐标。
在采用百度地图的接口获取经纬度的过程中,同样遇到了数据缺失的问题,即无法直接通过房源名称获取地图接口的经纬度信息。这里利用缺失数据的其他相关属性,如所在的小区名、行政区以及其他对位置简单描述的信息来确定并填充该数据的经纬度坐标。
完成了初步的数据预处理,还需要为后续数据挖掘进行相关数据准备工作。本文使用的 GBDT 预测模型和余弦相似度算法都需要数据以向量的形式进行计算,这里将数据表中的 Parlour(厅)、Room(室)、 Acreage(面积)、Total_price(总价)、Unit_price(单价)
、Lat(维度)、Lng(经度)等属性项抽取并构成了一条的房源数据的空间向量,进行余弦相似度的计算。
2.3系统架构实现
根据系统架构的总体设计,在系统中数据存储在 MySQL 数据库中,整个后端的架构采用的是 springboot+springMVC+JPA 的方式,JPA 是一个 ORM 框架,是在 hibernate 基础之上抽象的一层,这样可以很方便的访问数据库并且省去编写重复 SQL 的过程。
在使用过程中需要:(1)配置 MySQL 连接信息,(2)注解数据库映射类,(3)继承 JpaRepository 编写 hql。
springBoot 的作用是简化 spring 应用的初始搭建以及开发过程,使用特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。之前在新建一个web 应用时,需要先在 l 里配置 spring 信息,然后需要在 spring 的配置文件中定义很多 Bean。而采用 springboot,这些配置都可以用注解来实现。
springMVC 框架是对 servlet 的封装,是 javaEE 中应用最广泛的 web 框架,可以方便的对
外暴露 API 接口。springmvc 的@RequestMapping 注解,可以指定接口的名称,@ResponseBody 注解,可以自动序列化返回结果并以 json 的方式进行返回。
2.4 数据可视化模块
为了实现对房源的多视图展示的可视化需求,本文在可视化模块采用了D3.js,Bootstrap,jQuery,Leaflet 和 Echarts 等多种前端可视化工具,达到多维度可视分析的需求。其中,Bootstrap 自带栅栏的网页布局,可以实现响应式布局。本文的整个可视化系统就是采用的 Bootstrap 布局,将系统分为 5 种维度的可视化展示,下面将从几个主视图来说明可视化模块的具体实现过程。
(1)二维地图热力图是基于 leaflet 框架实现的,在 GIS 地图上对房价进行的热力图展示,同时将推荐的房源绘制在地图上。在整个 Bootstrap 布局中,需要优先定义一个 p 作为 Leaflet 初始化的容器,Leaflet 的初始化函数 L.map 需要指定初始化容器,中心点以及最大最小放大范围。本文采用的中心点是天津火车站的经纬度坐标 39.123826, 117.217497。为了保证在操作过程中不超出天津的地理范围,本文获取了天津范围的 geojson 数据,作为整个地图范围限制。Leaflet是采用 layer 的方式来描绘地图,本文二维地图热力图有三个 layer:
地图背景tileLayer,初始化时需要指定一个地图瓦片服务;热力图 heatLayer,需要将房价信息初始化;推荐房源采用的是 FeatureGroup。同时配合 ajax,异步的请求服务器后端接口,获取房源数据渲染在前端。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论