基于聚类分析技术的昆明二手房源价格分析
2017-11-04霍姝宇王春萍史朝阳
霍姝宇+王春萍+史朝阳
摘要:随着科技的迅猛发展,在生活中,每天都会产生大量的数据。数据挖掘是实现对大量数据进行分析和获取相关知识的研究过程,目的在于能够使人们在其中获取到需要的、具有潜在价值的规律。住房是民生之本,在房屋价格的不断提升的这些年中,不少购房者将视线转移到二手的普通住房,这也拉动了二手房的价格不断攀升。如果只是通过观察或者归纳总结的途径来对影响房源价格提升的因素进行综合分析,那么这意味着,将是一项工作量非常巨大的并且难以实现的任务。文章研究了通过机器学习工具WEKA,对赶集网获取的昆明市二手房数据,使用SimpleKmeans聚类算法,使得具有属性:房屋售价、房屋规格、房屋朝向、房屋楼层、房屋类型、建筑时间、产权、房屋性质、装修情况、地段的2400余条实例各属性分别分6个簇聚类在一起,同一类间的属性相似度较高。
关键词:数据挖掘;二手房屋价格;网络爬虫;聚类分析;SimpleKmeans
近几年,我国的房屋地产销售市场发展十分迅速,房屋价格上升较快,这也对二手房屋的销售起到了一定的刺激作用。一系列舆论的导向,让越来越多的人群被重新卷入到“追求高价”的房屋购买怪圈中,一定程度上也对政府决策行为产生干扰。因此探究影响房屋价格的多种因素就显得尤为重要,本文以昆明市二手的住房为范例,做出聚类分析。
在以昆明二手房源为样本聚类分析中,可通过以下几个数据支撑挖掘过程,一是明确要解决的问题,确定挖掘目标。根据不同的目标选择不同的数据挖掘的方法。本文选择SimpleKmeans算法,是WEKA平台中的K-means算法,目的使同一簇中的实例间相似度较高。二是数据的准备。本文通过利用Python语言编写了多进程网络爬虫程序,在完成数据抓取任务的同时保证了大规模数据输出的稳定性。三是数据预处理。在数据挖掘的过程中,数据预处理起到了十分重要的作用,它决定了数据挖掘的成败。因为在利用各种方式获得的原始数据中,会存在大量的缺失值或者严重偏离预期的数据,在预处理阶段会对数据挖掘结果明显产生影响的数据进行补充、删除、离散化等处理。四是数据挖掘。根据数据的类型、特点,选择合适的数据挖掘工具、方法进行挖掘,得到数据中潜在的信息。五是结论与分析。对结果进行验证、说明,获得结论,做出解释。
一、数据获取
(一)爬虫系统需求分析
利用Python语言编写赶集网二手房网络爬虫程序完成原始数据获取。具体功能包括对售房标题、楼层、产权、装修情况等20余个属性信息进行抓取并保存在MongoDB数据库中。为了保证爬虫程序能够顺利完成,保证数据输出的高效性,同时程序的运行结果能够满足基本的功能需求,因此有必要在实现系统前进行分析,设计出符合需求的工作流和功能模块。
本文研究设计爬虫程序主要由于三个模块组成。1. 抓取页面。从起始页面开始搜索,服务器发送request包,能够下载http协议和https协议的链接的网页,构造HTTP请求中的GET请求;2. 页面解析。主要内容是在抓取页面后,利用BeautifulSoup4解析网页,通过html标签将数据提取出来。3. 主运行模块。pool = multiprocessing.Pool(multiprocessing.cpu_count())创建进程池,实现进程池功能,实现了多进程爬虫工作流,提高了爬虫任务的执行效率。当程序运行时,遇到异常错误需要跳过此异常继续执行并且记录异常,保证后续运行中不会继续访问,例如404错误等异常页面。这也就加大了对程序的可移植性和可靠性额要求。
(二)爬虫功能设计
通过对发布信息平台的对比,发现赶集网二手房数据更新速度快,页面规则相对统一,便于解析网页,因此选择赶集网可以提取更全面的获取二手房数据,能更准确地对影响昆明二手房源售价的因素做出分析。但是赶集网发布的数据也存在一些问题,由于赶集网发布的售房信息也会存在失真的情况,经过数据预处理后的数据集,可能有部分失真数据会使聚类分析产生偏差。原始数据通过网络爬虫实现抓取,网络爬虫利用网页的URL来得到网页的内容,并且将抓取的数据直接返回给用户,不需要人工浏览器获取。
在爬虫项目中经常会遇到一些问题,比如,频繁快速访问会被封IP,通常会通过设置代理IP来解决这种情况,通过使用urllib.request.build_opener添加User-agent消息头伪装浏览器的方式继续完成抓取。为了防止因为爬取速度过快而带来的一系列问题,本文设计程序中通过time.sleep(4)方法增加等待时间,使爬虫完成一次抓取便停顿4秒,延缓数据抓取时间。
1. 工具选择
Python语言自带了urllib,urllib2d等常用的库。Python与其他编程语言进行比较可以发现,Python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。python里擁有功能强大的第三方包。抓取的网页基本都需要处理,通过beautifulsoap4可以清晰、快速地完成网络剖析的工作,提取文本。
2. 网络爬虫的搜索策略
赶集网上的二手房源信息资源非常丰富,网络爬虫需要采取一定的策略,优先爬去对聚类分析有帮助的数据。本文设计的赶集网爬虫程序是基于深度优先原则进行的,在聚类分析的过程中,需要的是大量的、来源可靠的数据,在赶集网能提供网页中尽可能多的一个连接一个连接进行抓取。这样做的目的在于,抓取的数据量足够大,使聚类分析的结果更接近实际情况。endprint
(三)爬虫程序工作流
为了保证爬虫在抓取过程中是高效的,使大规模抓取、输出效率更加稳定,在过程中设计了爬虫工作流。在列表页爬取所有二手售房的URL,存贮到MongoDB数据库中,通过Python语句在数据库中建立一个用来装URL_list的表,Spider1的作用就是将所有列表的URL统统存入到URL_list中;Spider2将URL_list中所有链接依次取出并逐一访问,获得详情页信息。将二手售房的详细信息存储到数据库item_indo中。在这里运用了MongoDB。是一种系统管理的资源可以通过计算机与节点直接相连的方式,不需要与本地相连的节点相连接,它的使用可以通过在程序中直接编程引入,较为方便,并且相比于其他常用数据库,更能适合完成大量数据的存储。在编译器pycharm中安装MongoDB的驱动pymongo, 通过MongoClient()的方法连接主机和端口。
设计数据结构表、聚类属性信息如表1和表2所示。
二、聚类分析技术在昆明二手房价中的应用
聚类分析在生物学、电子商务等领域应用较多,是数据挖掘和机器学习的重要内容之一,它是一种无监督的机器学习方式。聚类分析是把一组对象划分为很多类,但是在每一类中的实例间的相似程度高,在没有划分到一类的对象之间的相似程度很低或者存在着某些的差异就无法聚类在一起,聚类中的簇会根据实际数据集的特征,按照数据之间的相似度来定义。这种分析的明顯优势就在于可以通过实现对类的全方面的、多层次的描述而实现信息的获取。 聚类分析算法可以分为划分方法、层次方法、基于密度的方法、基于网格的方法、基于模型的方法;基于划分的方法主要包括有k—平均值算法,k—中心点算法。基于层次的方法主要是CURE和BIRCH算法。基于网格的聚类方法具有代表性的是STING算法。典型的基于密度的聚类方法是DBSCAN算法。SimpleKmeans算法是在WEKA平台中实现K-means算法。K-means聚类算法输入聚类个数k以及n个实例数,输出符合方差最小标准的k个聚类,使得统一簇组成的类中实例间相似度较高,不同类的对象间相似度低或者因为一些原因无法聚类在一起。
(一)数据预处理
1. 数据预处理
原始数据中的数据一般都存在数据不完整、重复或模糊等情况,很少能直接满足算法研究的要求,在数据挖掘的过程中,如果只重视对算法的研究而忽略了数据预处理阶段的实现,从某种程度上说,会失去数据挖掘的意义。并且,原始数据中没有研究价值的数据很多,都会对数据挖掘算法的执行效率和挖掘的结果产生严重的影响,造成结果偏差。因此,对原始数据进行合理的预处理是数据挖掘研究过程中成功与否的关键。
2. 属性选择、数据清洗
数据预处理包含了很多的步骤。数据选择主要包含选择合适的属性、属性的合成、实例的选择等;数据清理时去除数据集中明显偏离期望值或明显不符合常理的数据、处理重复值、缺失值,处理遗漏掉的数据和清洗脏数据;数据合成则利用原始数据生成更贴合实际的新的属性。数据合并是将原来疏散的几个数据集依照一定的标准和原则归并在一起;数据格式化多应用于解决数据中不一致的情况。
利用Python撰写的网络爬虫获取了赶集网网站上的二手房源发布信息的标题、以及有关二手房出售的相关信息包含24个属性的7000余条数据。
通过对获得的数据观察发现,数据出现重复问题,在周边教育、医疗设施等属性中存在的数据值缺失、不一致等问题较为严重,而在采集到的月供款数据中,原始数据严重偏离期望值,不符合实际。去除属性中特殊符号,删除严重缺失实例的属性如:周边学校、医疗设施、购物渠道等。在Excel中完成数据筛选,选择具有实际意义的数据,将数据另存为CSV文件,WEKA平台可直接对CSV文件操作。
(二)分裂数据集、测试集
在聚类器选择中,使用Percentage split(按照比例分割)。使用默认设置66%,既在供聚类分析的数据集中,取出特定66%的数据作为训练集,剩余数据作为测试集,用来评价聚类器的性能。
(三)聚类分析结果
如图2所示。
三、结语
在聚类分析结果中,Within cluster sum of squared errors:1604.7416693522332用来评价聚类的好坏,其数值越小就意味着聚在一个簇中的实例间的距离越小。同时这个值也会受到“seed”参数的影响,设定随机种子数不同,所得到的这个数值也不同,在本文中,设定的“seed”值是100,得到Within cluster sum of squared errors: 1604.7416693522332,是最理想的结果。
在本文中,参与聚类分析的数据集包含了九种属性的共计2400多实例,在额外簇(Full Data)中显示整个数据集,设置的6个簇包含的实例数分别为:216,410,414,360,421,626,数据集中的所有实例全部归为各簇中。部分购房者在购房时对房屋的朝向有一定的要求,这是在本文中进行聚类分析的影响因素之一,对房屋的朝向的选择可能是受一些历史传统观念的影响,并且,我国处于北半球,南向、南北朝向的房屋采光效果明显好于其他方向,利于通风,是购买者在购买时会考虑的因素,在聚类分析结果中,每个簇所在的列对应的房屋朝向都是南北朝向;在房屋类型中,分为公寓、普通住宅、别墅三种类别,普通住宅类别较为集中;房屋产权性质同理,聚集在70年商品房类别中。数据集中的精装修、毛坯、中等装修、豪华装修、简单装修五种情况,除簇4所在列为毛坯,其余簇所在列均为精装修类别。在对房屋性质的描述中:常有满五不唯一,不满五年,满五唯一,满五年等方式描述。满五唯一含义是指从房产证出证开始计算,已经等于或大于五年的房屋并且户主在这个省份内没有其他登记拥有的住房。一般在这种情形下可免房子的个税和营业税,而满五不唯一不免征个所得的税。因此房屋的性质也是在二手房购买时,购买者通常会考虑的一些因素,不满五年的列表聚集在0、2、3、4中。
参考文献:
[1]李雄军.稳定我国房价的政策探讨[J].重庆工商大学学报(社会科学版),2008(01).
[2]高文林.二手房价格评估的影响因素及方法选择[J].中国房地产,2012(08).
(作者单位:霍姝宇,昆明理工大学校团委;王春萍,昆明理工大学图书馆;史朝阳,昆明理工大学管理与经济学院。王春萍为通讯作者)endprint