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

2020-06-16 00:00:00 数据 小编 杭州 单价 二手房

作者:鲁伟

一个数据科学践行者的学习日记。数据挖掘与机器学习,R与Python,理论与实践并行


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

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

zhuanlan.zhihu.com/p/24


1数据准备

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



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


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

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

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

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




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

杭州二手房户型分布:

type5<-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()

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

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

杭州二手房地点分布:

address5<-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世纪性感的职业”,于是小编就很激动,认为自己找到了方向,下决心毅然决然地要成为一名数据分析师。后来,数据科学家这一名词又火起来了,作为一名对新事物极为敏感的小编,又下决心要成为一名数据科学家,快两年过去了,小编心底默默感激这个充满机会与挑战的数据时代,当初的那份对数据分析的热情好在还留在自己的精气神里。与诸位共勉!

相关文章