首页 > 科技 >

基于Python的南京二手房数据可视化剖析

2019-06-11 21:19:23 暂无 阅读:1684 评论:0

1 内容简介

首先经由爬虫采集链家网上所有南京二手房的房源数据,并对采集到的数据进行清洗;然后,对清洗后的数据进行可视化剖析,索求隐藏在大量数据背后的纪律;最后,采用一个聚类算法对所有二手房数据进行聚类剖析,并凭据聚类剖析的究竟,将这些房源大略分类,以对所稀有据的归纳总结。经由上述剖析,我们能够认识到今朝市面上二手房各项根基特征及房源分布情形,匡助我们进行购房决议。

2 应用手艺介绍

1)Python收集爬虫手艺

Requests

Beautifulsoup

2)Python数据剖析手艺

Numpy

Matplotlib

Pandas

3)k-means聚类算法

4)高德地图斥地者应用JS API

3 数据采集及数据清洗

3.1 数据采集

该部门经由收集爬虫法式抓取链家网上所有南京二手房的数据,收集原始数据,作为整个数据剖析的基石。

3.1.1 链家网网站构造剖析

链家网二手房主页界面如图1、图2,主页上面红色方框位置显露今朝南京二手房在售房源的各区域位置名称,中央红色方框位置显露了房源的总数量,下面红色方框显露了二手房房源信息缩略图,该红色方框区域包含了二手房房源页面的URL地址标签。图2下面红色方框显露了二手房主页上房源的页数。

'''

碰到python不懂的问题,能够加Python进修交流群:1004391443一路进修交流,群文件还有零根蒂入门的进修资料

'''

链家网二手房主页截图上半部门:

基于Python的南京二手房数据可视化剖析

图1 链家网二手房主页

链家网二手房主页截图下半部门:

基于Python的南京二手房数据可视化剖析
基于Python的南京二手房数据可视化剖析

图2 链家网二手房主页

二手房房源信息页面如图3、图4。我们需要采集的方针数据就在该页面,包罗根基信息、衡宇属性和生意属性三大类。各类信息包罗的数据项如下:

1)根基信息:小区名称、地点区域、总价、单价。

2)衡宇属性:衡宇户型、地点楼层、建筑面积、户型构造、套内面积、建筑类型、衡宇朝向、建筑构造、装修情形、梯户比例、配备电梯、产权年限。

3)生意属性:挂牌时间、生意权属、前次生意、衡宇用途、衡宇年限、产权所属、典质信息、房本备件。

基于Python的南京二手房数据可视化剖析

图3 二手房房源信息页面

基于Python的南京二手房数据可视化剖析

图4 二手房房源信息页面

3.1.3 收集爬虫法式要害问题解说

1)问题1:链家网二手房主页最多只显露100页的房源数据,所以在收集二手房房源信息页面URL地址时会收集不全,导致最后只能采集到部门数据。

解决办法:将所有南京二手房数据分区域地进行爬取,100页最多可以显露3000套房,该区域房源少于3000套时能够直接爬取,若是该区域房源跨越3000套能够再分成更小的区域。

2)问题2:爬虫法式若是运行过快,会在采集到两、三千条数据时触发链家网的反爬虫机制,所有的恳求会被重定向到链家的人机判定页面,从而会导致后背的爬取失败。

解决办法:①为法式中每次http恳求组织header而且每次变换http恳求header信息头中USER_AGENTS数据项的值,让恳求信息看起来像是从分歧浏览器发出的接见恳求。②爬虫法式每处理完一次http恳求和响应后,随机睡眠1-3秒,每恳求2500次后,法式睡眠20分钟,掌握法式的恳求速度。

3.2 数据清洗

对于爬虫法式采集获得的数据并不克直接剖析,需要先去掉一些“脏”数据,批改一些错误数据,统一所稀有据字段的花样,将这些零星的数据规整成统一的构造化数据。

3.2.1 原始数据首要需要清洗的部门

首要需要清洗的数据部门如下:

1)将混乱的记录的数据项对齐

2)清洗一些数据项花样

3)缺失值处理

3.2.3 数据清洗究竟

数据清洗前原始数据如图8,清洗后的数据如图9,能够看出清洗后数据已经规整了很多。

基于Python的南京二手房数据可视化剖析

图8 清洗前原始数据截图

基于Python的南京二手房数据可视化剖析

图9 清洗后的数据截图

4 数据可视化剖析

在数据清洗完成后,我们就能够起头对数据进行可视化剖析。该阶段首要是对数据做一个索求性剖析并将究竟可视化呈现,匡助人们更好、更直观的熟悉数据,把隐藏在大量数据背后的信息集中和提炼出来。本文首要对二手房房源的总价、单价、面积、户型、区域等属性进行了剖析。

