【《基于Python语言的二手房交易系统设计》14000字】_第1页
【《基于Python语言的二手房交易系统设计》14000字】_第2页
【《基于Python语言的二手房交易系统设计》14000字】_第3页
【《基于Python语言的二手房交易系统设计》14000字】_第4页
【《基于Python语言的二手房交易系统设计》14000字】_第5页
已阅读5页,还剩34页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于Python语言的二手房交易系统设计目录TOC\o"1-3"\h\u22000摘要 125015第一章绪论 3164881.1课题背景与意义 343761.2国内外现状 3294851.3课题主要内容 4166901.4本文的组织结构 426697第二章相关技术介绍 6137572.1Python网络爬虫与爬虫第三方库 6252542.1.1Python与网络爬虫 6173532.1.2网络爬虫第三方库 6127292.2数据分析与Python第三方库 764182.2.1数据分析 7245712.2.2Python第三方库 889802.3数据聚类分析与k-means聚类算法 997882.4本章小结 1015258第三章数据可视化实现 12211033.1数据采集 12119913.1.1页面结构分析 1214963.1.2数据获取 1439253.1.3数据清洗 1835363.2数据可视化 19118293.2.1箱线图 19295593.2.2词云 226613.2.3二手房源属性可视化 245113.2.4面积区间分布 29248643.2.5房源价格分布 30165243.3k-means聚类算法 32115333.4本章小结 34941第四章可视化分析 35138444.1概括性分析 3520534.2聚类分析 364.3区域房价预测22069 37151924.4本章小结 3824705第五章总结与展望 39316165.1本文总结 39238555.2后续展望 3922530参考文献 41摘要随着国内房地产的快速发展,广大人民群众越来越关注房价问题,由于人口的增加,住房面积的减少,大部分地区的城市化等因素,房价也愈来愈高,如何寻找合适的住房已经成为了广大人民群众的一大难题,为了缓解住房压力、经济压力,人们往往会愿意去选择购买二手房,二手房的交易市场也愈加活跃。随着互联网信息时代、数据可视化技术、大数据技术的快速发展,用户获取房源信息从传统的中介门店慢慢的转向互联网。在选择、购买二手房前,用户会在网站或手机应用上搜索已存在的大量房源信息,但是面对数量庞大且来源广泛的房源数据,用户该如何缩短检索时间,如何分析大量数据并得到有用有效的信息并做出决策,就需要用到网络爬虫与数据可视化技术。本文使用了Python语言编写的爬虫程序并结合数据可视化技术,对链家网上苏州市二手房的房源进行数据的采集、清洗,再对清洗后的数据进行数据可视化分析,从这些房源信息的数据中分析出二手房的分布情况、关注人数、价格等信息,研究隐藏在这些数据背后的规律,帮助有意二手房交易的用户做出更好的决策。关键词:网络爬虫;数据可视化;聚类算法;二手房绪论本章主要对基于Python的链家网苏州二手房数据挖掘与数据分析及可视化研究进行探讨,首先介绍本课题的研究背景,其次介绍了数据挖掘与数据可视化分析在当今时代现状,然后多个角度阐述该课题的研究意义,最后展现了本文的具体结构。1.1课题背景与意义随着国内房地产的快速发展,广大人民群众越来越关注房价问题,由于人口的不断增加,住房面积,建房地基的减少,大部分地区的城市化等因素,房价也愈来愈高,一线城市更是如此,如何寻找价格,地址,朝向等合适的住房已经成为了广大人民群众的一大难题。为了缓解住房压力、经济压力,人们往往会愿意去选择购买二手房,但是获取二手房源信息缺要花费不少时间,精力。传统的获取二手房源信息的方式是去线下中介门店了解,这种传统的获取二手房源信息方式存在着很多的弊端。一方面,人们需要花费时间去与中介方沟通二房源信息。另一方面,获取的二手房源信息可能不全面,在进行购房决策是可能只考虑到了部分房源信息,从而导致在住进房子后对房子不满意。互联网的兴起,信息、网络技术的快速发展,越来越多的人能接触到网络,人们获取二手房源信息从传统的中介门店慢慢的开始转向互联网。在选择、购买二手房前,人们会在网站搜索已存在的大量二手房源信息或者在手机应用上搜索二手房源信息,但是面对数量庞大、来源广泛、筛选条件复杂的二手房源信息,用户该如何缩短搜索时间,如何分析大量数据并得到有用有效的信息,做出好的决策,就需要用到网络爬虫与数据分析技术。通过对二手房房源信息的爬取与可视化分析,可以获取大量二手房源信息,将二手房源信息的各种复杂条件综合在一起,进行分析,比较,最终给出人们好的决策。1.2国内外现状国外的数据分析的发展现状,其实在外国,数据分析是一个成熟的技术,他们借助数据分析中的数据可视化技术,有很多的视觉化传播媒体使用图像化的方式进行传播信息,从而提升了自己的影响力。迈克尔·弗兰德利在2008年提出将数据可视化分为两种形式:统计图与主题图。随着数据分析技术的不断地深入发展,其应用与影响范围也在逐渐增加。如今全球很多高校成立开展专门的数据分析与可视化研宄方向,很多政府与企业也加大力度投入对数据分析与可视化的研究之中,并且有很多关于数据分析与可视化的国际会议召开。那么国内的数据分析技术的发展现状如何么呢?我国媒体利用数据分析和数据可视化技术进行应用处于刚刚起步阶段。这是因为在过去,我们借助于常用饼状图、柱状图、表格等形式来美化版面,通过数字加空镜头、画外音的形式宣扬某一领域的发展历程。这种报道方式陈旧,内容抽象化,语言机关化公文化,流于表面,难以让受众真正理解和思考数字的纵深意义,揭示数据背后的信息,事件发展的方向和趋势。所以说,要想改变这一状态,就需要不破不立。现在有很多的媒体和人员都显示了我国数据分析和数据可视化技术相比过去有所发展。1.3课题主要内容课题主要以链家网上苏州市二手房房源的数据为挖掘对象,采用Python网络爬虫和数据可视化分析进行技术支持,帮助用户理解互联网中的大量数据,并且挖掘出各种二手房源的分布情况以及价格等特征走向。本课题主要内容如下:1.简要描述本课题所需要的技术,本课题先用Python爬虫技术对数据进行采集,然后对数据进行清洗,采用可视化技术对清洗后的数据进行数据可视化绘制统计图,最后采用k-means聚类算法绘制散点图。2.基于Python的链家网苏州二手房数据挖掘与数据分析及可视化设计,先明确设计方向,再进行详细设计细化设计功能。3.基于Python的链家网苏州二手房数据挖掘与数据分析及可视化实现,采用Python爬虫技术、数据可视化技术和k-means聚类算法进行实现。4.结果分析,主要通过对数据可视化技术与k-means聚类算法得到的统计图进行分析,挖掘出数据背后的隐藏的结果。1.4本文的组织结构本文主要分为五章,各章具体内容如下:第一章绪论,主要介绍论文研究背景和国内外现状,介绍了论文的主要工作,以及说明了论文的文章结构。第二章相关技术的分析,主要明确和简单的解释了基于Python的链家网苏州二手房数据挖掘与数据分析及可视化设计的开发技术和工具。第三章可视化实现,对各部分功能进行详细设计,以及各部分功能的具体实现。第四章可视化结果分析,对设计实现所得到的可视化结果进行分析,并得出一些结论,辅助决策。第五章为总结,本章主要是对本文工作的总结以及未来工作的展望。相关技术介绍选择科学合理的技术是达到设计实现的关键因素。本章对实现设计的相关技术进行介绍。2.1Python网络爬虫与爬虫第三方库2.1.1Python与网络爬虫Python是一种计算机程序设计语言,它为程序设计者提供了高效的编写效率,还能简单有效地面向对象编程。Python具有丰富、灵活和强大的库,其语言简洁优雅,结构清晰明了,不仅能应用于软件开发与机器学习,还可以进行数据分析、数据挖掘、网络爬虫等等,Python具有大量的开源工具包,为数据处理与数据分析提供了极大的便利,在数据分析领域中,Python已经被广泛的使用,用来分析各大行业的大数据,探索隐藏在数据背后的信息。网络爬虫也叫Webspider,网络蜘蛛,是通过网址来寻找网页,从网站某一个页面开始,查看网页的内容,找到其它网页的链接地址,然后通过这些链接地址寻找下一个网页,不断循环下去,直到按照某种条件或者某种策略把互联网上所有的网页都抓取完为止的技术,一般是一个由程序设计者编写的能自动抓取设计者想获取的网页信息并解析和存储的程序.网络爬虫可以获取设计者想要的数据信息,比如应用于搜索引擎中对站点进行爬取收录,应用于数据挖掘与数据可视化分析中对数据的采集,应用于商业分析中对商业数据进行采集.除此之外,还可以将网络爬虫应用于用户行为分析、目标客户数据的收集、房产信息收集等领域。2.1.2网络爬虫第三方库本文利用Python中的第三方库,Requests库和Beautifulsoup库进行网络爬虫。1.RequestsRequests库是一个基于urllib且常用于http请求的模块,它可以向需要爬取的网页发送requests请求,自动爬取网页并模拟浏览器请求提交,然后获得该目标网页信息。Requests的优点如下:容易理解和阅读。多次请求使用一个连接,消耗更少的资源。Requests库的编码方式Accept-Encoding更全。构建参数相比较urllib库更为简便。方法名称与功能本身相对应,方便学习、使用和理解。Requests的缺点如下:在去重时,如果没用存入硬盘,当服务器重新启动的时候,所有的url将消失。2.BeautifulsoupBeautifulsoup库作为Python的第三方库,最主要的功能是获取网页中的数据,BeautifulSoup提供一些简单的的函数用来处理导航、搜索、修改分析树等功能。Beautifulsoup的优点如下:(1)灵活又方便。(2)处理高效。(3)支持多种解析器,利用它不用编写正则表达式即可方便地实现网页信息的提取。(4)更符合直观语义特性.Beautifulsoup的缺点如下:(1)在时间和空间的性能上不如Xpath(2)BeautifulSoup本质上并没有创造出属于自己的解析方式,而是建立在各种各样的解析器的基础上进行解析。考虑到其他一些内部耗时因素,BeautifulSoup注定会比lxml甚至是任何一个构建对象时使用的解析器要更耗费时间和空间。2.2数据分析与Python第三方库2.2.1数据分析数据分析是指用恰当的统计学方法对收集来的大量数据进行分析,将它们汇集在一起,探索、理解、消化,以求最有效和最大化地开发数据的功能,发挥数据的作用。数据分析是为了提取隐藏在数据背后的有用信息和得到有效结论而对数据加以研究和总结的过程。数据分析的目的是把隐藏在大量看起来杂乱无章的数据中的信息集中、筛选、提炼出来,找出所探索对象的内在规律。目前,数据分析在各个行业和各个领域得到了广泛的应用。数据分析的一般过程主要体现在以下三个方面:①数据清洗。由于数据的获取方式千差万别,获得原始数据之后,数据往往存在缺失、无效、不规范、重复、不准确等问题,在进行数据分析之前首先要对原始数据进行数据清洗。②数据可视化(描述性数据分析)。数据清洗之后,这些数据可能仍然不能达到目标需求与实际需要,可以通过绘制散点图、表格、直方图等统计图方式来分析隐藏在数据背后的规律.③预测性分析。在数据可视化(描述性数据分析)的前提下,研究员可以选择不同的算法模型,应用机器学习、统计学、数学和结合实际等方法,对事物的整体发展趋势进行推断。2.2.2Python第三方库本文在进行数据分析时用到了Numpy、Matplotlib、Pandas这些第三方库。把这些库用在二手房信息分析中,不但能够节省大量工作时间,还能提高这些房源信息资源的利用效率。1.NumpyNumpy是Python的一种数值计算扩展,底层代码是用C语言编写而成的,是Python的基础计算系统,其运算的速度、有效性远远高于只用Python语言编写的代码。Numpy的优点如下:(1)在相同的数值计算任务中,使用Numpy库要比直接编写纯Python方便得多。(2)在等价的基本数据结构中,Numpy中的数组存储效率、输入性能和输出性能远远比Python优秀。并且能够提升的性能使与数组中的元素使成比例的。(3)Numpy的大部分代码都是用C语言编写,它的底层算法在设计的时候具有优异的性能,让Numpy比纯Python代码高效。Numpy的缺点如下:由于NumPy使用内存映射文件以达到最优、最好的数据读写性能,而内存的大小限制了其对TB级大文件的处理;NumPy数组的通用性没有Python提供的list容器优秀。2.MatplotlibMatplotlib是一种可以轻松将数据图像化且生成高质量图形的Python数据可视化模块,它可以让简单的事情变得更简单,复杂的事情变得可能。Matplotlib的优点如下:使用简单、方便。用渐近、交互式方式实现数据可视化。文本表达式使用LaTeX排版。强大的图像元素控制力。Matplotlib的缺点如下:函数式的绘图本质上还是在matplotlib对象的封装,在对象的基础上多了一层函数的调用,定制性不强。3.PandasPandas是基于Numpy的一种实用工具,它是为了解决大量的数据分析任务而创建的,它提供了有效、高效操作大型数据集所需要的工具。Pandas的优点如下:有快速、灵活、明确的数据结构。能简单、直观、快速地处理数据。在语法设计上,Pandas相比于Stata和R更简洁易用且更严谨。Pandas拥有更好的计算、管理大数据的能力。Pandas的底层使基于Numpy搭建,因此它拥有Numpy的全部优点。Pandas的缺点如下:Python+padans的第三方库的计量工具相对较少,做经济学研究的整个工具链相对来说非常不完善。2.3数据聚类分析与k-means聚类算法2.3.1数据聚类分析数据聚类是指根据数据内在的一些性质将它们分成一些聚合类,每一个聚合类中的元素尽最大可能拥有相同的特性,不同的聚合类之间的特性尽最大可能的不同。数据聚类是静态的数据分析的一门技术,已经被很多的领域广泛应用,其中包括生物信息,人工智能,模式和图像识别与分析,数据挖掘等。聚类分析的目的就是分析大量数据是否属于各个独立的分组,让每一组中的每个成员间彼此变得相似,而与其他组的成员变得不相似。聚类分析的一般方法是将所要研究的数据对象分组为多个簇或者多个类,在同一各簇或者同一个类中具有较高的相似度,在不同簇或者不同的类中具有较低的相似度。聚类分析的特征使得它在对数据进行了聚类分析后,可以将一个簇或者一个类中的各个数据对象作为一个整体对待。2.3.2k-means聚类算法本文在进行数据的聚类分析时,用到了k-means聚类算法(k均值聚类)。1.k-means聚类算法的原理和思想k-means聚类算法是聚类算法中最常用最基础的算法,它采用距离作为相似性或相异度的评价标准,即认为对象与对象间的距离越接近,他们的相似性就越大,相异度就越低。k-means聚类算法认为一个簇或一个类是由距离相近的对象组成的,所以把得到单一,聚拢的类或簇当作最终的目标。k-means聚类算法的算法思想为以空间中k个点为中心进行聚类(即先从样本数据集中随机选取k个样本数据作为类簇中心),对与它们最近的对象进行归类(所有样本数据与这k个“类簇中心”的距离,对于每一个样本数据,将其划分到与其距离最近的“类簇中心”所在的簇或类中)。通过不断迭代的方法,逐次更新每个聚类中心的值,直至得到最优最好的聚类结果。2.k-means聚类算法的实现步骤(1)选定k的值。(2)创建k个点作为k个簇的起始质心。(3)分别计算剩下的数据或元素到这k个类簇中心的距离,将这些数据或元素分别划分到距离最近的类簇中心。(4)根据聚类的结果,重新计算k个簇各种的中心,计算方法是取簇中所有数据或所有元素各自维度的算数平均值。(5)全部元素按新的中心重新聚类。(6)重复第(5)步直到聚类结果不再变化。(7)最后,输出聚类结果。3.k-means聚类算法的优点(1)高效可伸缩,计算时间复杂度为O(NKt)接近线性(N是数据量,K是聚类综述,t是迭代数)。(2)收敛速度快,原理通俗易懂,可解释性较强。4.k-means聚类算法的缺点(1)k值的选择不确定,是超参数,一般需要按经验选择。(2)样本数据只能划分到单一的一个类或簇中。(3)受到初始值和异常点影响,聚类结果有可能不是全局最优而是局部最优。2.4本章小结在众多的程序设计语言中,Python语言受到越来越多的关注。与众多程序设计语言相比,Python语言具有非常明显的优势,了解Python语言的优势,掌握Python的基本语法,对于程序开发,科学研究,数据分析会更得心应手。对于基于Python的网络爬虫,了解最为重要的两个Python第三方库,Beautifulsoup库和Requests库,并且能很好的使用他们,会帮助我们更高效的获取网页信息。对于数据分析,掌握三个Python第三方库,Numpy库、Matplotlib库和Pandas库,则能帮助我们节省大量的工作时间和提高信息资源的利用效率。数据聚类分析的簇内同质簇间异质能更有效的进行数据挖掘,k-means作为一种无监督聚类算法,在日常生活中有大量应用。经过适当的预处理,可以对数据做初步分析,甚至挖掘出隐含的价值信息。在本课题中,我主要以Python爬虫技术为基础对数据进行挖掘并采集,然后使用Python对数据进行清洗,采用可视化技术对清洗后的数据可视化,最后结合k-means聚类算法绘制散点图对数据进行分析,配合这些技术的使用,挖掘出了有效数据,并得出了有效的结论。数据可视化实现3.1数据采集3.1.1页面结构分析(1)链接网简介链家网(/)是集房源信息搜索、产品研发、大数据处理、服务标准建立为一体的国内领先且重度垂直的全产业链房产服务平台。是为租房、新房、二手房创建的线上房产交易平台。(2)链家网网页结构分析链接网上苏州市二手房的网页主界面如图3-1所示。图3-1最上面的红框是目前苏州市内各个地区关于二手房房源的区域位置。中间的框表示正在出售的房源的总数量,最下面的框表示正在出售的房源的信息缩略图。链家网带有地图定位功能,所以这个房源信息缩略图就包含了二手房房源页面的URL地址标签,可以直接得到房源所在地区的经度和维度信息。在客户与链接网进行交互的过程中,网站能对这个交互过程产生大数据并进行分析,比如搜索数据、点击数据、浏览时间等,掌握客户的偏好,为客户推荐感兴趣的房源信息并推荐好评优先、熟悉该区域的房屋经纪人对该客户进行服务。图3-1链家网苏州市二手房主界面(3)单个房源信息数据结构分析对单个房源信息数据的结构进行分析,如图3-2所示。图3-2单个房源信息从上向下第一个方框内的信息是二手房源信息的标题,第二个方框内的信息是二手房源所在的小区名称和所在区域,第三个方框内是二手房源的户型、面积、朝向、装修、楼层、结构,第四个方框内是这套房子的关注人数和发布时间,第五个方框内是这套房源信息的标签,最右边两个方框从上向下分别代表这套房子的总价和这套房子的单价。(4)需要采集的链家网房源信息数据对链家网网页结构的分析可知,在查看房源的时候用户可以根据链家网提供的房源属性使用检索来筛选出想要查找的房源,检索的属性如表3-1,如想要检索高新区,售价在100万以下的一室房源就可以勾选相对应的链家网二手房主界面的区域,售价和房型这些房源属性。表3-1二手房源属性区域工业园吴中姑苏高新相城吴江昆山张家港售价100万以下100-150万150-200万200-300万300-500万500-800万800-1000万自定义房型一室两室三室四室五室五室以上面积50平方米以下50-70平方米70-90平方米90-110平方米110-130平方米130-150平方米150平方米以上自定义标签必看好房满五年满两年VR房源7日新上随时看房朝向南北朝南朝东朝北朝西楼层低楼层中楼层高楼层楼龄5年以内10年以内15年以内20年以内20年以上装修精装修普通装修毛胚房用途普通住在商业类别墅四合院车位其他电梯有电梯无电梯权属商品房公房经适房其他类型塔房板楼板塔结合在进行数据采集的时候,对整个苏州市的二手房房源数据采集,此时链家网页面的URL如图3-3。图3-3链家网苏州市二手房URL部分实现代码如下:defgetUrls():defgetUrls():

