查看原文
其他

R语言数据分析练手小项目:杭州二手房数据分析

2017-09-06 鲁伟 R语言中文社区

作者:鲁伟

一个数据科学践行者的学习日记。数据挖掘与机器学习,R与Python,理论与实践并行。个人公众号:数据科学家养成记 (微信ID:louwill12)


记得上次小编用rvest包从某家网上爬取了杭州二手房数据,并详细介绍了爬取经过,后来小编有听到反馈说“哎,你这什么分析都没有啊”,当然什么分析都没有咯,小编给大家介绍就是如何用R语言来抓数据。后来小编一想,这好好的数据不能闲置,于是就拿来做一点分析,正好最近又在学习ggplot2,一起拿来进行简单的数据分析练手吧。本文参考了R语言中文社区李晓文的上海二手房数据分析,他数据量比较大,拿清洗后的数据做了完整的回归分析和k均值聚类,限于数据特征的原因,小编这里后来放弃了做回归的打算,仅在ggplot2图形展示之后给了一个聚类分析,毕竟小编这里做的是简单的数据分析嘛。

R语言中文社区上海二手房数据分析案例:

https://zhuanlan.zhihu.com/p/24802969

1数据准备

将上次的爬虫代码稍微修改了下,以便对杭州各主城区进行分城区抓取。想了解抓取过程的童鞋可在文末点击阅读全文。总共抓取了杭州8个主城区大约8000条二手房数据,清洗后共得到7331条数据。有人可能会说我数据量比较小,数据确实是有点少了但那也没办法,杭州比不了北京和上海有那么多二手房房源。数据集有12个属性,包括房名、户型、面积、朝向、装修情况、有无电梯、地址、房龄、房屋总价、房屋单价和所属城区。完整数据结构如图所示。

为了对房屋面积、房龄和房价这样的连续属性进行分组,小编在数据集里面增加了四列,分别是面积分组、房龄分组、总价分组和单价分组。可在R里面简单看一下数据集的数据结构:

2杭州二手房数据总体概览

接下来主要结合ggplot2对杭州二手房数据进行简单的可视化展示,一方面了解下目前杭州的二手房房价行情,另一方面就是为了练习ggplot2绘图语法,毕竟以后画图全用它了。

杭州二手房各区房源数量分布:

ggplot(hzhouse,aes(region))+geom_bar(width=0.7)


总体来看市区的二手房市场还是相对活跃的,西湖区拥有最多的二手房房源,可能是得益于其较大的城区面积,余杭大多属于城郊,也因为其面积较大,二手房数量也比较多。其余主城区二手房房源数量差距并不大,在此按下不表。

杭州二手房户型分布:

typetop15<-sort(summary(hzhouse$type),decreasing=T)[1:10]

3室2厅 2室2厅 2室1厅 4室2厅 1室1厅 3室1厅 1室0厅 5室2厅 5室3厅 4室3厅 

2234   1117    957    791    790    406    369    229    62    50 

杭州二手房最受欢迎的户型竟然是3室2厅型,而全城3室2厅型二手房房均面积有119.586平米,户型均价也有27740.64元,看来在杭州买房的人还是喜欢偏大户型,但最重要的还是有钱。

aggregate(hzhouse$unitprice,by=list(hzhouse$type),mean)

hzhouse[which(hzhouse$type=="3室2厅"),]    

杭州二手房户型前15分布图:

    

杭州二手房面积分布:

ggplot(hzhouse,aes(area_fz))+geom_bar()

面积在50~100平米之间的二手房约占了45%,200平米以上的豪宅仅占了8%,结合前面的最受欢迎的3室2厅户型来看,杭州二手房面积基本还是集中在100平左右。

杭州二手房房屋朝向:

ggplot(hzhouse,aes(orientation))+geom_bar()    

买过房或者住寝室的大多会对房屋朝向耿耿于怀。就拿小编研究生寝室来说吧,阳台正怼着北边,常年不见天日,搁杭州这温暖潮湿的空气衣服发霉那是常有的事儿。还有东西向的只有早晚才能见阳光,北向的天天喝西北风,衣服也晒不干,至于风水讲究什么的就更复杂了,反正房屋朝向对于买房者而言肯定是重中之重了。

中国人自古讲究房屋坐北朝南,杭州二手房朝向当然毫不例外的是南或南北朝向,而地理原因、城市规划等都有可能是存在其他朝向的房屋的原因。

杭州二手房地点分布:

addresstop15<-sort(summary(hzhouse$address),decreasing=T)[1:15]

addrup120<-c('闲林','滨江区政府','翠苑','近江','临平山北','竞舟','申花','转塘','三墩','西溪','临平新城','桥西','湖墅','朝晖')

addrnew<-data.frame(table(hzhouse$addr.new))