数据可视化剖析首要步伐如下:1)数据加载;2)数据转换;3)数据可视化呈现。

4.1 数据加载

数据剖析和建模的大量工作都是用在数据预备上的,如:清理、加载、转换等。清洗完成后的数据仍然存储在文本文件(CSV花样)中,要对数据进行可视化剖析,必需先要将数据按必然究竟加载到内存中。我们使用Pandas供应的DataFrame对象来加载和处理我们清洗后的数据,Pandas同时供应将表格型数据读取为DataFrame对象的函数。数据加载处理过程中需要注重的首要问题如下:

1)数据项的队列索引的处理;

2)数据类型揣摩和数据转换;

3)缺失值的处理。

4.2 数据整体质量剖析

4.2.1 数据根基情形

数据加载后,数据根基情形如图10。从图中能够看到加载后的数据一共20527行、25列,占用内存3.9+MB。在数据类型上,一共有3列float64类型,2列int64类型,20列object类型。除了户型构造、套内面积、典质信息三列数据项缺失值对照多之外,其他列数据项的缺失值都不多,所以数据整体的质量还不错。

基于Python的南京二手房数据可视化剖析

图10 数据根基情形图

4.2.2 整体数据文件词云

从整体数据文件词云(见图11),我们能够获得在南京二手房房源信息中经常显现的高频词,如商品房、通俗室庐、一梯两户、钢混构造、精装等。我们能够经由这些高频词,十分粗略的认识整个数据文件中的根基内容。

基于Python的南京二手房数据可视化剖析

图11 整体数据文件词云

4.2.3 南京各区域二手房房源数量折线图

南京各区域二手房房源数量折线图(见图13)横轴为南京各个行政区域名称,纵轴为房源数量(套)。从图中能够看出,江宁在售的房源数量最多,高达5000多套,占了总量的1/4。与之相反的是六合区,六合区在售的房源数量仅有1套,数量太少,其他各区的数量相差不多。所以我们后背关于六合区的剖析会存在必然误差。

基于Python的南京二手房数据可视化剖析

图13 南京各区域二手房房源数量折线图

4.2.4 南京二手房衡宇用途水平柱状图

南京二手房衡宇用途水平柱状图(见图14)横轴为房源数量(套),纵轴为衡宇用途类型。从图中我们能够看出,衡宇用途类型有:通俗室庐、别墅、贸易办公、酒店式公寓、车库5中类型。个中我们首要关心的通俗室庐类型的房源数量近20000套,占总量绝大部门。所以在本文中,我们没有剔除掉衡宇用途为其他类型的记录,因为这些类型在所有房源样本中占比相当少,不会影响后背的剖析究竟,同时它们也属于二手房的领域内。

基于Python的南京二手房数据可视化剖析

图14 南京二手房衡宇用途水平柱状图

4.2.5 数据整体质量总结

经由前面的剖析,我们能够看出该数据文件的整体质量还不错。固然存在一些缺失值对照多的数据项,但我们对照存眷一些数据项缺失值不多。这些缺失值较多的都是一些次要的数据项,不影响我们的剖析。在衡宇用途类型上,数据文件中一共包罗了5种类型的二手房房源信息,个中通俗室庐类型占比98%以上,所以我们后背剖析根基能够算作是针对通俗室庐类型的二手房进行的剖析,这也相符我们盼望。整个数据文件中独一不足的是六合区域的二手房房源样本点太少,这使我们对六合区域的剖析会存在必然的误差。

4.3 南京二手房根基信息可视化剖析

二手房根基信息可视化剖析首要针对二手房:区域、总价、单价、建筑面积四个属性的剖析。

4.3.1 南京各区域二手房平均单价柱状图

南京各区域二手房平均单价柱状图(见图15)横轴为南京各区域名称,纵轴为单价(元/平米)。从图中我们能够看到建邺区和鼓楼区二手房平均单价最高,近40000元/平米。建邺区是市中心城区,近几年成长势头很好,房价一路飙升,如今已经成了南京最贵的区域之一。鼓楼区作为南京市的焦点地带,拥有浩瀚商场和学区房,其均价一向高升不下。从整体上来看,南京市各个区域(除去存在误差的六合区)均价都已经跨越了20000元/平米。这些能够施展出近几年南京市房价猛涨的究竟。浦口区固然比拟房价已经很低了,但相较于浦口前几年的房价,差不多是翻了一番。

基于Python的南京二手房数据可视化剖析