urls=[]#列表baseUrl="/ershoufang/"此时获取的二手房源信息,包含了苏州市所有的二手房源属性,例如包含链家网上苏州市所有区域的二手房源、所有面积和售价的二手房源。在对二手房源属性进行筛选时,比如在区域方面选择姑苏区,此时链家网的URL如图3-4。依此类推,当我们需要选择其他的二手房源属性时,都会生成一个新的URL,当我们使用新的URL时,能获取到新的数据。图3-4链家网苏州市姑苏区二手房URLdefgetUrls():

defgetUrls():

urls=[]#列表baseUrl="/ershoufang/gusu/"在本文中需要采集的房源信息数据主要是以三月份姑苏区二手房源为例,包括姑苏区二手房的总价、单价、名称、标题这些基本信息;户型、朝向、面积、装修、楼层、结构这些基本属性;发布时间,关注人数,标签这些交易属性。3.1.2数据获取(1)姑苏区二手房源数据爬取流程爬取链家网苏州市姑苏区二手房的工作流程如图3-5所示。图3-5爬虫流程图(2)爬虫程序的设计爬虫程序的整体设计思路:①需要创建一个Python项目;②获取链家网苏州市姑苏区二手房信息网页的源码;③在每一页的网页源码中挖掘出与需求相匹配的数据信息,然后将数据信息存入到CSV文件中,直到爬取工作完成。开始编写爬虫程序时,链家网二手房主页最多显示100页的房源数据,所以在构造爬虫链接的时候如下所示,我们用for循环并把页数限制在100页。#导入需要用到的Python库#导入需要用到的Python库importrequests