adr<-ggplot(addrnew,aes(reorder(Var1,Freq),Freq))+geom_bar(stat='identity')+geom_text(aes(label=Freq),hjust=0.5,vjust=-0.3)+xlab('address')+ylab('counts')

闲林   滨江区政府 翠苑     近江       申花      临平山北 

215        212        145        144        140          136 

竞舟       转塘       三墩       西溪   临平新城       桥西       湖墅 

133        133        130        128        127          127         124 

朝晖 

120 

可以看出老城区还是有一定的二手房数量的,部分近年来开发的楼盘也有大量的房子流向二手房市场,像临平山北和滨江区政府这些地方,大概是G20后杭州火爆的二手房市场所致。本来还打算用leafCN包对这几个地方在杭州市地图上标一下的,后来又觉得没多大意义就作罢了。

杭州二手房楼层分布:

ggplot(hzhouse,aes(floor))+geom_bar(width=0.5)

买房者对楼层的重视也是不言而喻,按理说顶层和低层的房子一般人都不太喜欢,顶层房子冬天冷夏天热,低楼层比较潮湿等等,这两种房子住起来不是那么舒服,所以原本以为卖房的大部分是这两种楼层。  不过从数据上看,楼层分布比较平均,原因可能和楼层的划分有关系,比如一座16层的楼房,1 ~ 5为低层,6 ~ 10为中层,11 ~ 16为高层,这样中楼层就比较多了。也不知道未知楼是什么鬼,可能是地下室也说不准。

杭州二手房房龄分布:

ggplot(hzhouse,aes(year))+geom_bar()

    

从图上看,杭州房子在05年和09年分别有一个建造高峰,具体当年是怎样的开发背景小编也没有去查,总之杭州二手房整体房龄还是较小的,市场上特别老的房子并不多。

杭州二手房总价和单价分布:

ggplot(hzhouse,aes(totalprice))+geom_histogram()

ggplot(hzhouse,aes(unitprice))+geom_histogram()

    

原来杭州也有总价超4000万、单价近10万的二手房,赶紧查下数据看看是何方宝地,原来是东方润园的一套豪华联排别墅,吃根辣条压压惊。杭州二手房数据总体概览就简单看下了,下面再看看分城区的二手房数据概览。

3杭州各城区二手房数据概览

先看看各城区二手房市场均价:

aggregate(hzhouse$unitprice,by=list(hzhouse$region),mean)

avg_unitprice

Group.1        x

1  滨江区 31930.84

2  拱墅区 28698.09

3  江干区 25610.21

4  上城区 37424.68

5  西湖区 33000.81

6  下城区 30126.85

7  萧山区 19670.84

8  余杭区 17200.02

反正这房子小编是觉得买不起了。

各城区二手房均价分布:

杭州各城区总价分布:

tb<-ggplot(hzhouse,aes(region,totalprice))

tb+geom_boxplot(outlier.colour="darkgreen",fill="grey80")+ylim(0,2000)

上城、西湖和滨江二手房总价均值和中位数都位居前列,且数据分布空间也比较广,而余杭等离市区较远的城区分布则较为集中,可能是同一时期建造的缘故。余杭区有个很明显2000万的异常点哈。

各城区单价分布:

ub<-ggplot(hzhouse,aes(region,unitprice))

ub+geom_boxplot(outlier.colour="darkgreen",fill="grey80")+ylim(5000,100000)

简单说下单价的几点,出去萧山和余杭之外,杭州其他6个城区的二手房单价大多都在25000以上,杭州本身核心城区并不大,6个主城区在地理上都比较紧凑,相互之间并不存在价格的大差距。现在单价10k的二手房在杭州可真没有了。江干的那个单价10万的房子可真扎眼啊,还扎心,没错,就是那套在前面揪出来的东方润园联排别墅。

限于篇幅,杭州各城区面积和房龄的箱线图分布这里就不摆了哈,再简单看两个扎心的数据就结束本节。

杭州单价最贵二手房地点分布:

newhzhouse<-subset(hzhouse,hzhouse$unitprice>=78000,select=c(address,unitprice))

newhzhouse<-newhzhouse[-c(3,6,10,11,12,14,15,16,17,18,19,20,21),]

ng<-ggplot(newhzhouse,aes(address,unitprice))+geom_bar(stat="identity")+geom_text(aes(label=unitolprice),cour="black",hjust=0.5,vjust=-0.3)

单价10万的那个联排别墅在钱江新城哈,见怪不怪。

杭州哪些地方豪宅多:

haozfang<-subset(hzhouse,hzhouse$totalprice>=1800,select=c(address,totalprice))

haozfang<-haozfang[-c(5,6,9,10,11,15,16,19,20,22,24),]

ng<-ggplot(haozfang,aes(address,totalprice))+geom_bar(stat="identity")

ng+geom_text(aes(label=totalprice),colour="black",hjust=0.5,vjust=-0.3)

    