图15 南京各区域二手房平均单价

4.3.2 南京各区域二手房单价和总价箱线图

南京各区域二手房单价箱线图(见图16)横轴为南京各区域名称,纵轴为单价(元/平米)。二手房平均单价固然是一个主要参考数据,但平均值不克有效的透露出数据整体上的分布情形,稀奇是数据中一些离散值的分布情形,这些信息的示意则需要借助箱线图。从图16中能够看出,建邺和鼓楼两个区域房源单价正常值分布都不是太集中,50%的单价分布在30000-50000的区间内,区间跨度比其他区都要大。固然建邺区平均单价略高于鼓楼区,但鼓楼区的非常值稀奇多,单价跨越50000的房源数不堪数,最高单价有达到100000的,单价上限远高于建邺区,而建邺区非常值相对较少。综合以上情形来看,鼓楼区应该是南京市单价最高的区域。与鼓楼区相邻的玄武区和秦淮区单价正常值分布较为集中50%的数据都分布在30000-40000之间,但这两个非常值也对照多,单价上限也非常高。这些区域单价如斯多的非常值,跟这些区域集中的教育和医疗资源有着密弗成分的关系。

基于Python的南京二手房数据可视化剖析

图16 南京各区域二手房单价箱线图

南京各区域二手房总价箱线图(见图17和图18)横轴为南京各区域名称,纵轴为单价(万元)。图18对图17纵轴进行了缩放,更易于视察,其他方面没有区别。从总价这个维度来看,鼓楼、建邺这两个单价最高区域,总价非常的高,500万元的二手房以分布在正常值局限内了。南京其他各区域二手房价钱大部门都集中在200-400万元之间,下四分位数十分接近200万。江宁、栖霞固然在单价不高,但总价不低,尤其是近几年房价涨幅对照高的江宁,500万以上非常值都已经对照多了。浦口区总价数据分布最为集中,绝大部门数据都200-300万区间内。

基于Python的南京二手房数据可视化剖析

图17 南京各区域二手房总价箱线图

基于Python的南京二手房数据可视化剖析

图18 南京各区域二手房总价箱线图

4.3.3 南京二手房单价最高Top20

南京二手房单价最高Top20水平柱状图(见图19)横轴为单价(元/平米),纵轴为小区名字。从图中能够看出,单价前20的房源都已经跨越9万,而且都集中在鼓楼区,这也印证了上面箱线图中鼓楼区如斯多非常值的存在。

基于Python的南京二手房数据可视化剖析

图19 南京二手房单价最高Top20

4.3.4 南京二手房单价和总价热力争

南京二手房单价热力争(见图20)和南京二手房总价热力争(见图21)红..域代表房源密集度高且房价高的区域。从图中能够看出鼓楼、玄武、秦淮、建邺上半部门是密集度最高的区域。这4个区域处于南京市正中心的位置,交通轻易,医疗、教育等资源集中,这些身分一路培养了这些区域高价钱。

基于Python的南京二手房数据可视化剖析

图20 南京二手房单价热力争

基于Python的南京二手房数据可视化剖析

图21 南京二手房总价热力争

4.3.5 南京二手房总价小于200万的分布图

南京二手房总价小于200万的房源一共有6000多套,分布图见图23。从图中我们能够看出,除了鼓楼区和建邺区对照少,其他区域低于200万的房子照样有的。

基于Python的南京二手房数据可视化剖析

图23 南京二手房总价小于200万的分布图

4.3.6 南京二手房建筑面积剖析

南京二手房建筑面积分布区间图(图24)横轴为房源数量(套),纵轴为分布区间(平米)。从图中能够看出在建筑面积50-100区间内房源数量最多,跨越了10000套。其次是100-150区间与小于50的区间。

基于Python的南京二手房数据可视化剖析

图24 南京二手房建筑面积分布区间柱状图

南京各区域平均建筑面积柱状图(图25)横轴为各区域名字,纵轴为建筑面积(平米)。从图中能够看出玄武、秦淮、鼓楼这几个单价对照高的老城区平均建筑面积最小,平均面积80平米摆布。反而是江宁、浦口这两个单价最低的区域平均建筑面积最大,平均面积巨细跨越了100平米。

基于Python的南京二手房数据可视化剖析

图25 南京各区域二手房平均建筑面积柱状图

4.3.7 南京二手房单价、总价与建筑面积散点图

南京二手房总价与建筑面积散点图(图26)横轴为建筑面积(平米),纵轴为总价(万元)。从图中能够看出,总价与建筑面积这两个变量相符正相关关系。数据点分布对照集中,大多数都在总价0-1500万元与建筑面积0-400平米这个区域内。