frombs4importBeautifulSoup

importpandasaspd

importtime

#生成要爬取的URL

defgetUrls():

urls=[]#列表

baseUrl="/ershoufang/gusu/"

foriinrange(1,101):#限制100页101

url="{}pg{}".format(baseUrl,i)

urls.append(url)#把生成好的url添加到列表urls当中方便返回

returnurls通过前面的工作,得到了的整页html数据,此时需要对网页进行解析,用BealtifulSoup库中的select方法查找需要的信息,例如查找标题title的时候,点击网页中的开发者工具或者检查进入,在查看器或Elements中可以查找到<divclass="title">,title中有很多信息,如图3-6,这些数据就是我们所需要的数据。图3-6<divclass="title">中的数据信息对开发者工具界面或检查界面分析,可以知道我们需要的数据分布在title、positionInfo、houseInfo、followInfo、totalPrice、unitPrice、tag里,我们需要用到BealtifulSoup库中的select方法查找这些信息,部分实现代码如下所示。defParsePage(html):defParsePage(html):

soup=BeautifulSoup(html,features="html.parser")#查找html里各标签中的数据信息

title=soup.select(".titlea[data-el]")

positionInfo=soup.select(".positionInfo")houseInfo=soup.select(".houseInfo")

followInfo=soup.select(".followInfo")