都是1800万以上的房子,扎心了老铁!以后想在杭州买房的童鞋看到这些小区的名字赶紧躲开哈!

4杭州二手房数据的简单聚类分析

虽说我们数据不多只有7000条,但为了练手小编也决定给这7000条二手房数据分个类,看看哪些房子应该被放在一起,考察下各类二手房的总体特征如何。在采用k均值聚类法之前,我们先看看这些数据到底能聚为几类。    

standrad<-data.frame(scale(hzhouse[,c("area","totalprice","unitprice")]))

myplot<-tot.wssplot(standrad,nc=15)

其中tot.wssplot为自编函数,这里就限于篇幅就不放函数代码了。

不同聚类数目下的组内平方和图:

从该图可以看出,我们将数据聚为6类较为合适。下面直接进行k均值聚类:

set.seed(1234)

clust<-kmeans(x=standrad,centers=6,iter.max=100)

table(clust$cluster)

1         2      3     4       5      6 

1440  801  692 2333  121 1943 

6类二手房各自房屋数量如上。

按照聚类的结果,查看各类中的区域分布:

table(hzhouse$region,clust$cluster)

    

 各户型的平均面积:

 aggregate(hzhouse$area,list(hzhouse$type),mean)

    

 按聚类结果,比较各类中房子的平均面积、平均价格和平均单价:

 aggregate(hzhouse[,c(3,10,11)],list(clust$cluster),mean)

所以,大体上而言,我们就可以将7000多套杭州二手房划分为以下几类:

    1. 超大户型。如上述第2类,平均面积在200平以上,总价和单价都比较高,户型也在4室2厅以上。这类房源大多处于城区中心,地理位置优越,各类资源集中造就其高价。

    2. 豪宅型。如上述第5类,基本以联排别墅为主,地段好,房子大,精装修,价格超千万。7000多套杭州二手房仅有121套这样的房子,毕竟是豪宅。

    3. 城郊大户型。如上述第1类,该类房源面积大,户型在3室2厅以上,但总价并不夸张,单价也是6类房型中较低的,可以预见的是这类房源并不在市中心或者离市中心较远。萧山部分、余杭多这样的房源。

    4. 精装小户型。如上述第4类,房子不大但价格不菲,多是地段优越的精装小户型,以2室1厅或3室1厅为主,全杭州这样的房源最多。

    5. 单身公寓或大众蜗居型。如上述第6类,和第4类一样,该类房型也是杭州的主流二手房类型之一,面积略小于精装小户型,价格相对便宜,是在城市打拼的年轻人的首选。

    6. 地段型。上述第3类,地段极好,在地铁口的几率极大,算不上大户型但价格惊人。

最后绘制面积与单价的散点图,并按聚类进行划分:

p<-ggplot(data=hzhouse[,c(3,10,11)],mapping=aes(x=area,y=unitprice,color=factor(clust$cluster)))

p<-p+geom_point(pch=20,size=3)

p+scale_colour_manual(values=c("red","blue","darkgreen","pink","orange","purple"))

对照该图和前述分析,相信大家能对杭州二手房的聚类分析有一个直观的感受啦。小编的杭州二手房数据分析练手到这里就结束啦,还有很多值得挖掘的内容,在这里限于篇幅就不去做了,大家有兴趣可以找我拿到数据按照这些套路自己练一练,这些都是可行的。

4结语

 说是简单的数据分析,但全程做下来小编也是花了不少时间的。基本的数据清洗就花了一整天时间,更不用说后面的画图调参数之类。还是那句话,纸上得来终觉浅,绝知此事要躬行。ggplot2我也是最近才上手,很多地方还很茫然,前面画图小到调一个简单的参数都要琢磨好久,但我相信这就是学习数据分析的过程,鼓励大家和小编一样,自己动手按照个人兴趣整一个数据集,然后用R或者Python进行分析,当你开始做了你就上道了。

回想小编当初刚读研那会儿,某天晚上躺在床上愉快地刷着知乎,刷到一条“数据分析是21世纪最性感的职业”,于是小编就很激动,认为自己找到了方向,下决心毅然决然地要成为一名数据分析师。后来,数据科学家这一名词又火起来了,作为一名对新事物极为敏感的小编,又下决心要成为一名数据科学家,快两年过去了,小编心底默默感激这个充满机会与挑战的数据时代,当初的那份对数据分析的热情好在还留在自己的精气神里。与诸位共勉!



微信回复关键字即可学习

回复 R              R语言快速入门免费视频 
回复 统计          统计方法及其在R中的实现
回复 用户画像   民生银行客户画像搭建与应用 
回复 大数据      大数据系列免费视频教程
回复 可视化      利用R语言做数据可视化
回复 数据挖掘   数据挖掘算法原理解释与应用
回复 机器学习   R&Python机器学习入门 


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存