基于Python的南京二手房数据可视化剖析

图26 南京二手房总价与建筑面积散点图

南京二手房单价与建筑面积散点图(图27)横轴为建筑面积(平米),纵轴为单价(元/平米)。从图中能够看出建筑面积与单价并无显着关系,同样样本点分布也较为集中,离散值不多,但单价稀奇高的房源,建筑面积都不是太大,或者因为这些房源一样都位于市中心。

基于Python的南京二手房数据可视化剖析

图27 南京二手房单价与建筑面积散点图

4.4 南京二手房衡宇属性可视化剖析

4.4.1 南京二手房衡宇户型占比情形

从南京二手房衡宇户型饼状图(图28)中能够看出,2室1厅与2室2厅作为尺度设置,一共占比接近一半。个中3室2厅和3室1厅的房源也占比不少,其他衡宇户型的房源占比就对照少了。

基于Python的南京二手房数据可视化剖析

图28 南京二手房衡宇户型饼状图

4.4.2 南京二手房衡宇装修情形

从南京二手房衡宇装修情形饼状图(图29)能够看出,近60%的房源的衡宇装修情形都是其他,或者因为房源悉数为二手房的原因,人人都自立装修过的。

基于Python的南京二手房数据可视化剖析

图29 南京二手房装修情形饼状图

4.4.3 南京二手房衡宇朝向分布情形

南京二手房衡宇朝向柱状图(图30)横轴为衡宇朝向,纵轴为房源数量(套)。从图中我们能够看出,只有少数几种的朝向对照多,其余的都非常少,显着属于长尾分布类型(严重偏态)。这也相符我们的熟悉,衡宇朝向一半以上都是坐北朝南的。

基于Python的南京二手房数据可视化剖析

图30 南京二手房衡宇朝向分布柱状图

4.4.4 南京二手房建筑类型占比情形

从南京二手房建筑类型饼状图(图31)中,我们能够看出房源的建筑类型65.6%都是板楼,如今房地产商喜欢斥地的塔楼反而较少,这和南京二手房建筑时间都对照长远相符。

基于Python的南京二手房数据可视化剖析

图31 南京二手房建筑类型饼状图

5 数据聚类剖析

该阶段采用聚类算法中的k-means算法对所有二手房数据进行聚类剖析,凭据聚类的究竟和经验,将这些房源大略分类,已达到对数据归纳总结的目的。在聚类过程中,我们选择了面积、总价和单价这三个数值型变量作为样本点的聚类属性。

5.1 k-means算法道理

5.1.1 根基道理

k-Means算法是一种使用最遍及的聚类算法,它是一种无监视进修算法,目的是将相似的对象归到统一个簇中。簇内的对象越相似,聚类的结果就越好。该算法不适合处理离散型属性,但对于一连型属性具有较好的聚类结果。

5.1.2 聚类结果剖断尺度

使各个样本点与地点簇的质心的误差平方和达到最小,这是评价k-means算法最后聚类结果的评价尺度。

基于Python的南京二手房数据可视化剖析

5.1.3 算法实现步伐

1)选定k值

2)建立k个点作为k个簇的肇端质心。

3)离别较量剩下的元素到k个簇的质心的距离,将这些元素离别划归到距离最小的簇。

4)凭据聚类究竟,从新较量k个簇各自的新的质心,即取簇中悉数元素各自维度下的算术平均值。

5)将悉数元素按照新的质心从新聚类。

6)反复第5步,直到聚类究竟不再转变。

7)最后,输出聚类究竟。

5.1.4 算法瑕玷

固然K-Means算法道理简洁,然则有自身的缺陷:

1)聚类的簇数k值需在聚类前给出,但在好多时候中k值的选定是十分难以估量的,好多情形我们聚类前并不清楚给出的数据集该当分成几多类才最得当。

2)k-means需要工资地确定初始质心,纷歧样的初始质心或者会得出不同很大的聚类究竟,无法包管k-means算法收敛于全局最优解。

3)对离群点敏感。

4)究竟不不乱(受输入顺序影响)。

5)时间复杂度高O(nkt),个中n是对象总数,k是簇数,t是迭代次数。

5.2 算法实现要害问题解说

5.2.1 K值的选定解说

凭据聚类原则:组内差距要小,组间差距要大。我们先算出分歧k值下各个SSE(Sum of

squared

errors)值,然后绘制出折线图(图32)来对照,从中选定最优解。从图中,我们能够看出k值达到5今后,SSE转变趋于平缓,所以我们选定5作为k值。

基于Python的南京二手房数据可视化剖析