totalPrice=soup.select(".totalPrice")

unitPrice=soup.select(".unitPrice")

tag=soup.find_all("div",attrs={"class":"tag"})解析后对所得数据进行抓取并存入CSV文件,部分代码如下所示。##添加一个标题行

head=[]

df=pd.DataFrame(head,columns=["标题","名称","区域","户型","面积","朝向","装修","楼层","结构","关注","时间","总价","单价","标签"])

df.to_csv("data.csv",mode="a",header=True,index=False,encoding="utf-8")

x=getUrls()#返回值是一个列表

count=1

foriinx:#i是每一个链接

html=gethtmltext(i)#用html保存获取到的网页的所有信息

#解析每一页的数据

pagedata=ParsePage(html)#解析每一页pagedata存放的是一页的数据

#把数据写入文件

df=pd.DataFrame(pagedata)#DataFrame数据帧二维表格结构

df.to_csv("data.csv",mode="a",index=False,header=False,encoding="utf-8")#追加

print("第{}页写入完毕!".format(count))

time.sleep(2)#延时等待两秒防止过快引发链家网反爬虫

count+=1建立CSV文件将爬取的二手房源数据信息存入在CSV文件里面,就得到了进行数据分析所需要的二手房源数据,爬取得到的部分数据如图3-7所示。图3-7爬出的数据3.1.3数据清洗数据清洗是指发现数据文件中的可识别的错误,包括处理缺失值、无效值、检查数据一致性等。importpandasaspd

df=pd.read_csv("data.csv")

print(df.shape)

df=df.dropna()

df=df.drop_duplicates()importpandasaspd

df=pd.read_csv("data.csv")

print(df.shape)

df=df.dropna()

df=df.drop_duplicates()

print(df.shape)

print(df.describe())数据清洗的结果如图3-8所示。图3-8数据清洗结果图3-8前面的数据代表行,后面的数据代表列,在进行清洗之前,14列房源属性中,有2597条数据。在进行了数据清洗之后,14列房源属性中,有2394条数据,说明有203条数据是无效的数据,可能是重复数据,也可能是空的数据。3.2数据可视化3.2.1箱线图箱线图是一种显示一组数据分散情况或离散情况的统计图,通过箱线图,在分析数据的时候,箱线图能够有效地帮助我们识别数据的特征,能判断数据集的数据离散程度和偏向。它描述了一组数据的下限、下四分位数、中位数、上四分位数、上限、异常值。如图3-9。图3-9箱线图优点:能直观明了的识别一组数据中的异常值,可以判断一组数据的偏态和尾重。缺点:不能精确地衡量数据分布的偏态和尾重程度,在数据量比较大的时候,反映的信息模糊,用中位数代表总体评价水平不如平均数,有一定的局限性。在对所得的苏州市姑苏区二手房房源数据进行箱线图的绘制,对总体的房屋单价和分区域的房屋单价进行箱线图的绘制,可以查看到异常值的情况,对于房价而言可以预估它的单价上下限。(1)房屋单价箱线图房屋单价箱线图实现代码如下所示。importpandasaspdimportpandasaspd

importmatplotlib.pyplotasplt

frommatplotlib.pyplotimportMultipleLocator

#从pyplot导入MultipleLocator类,这个类用于设置刻度间隔

df=pd.read_csv("data.csv")

df=df.dropna()

df=df.drop_duplicates()

plt.figure(figsize=(6,6))

plt.rcParams['font.sans-serif']='SimHei'

plt.rcParams['axes.unicode_minus']=False##设置正常显示符号

ax=plt.gca()#ax为两条坐标轴的实例

y_major_locator=MultipleLocator(5000)#把y轴的刻度间隔设置为10,并存在变量里

ax.yaxis.set_major_locator(y_major_locator)#把y轴的主刻度设置为1的倍数

plt.boxplot(df["单价"],medianprops={'color':'red'},labels=["单价"])

plt.ylabel("单价(元/平米)")

plt.title("房屋单价箱线图")

plt.grid()

plt.show()结果如图3-10所示。图3-10苏州市姑苏区二手房单价箱线图从苏州市姑苏区二手房单价箱线图可以看出,百分之五十的单价分布在20000-35000的区间,异常值较多,单价上限非常高,超过50000的数不胜数。(2)区域单价箱线图区域单价箱线图部分实现代码如下所示。plt.figure(figsize=(10,50))plt.figure(figsize=(10,50))

plt.rcParams['font.sans-serif']='SimHei'