图32 分歧k值下SSE值折线图

5.2.2 初始的K个质心选定解说

初始的k个质心选定是采用的随机法。从各列数值最大值和最小值中央按正太分布随机拔取k个质心。5.2.3

关于离群点

离群点就是远离整体的,非常非常、非常特别的数据点。因为k-means算法对离群点十分敏感,所以在聚类之前应该将这些“极大”、“极小”之类的离群数据都去掉,不然会对于聚类的究竟有影响。离群点的剖断尺度是凭据前面数据可视化剖析过程的散点图和箱线图进行剖断。凭据散点图和箱线图,需要去除离散值的局限如下:

1)单价:根基都在100000以内,没有稀奇的非常值。

2)总价:根基都集中在3000以内,这里我们需要去除3000外的非常值。

3)建筑面积:根基都集中在500以内,这里我们需要去除500外的非常值。

5.2.4 数据的尺度化

因为总价的单元单子为万元,单价的单元单子为元/平米,建筑面积的单元单子为平米,所以数据点较量出欧几里德距离的单元单子是没有意义的。同时,总价都是3000以内的数,建筑面积都是500以内的数,但单价根基都是20000以上的数,在较量距离时单价起到的感化就比总价大,总价和单价的感化都弘远于建筑面积,如许聚类出来的究竟是有问题的。如许的情形下,我们需要将数据尺度化,即将数据按比例缩放,使之都落入一个特定区间内。去除数据的单元单子限制,将其转化为无量纲的纯数值,便于分歧单元单子或量级的指标可以进行较量和对照。

我们将单价、总价和面积都映射到500,因为面积自己就都在500以内,不要稀奇处理。单价在较量距离时,需要先乘以映射比例0.005,总价需要乘以映射比例0.16。进行数据尺度化前和进行数据尺度化后的聚类结果对好比下:图32、图33是没稀有据尺度化前的聚类结果散点图;图34、图35是数据尺度化后的聚类结果散点图。

数据尺度化前的单价与建筑面蕴蓄类结果散点图:

基于Python的南京二手房数据可视化剖析

图32 数据尺度化前的单价与建筑面积散点图

数据尺度化前总价与建筑面蕴蓄类结果散点图。

基于Python的南京二手房数据可视化剖析

图33 数据尺度化前总价与建筑面积散点图

数据尺度化后单价与建筑面蕴蓄类结果散点图。

基于Python的南京二手房数据可视化剖析

图34 数据尺度化后单价与建筑面积散点图

数据尺度化后总价与建筑面蕴蓄类结果散点图。

基于Python的南京二手房数据可视化剖析

图35 数据尺度化后总价与建筑面积散点图

5.3 聚类究竟剖析

聚类究竟如下

1)聚类究竟统计信息如下:

基于Python的南京二手房数据可视化剖析

2)聚类后的单价与建筑面积散点图和总价与建筑面积散点图见图34、图35。

3)聚类究竟分组0、1、2、3、4的区域分布图离别如下:图36、图37、图38、图39、图40。

聚类究竟分组0的区域分布图如下:

基于Python的南京二手房数据可视化剖析

图36 聚类究竟0区域分布图

聚类究竟分组1的区域分布图如下:

基于Python的南京二手房数据可视化剖析

图37 聚类究竟1区域分布图

聚类究竟分组2的区域分布图如下:

基于Python的南京二手房数据可视化剖析

图38 聚类究竟2区域分布图

聚类究竟分组3的区域分布图如下:

基于Python的南京二手房数据可视化剖析

图39 聚类究竟3区域分布图

聚类究竟分组4的区域分布图如下:

基于Python的南京二手房数据可视化剖析

图40 聚类究竟4区域分布图

凭据以上聚类究竟和我们的经验剖析,我们大略能够将这20000多套房源分为以下4类:

a、大户型(面积大,总价高),属于第0类。平均面积都在200平以上,这种大户型的房源相对数量较少,首要分布在鼓楼、建邺、江宁、栖霞等地(具体可从各类中的区域分布图可知)。

b、地段型(单价高),属于第2、4类。这种房源环绕南京市中心位置集平分布,地舆位置极好,交通轻易,首要分布鼓楼、玄武、建邺、建邺等地(具体可从各类中的区域分布图可知)。

c、公共蜗居型(面积小、价钱相对较低、房源多),属于第3类。这类房源分布局限广,首要环绕在各地铁线双方。典型的区域有秦淮、鼓楼、江宁、玄武、浦口等地。

d、高性价比型(面积相对大,单价低),属于第1类。典型的区域有栖霞、浦口、江宁等地。

相关文章