plt.rcParams['axes.unicode_minus']=False#设置正常显示符号df_house_mean=df.groupby('区域')['单价']groups=df.groupby('区域')

newgroups=groups.agg({'单价':'mean'}).sort_values('单价',ascending=False)#按照单价均值排序

range_price=[]

forrinnewgroups.index:#获取每个区的数据

range_price.append(df[df.区域==r].单价)

f=plt.boxplot(range_price,labels=newgroups.index)

plt.xlabel("区域名称")

plt.ylabel("单价(元/平米)")

plt.grid(axis='y')

plt.title("各区域单价箱线图")

plt.show()结果如图3-11所示。图3-11各区域单价箱线图在苏州市姑苏区各区域二手房单价箱线图中,横轴为苏州市姑苏区各区域名称,纵轴为单价(元/平米)。二手房平均单价虽然是一个重要参考数据,但平均值不能有效的表示出数据整体上的分布情况,特别是数据中一些离散值的分布情况,这些信息的表现则需要借助箱线图。从图3-11中可以看出,胥江和金门两个区域房源单价正常值分布都不是太集中,异常值较多,胥江50%的单价分布在20000-31000的区间内,金门50%的单价分布在20000-30000的区间内,胥江区的异常值特别多,单价在40000以上的房源数不胜数,十全街50%的单价位于30000-48000的区间内,单价上限很高,且几乎没有异常值,数据质量较好。3.2.2词云词云是文本数据在视觉上的表示,是由一些词汇组成的类似于白云的图形,通常用来在大量的文本数据中描述关键字,它的作用是快速的感知最敏感最突出的文字,快速的定位在按字母顺序排列的文字中相对而言较为突出的部分。词云最大的优点是它可以映射更多个属性在它的文字样式上,而柱状图则只能映射一个属性在其颜色上。词云也是数据可视化中最常用的方法,我们可以通过词云显示的高频词来了解整个数据文件中的基本内容。词云部分代码如下所示。importmatplotlib.pyplotaspltimportmatplotlib.pyplotasplt

fromwordcloudimportWordCloud

#读取语料数据文件

text=open('data.csv',"r",encoding="utf-8").read()

wc=WordCloud(font_path="字体.ttf",background_color="white",contour_width=3,contour_color="steelblue")

#生成词云

wc.generate(text)

#存储到文件

wc.to_file("cloud.png")

#展示词云结果

plt.imshow(wc)

plt.axis("off")

plt.show()结果如图3-12所示。图3-12姑苏区二手房数据词云图从姑苏区二手房数据词云图3-12,我们可以得到在苏州市姑苏区二手房房源信息中经常出现的高频词,如南、精装、2室1厅、VR看装修等。我们可以通过这些高频词,十分粗略的了解姑苏区二手房房源属性热点在哪。对于房产行业者可以起到一个大致掌握房源热门趋势的作用。3.2.3二手房源属性可视化在进行二手房源各属性可视化的时候,主要使用统计图中的柱状图来展现数量统计结果,相比于其他统计图,柱状图能一眼就看出数量的多少,也更利于比较数量之间的差别,在这一部分,本文主要对姑苏区各区域二手房源的数量、各种房源户型的数量、房源朝向的数量、关注人数进行了柱状图的表示,可以了解这个月份各区域,每种房源属性间数量的差别,以便于与其他月份做对照,最终得出预测结论。(1)苏州市姑苏区各区域二手房房源数量统计对姑苏各个区域的二手房房源数量进行统计绘图,初步了解到各个区域的二手房源数量多少,部分代码如下所示。df=pd.read_csv("data.csv")df=pd.read_csv("data.csv")#读进来是一个二维列表结构

df=df.dropna()

df=df.drop_duplicates()

counts=df.groupby(by="区域").count()#统计

plt.rcParams['font.sans-serif']='SimHei'

plt.rcParams['axes.unicode_minus']=False#设置正常显示符号

plt.title("各个区域的房源数量分析")#区域

plt.bar(counts.index,counts["标题"],label="数量")

plt.xticks(rotation=45)

plt.ylabel("数量")

plt.legend()

fora,binzip(counts.index,counts["标题"]):

plt.text(a,b+0.05,b,ha="center",va="bottom",fontsize=10,color="red")

plt.show()各个区域二手房源数量柱状图的绘制结果如图3-13。图3-13姑苏各区域二手房源数量柱状图姑苏各区域二手房源数量柱状图横轴为苏州市姑苏区各街道名称,纵轴为房源数量(套)。从图3-13中可以直观看出,胥江在售房源数量最多,虎丘在售房源数量最少,其他街道数量参差不齐。各种户型数量统计对各种户型数量的统计绘图能直观的看出大部分的二手房源的户型集中于哪一类,部分代码如下所示。df=pd.read_csv("data.csv")#df=pd.read_csv("data.csv")#读进来是一个二维表格结构DataFrame

df=df.dropna()

df=df.drop_duplicates()

counts=df.groupby(by="户型").count()#统计

plt.figure(facecolor='white')

plt.rcParams['font.sans-serif']='SimHei'

plt.rcParams['axes.unicode_minus']=False##设置正常显示符号

plt.title("各种户型数量分析")

#plt.plot(counts.index,counts["标题"],label="数量")

plt.bar(counts.index,counts["标题"],label="数量")

plt.xticks(rotation=45)

plt.ylabel("数量")

plt.legend()

fora,binzip(counts.index,counts["标题"]):

plt.text(a,b+0.05,b,ha="center",va="bottom",fontsize=10,color="green")

plt.show()房源户型数量柱状图的绘制结果如图3-14所示。图3-14房源户型数量柱状图房源户型数量柱状图纵轴为每种户型的数量(套),横轴为户型的种类。从图中可以看出,在售房源中2室1厅最多,3室2厅其次,2室2厅、3室1厅适中,其他户型数量较少。与词云展示的结果是一致的,2室1厅是最热门,最高频出现的户型,可能说明2室1厅户型的房源较其他户型来说,更受人们的偏爱。房源朝向数量统计对房源朝向数量的统计能掌握现在的二手房源的大致集中的方位,部分代码如下所示。df=pd.read_csv("data.csv")#df=pd.read_csv("data.csv")#读进来是一个二维表格结构DataFrame

df=df.dropna()

df=df.drop_duplicates()

counts=df.groupby(by="朝向").count()#统计

print(counts)

plt.rcParams['font.sans-serif']='SimHei'

plt.rcParams['axes.unicode_minus']=False##设置正常显示符号

plt.title("朝向统计")#朝向

plt.bar(counts.index,counts["标题"],label="数量")

plt.xticks(rotation=90)

plt.ylabel("数量")

plt.legend()

fora,binzip(counts.index,counts["标题"]):

plt.text(a,b+0.05,b,ha="center",va="bottom",fontsize=10,color="red")

plt.show()绘制结果如图3-15所示。图3-15房源朝向柱状图房源朝向柱状图纵轴为各种朝向的数量统计,横轴为朝向的种类。从图3-15中可以看出,朝南方向的房源是最多的,与房子朝南采光条件好受欢迎的常识相符,与词云出现的南高频也相符。房源关注人数统计对姑苏区各区域房源关注人数的统计能使中介行业对热门区域投入更多的资源,获取更多的利益,代码如下所示。defparse(x):defparse(x):

if"人关注"inx:

returnint(x.replace("人关注","").strip())

else:

return-1

df["关注"]=df["关注"].apply(lambdax:parse(x))

df=df.drop(df[df["关注"]==-1].index)

plt.rcParams['font.sans-serif']='SimHei'

plt.rcParams['axes.unicode_minus']=False##设置正常显示符号

res=df["关注"].groupby(df["区域"]).sum()

plt.title("各个区域关注人数统计")#关注人数

绘制结果如图3-16所示。图3-16区域关注人数柱状图区域关注人数柱状图纵轴为关注人数数量,横轴为各区域的名称,从图中可以看出平江新城的关注人数最多,胥江其次,其他适中,中介网在进行资源分配时,比如能力强、服务好的中介人,可以优先分配给平江新城和胥江两个区域。3.2.4面积区间分布面积是人们非常关注的房源信息,它对人们的决策有很大的影响,对面积的可视化能掌握房源面积的分布,对聚类分析结果分类起到一个导向的作用,本文使用饼图实现面积的可视化,饼图主要用来表示各部分数据在总体数据中的占比,相比于其他统计图,面积区间的可视化使用饼图,能直观清晰看出各面积区间的比例,部分代码如下所示。df=df.dropna()df=df.dropna()

df=df.drop_duplicates()

df.isnull().any()

divide=[0,30,50,70,90,120,140,160,1200]

cut=pd.cut(list(df["面积"]),divide)

data=cut.describe()

plt.pie(x=data.freqs,explode=(0.2,0.1,0.1,0.1,0.1,0.1,0.1,0.1),labels=data.index,autopct="%1.2f%%",startangle=45,radius=1)

plt.rcParams['font.sans-serif']='SimHei'

plt.rcParams['axes.unicode_minus']=False##设置正常显示符号

plt.legend(loc='best')

plt.title("面积占比分析")

plt.show()绘制结果如图3-17所示。图3-17面积区间饼图由面积区间饼图3-17可知,在这些二手房房源中,面积大多集中在50平米到120平米之间,其中50平米到70平米所占饼图比率最多占25.81%,70平米到90平米其次占23.9%,90平米到120平米紧随其后占20.59%。三者旗鼓相当,最少的是30平米以下,只占0.29%,几乎没有房源。3.2.5房源价格分布房价一直是人们最关注的一个房源信息,房价的高低有时会在人们决策的时候起到决定性作用。本文对房源价格的分析分为区域单价和区域总价,并使用柱状图和折线图双图共轴展示姑苏区各区域二手房单价和总价的价格分布。对区域单价绘制柱状图来表示能更直观的看出各区域单价的高低以及方便比较。对区域总价绘制折线图来表示则可以看出某个月份区域总价的趋势,更容易与其他月份进行比较。在对区域单价和区域总价进行统计图的绘制时,展示了3月份姑苏区各区域单价和总价的分布,部分代码如下所示。counts=df["counts=df["单价"].groupby(df["区域"]).median()#统计

plt.rcParams['font.sans-serif']='SimHei'

plt.rcParams['axes.unicode_minus']=False##设置正常显示符号

fig=plt.figure()

ax=fig.add_subplot(111)

ax.bar(counts.index,counts.values,label="平均单价(元/平米)",color="#b3c6ff")

ax2=ax.twinx()

counts=df["总价"].groupby(df["区域"]).median()#统计

ax2.plot(counts.index,counts.values,label="总价(万)",color="red")

fig.legend(loc=1,bbox_to_anchor=(1,1),bbox_transform=ax.transAxes)#防止图例变形

plt.show()绘制结果如图3-18所示。图3-18房源价格走势图房源价格走势统计图,左边纵轴是平均单价(元/平米),右边纵轴是总价,横轴则是各区域。由图可看出,十全街的平均单价最贵,留园西园的平均单价最低。而总价在沧浪新城则是最高,留园西园最低。3.3k-means聚类算法聚类算法中的K-means聚类算法聚类效果优秀,收敛速度快,在二手房房源数据中使k-means聚类算法也便于对最后结果的解释。所以将采用k-means聚类算法对爬取到的所有二手房源信息数据进行聚类分析。部分代码如下所示。 foriinrange(self.n_clusters):

plt.scatter(self.data[self.y_k==i,0],self.data[self.y_k==i,1],s=50,c=cValue[i%len(cValue)],

marker=".",

label="cluster"+str(i))

plt.xlabel('房屋面积')

plt.ylabel('房屋价格')

plt.legend()

plt.grid()

plt.savefig(price_data,dpi=600,bbox_inches='tight')在聚类过程中,我们选择房屋面积、房屋总价这两个数值型变量作为样本点的聚类属性,画出散点图,表示这两个特征的分布情况,以达到对数据概括总结的目的。散点如图3-19所示,纵坐标为房屋总价,横坐标为房屋面积。图3-19聚类结果散点图对数据进行归一化,将房屋面积和房屋总价两个特征的值缩放到[0,1]区间,主要是为了数据处理方便,把数据映射到0~1范围之内处理,更加的快速和便携,也以便于消除指标之间的量纲影响。部分代码如下所示。defget_anchors(data,n_clusters,price_data):defget_anchors(data,n_clusters,price_data):

whtxt=create_x_y_txt(data,price_data+'.txt')

cess_file()

kmean_parse=kMean_parse(n_clusters,price_data+'.txt')

kmean_parse.parse_data()

kmean_parse.plot_data(price_data+'.jpg')

if__name__=='__main__':

path=os.getcwd()

data_path=path+"/data.csv"

pad_data=pd.read_csv(data_path)[['面积','总价']]#取出面积与总价两列数据

print(pad_data.shape)

data_300=pad_data[pad_data['面积']<300]

print(data_300.shape)

data_1000=data_300[data_300['总价']<1000]#对数据进行归一化之前,需要先去掉离群点,去掉面积大于250,价格高于1000的数据记录归一化后的散点图如图3-20所示,纵坐标为房屋总价,横坐标为房屋面积。图3-20归一化后散点图3.4本章小结本章主要对二手房数据进行了爬取,可视化绘制统计图,聚类制作散点图。主要以Python爬虫技术为基础对数据进行挖掘并采集,然后使用Python对数据进行清洗,采用可视化技术对清洗后的数据可视化,并绘制统计图,最后使用k-means聚类算法绘制散点图以便于对数据进行进一步的分析。

可视化分析4.1概括性分析在对姑苏区各区域房源数量的统计绘图中,可以看到胥江地区的房源数量最多,平江新城地区紧随其后,虎丘地区则是房源数量最少。在对姑苏区各区域关注人数的统计绘图中可以看到平江新城地区的关注人数最多,胥江地区紧随其后,两者相差并不大,虎丘地区的关注人数最少,可以推断,房源热度集中于胥江地区和平江新城地区,这说明相关行业可以在这两个区域投入优质资源。在对两个房源属性朝向和户型的统计绘图中,朝向南结合2室1厅在这些二手房源中占据了最多的数量,比较符合常识。也可以简单的推断,房源位置位于本就热门的胥江地区和平江新城地区中,朝向南和2室1厅的房源在其中更为热门,房屋价格也会更高。 总价和单价是两个完全不同的概念,两者代表的含义也是不一样的,总价一般而言即为房屋交易价格的总数,从总价可以看出一套房子的价值。而单价只是针对一套房子一平米的价格而言的,比如同一个小区内的房子,在居住条件、房源属性不一样的情况下,单价也是不一样的。总价比单价更加直观,但是在购买房屋的时候通常是总价和单价结合在一起考虑。在对区域单价和区域总价的统计绘图中,可以看到关注人数和房源数量最多的两个区域,胥江和平江新城的房源平均单价属于居中位置,关注人数和房源数量最少的虎丘地区房源的平均单价则高于胥江地区,而十全街地区的平均单价则是位列第一,关注人数和房源数量则较少。十全街地区平均单价高可能是因为它的地理位置优异,交通便利,景色优美等特点,而胥江地区和平江新城地区关注人数多,房源数量多,单价平均中游,一方面可能是因为教育资源投入多,另一方面则可能是具有一些发展潜力。而总价最高则是沧浪新城,关注人数和房源数量却在中游,一方面可能这个地区的房源条件较好,另一方面可能只是价格虚高,房源条件不好,比如说房源的条件比较好,位置好,楼层合适,朝向采光也不错,那么房子的价格适当高一点是可以理解的,但相比之下,一些条件不算很好的房子,价格还高就划不来了,所以在选则购买房子的时候可以根据这些影响房屋价格的因素来进行决策,而不仅仅看房价高低。4.2聚类分析苏州市姑苏区二手房总价与面积关系散点图如图3-19所示,x轴表示房屋面积,y轴表示房屋总价。我们从图中可以了解到房屋总价与房屋面积呈正相关关系。房屋面积越大,价格也就越高,基本符合常识。在房屋总价0到1100万元与建筑面积0到250平方米这个区域内,数据点的分布比较集中。根据聚类的结果和我们的经验以及上述统计图结果分析,我们大致可以将这些房源分为以下几类:1.大户类型(总价高、面积大),属于第2类,这种大户类型的房源数量相对较少,主要分布在沧浪新城等地。2.地段类型(单价较高),属于第0类和第1类,这类型的房源大多数地理位极好,交通方便,主要分布在十全街和平江路等地。3.大众集中类型(面积小、价格便宜),属于第3类,这类型的房源范围较广,数量较多,主要分布在胥江和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论