R语言数据分析练手小项目:杭州二手房数据分析
作者:鲁伟
一个数据科学践行者的学习日记。数据挖掘与机器学习,R与Python,理论与实践并行。个人公众号:数据科学家养成记 (微信ID:louwill12)
记得上次小编用rvest包从某家网上爬取了杭州二手房数据,并详细介绍了爬取经过,后来小编有听到反馈说“哎,你这什么分析都没有啊”,当然什么分析都没有咯,小编给大家介绍就是如何用R语言来抓数据。后来小编一想,这好好的数据不能闲置,于是就拿来做一点分析,正好最近又在学习ggplot2,一起拿来进行简单的数据分析练手吧。本文参考了R语言中文社区李晓文的上海二手房数据分析,他数据量比较大,拿清洗后的数据做了完整的回归分析和k均值聚类,限于数据特征的原因,小编这里后来放弃了做回归的打算,仅在ggplot2图形展示之后给了一个聚类分析,毕竟小编这里做的是简单的数据分析嘛。
R语言中文社区上海二手房数据分析案例:
https://zhuanlan.zhihu.com/p/24802969
将上次的爬虫代码稍微修改了下,以便对杭州各主城区进行分城区抓取。想了解抓取过程的童鞋可在文末点击阅读全文。总共抓取了杭州8个主城区大约8000条二手房数据,清洗后共得到7331条数据。有人可能会说我数据量比较小,数据确实是有点少了但那也没办法,杭州比不了北京和上海有那么多二手房房源。数据集有12个属性,包括房名、户型、面积、朝向、装修情况、有无电梯、地址、房龄、房屋总价、房屋单价和所属城区。完整数据结构如图所示。
为了对房屋面积、房龄和房价这样的连续属性进行分组,小编在数据集里面增加了四列,分别是面积分组、房龄分组、总价分组和单价分组。可在R里面简单看一下数据集的数据结构:
接下来主要结合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万以上的房子,扎心了老铁!以后想在杭州买房的童鞋看到这些小区的名字赶紧躲开哈!
虽说我们数据不多只有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"))
对照该图和前述分析,相信大家能对杭州二手房的聚类分析有一个直观的感受啦。小编的杭州二手房数据分析练手到这里就结束啦,还有很多值得挖掘的内容,在这里限于篇幅就不去做了,大家有兴趣可以找我拿到数据按照这些套路自己练一练,这些都是可行的。
说是简单的数据分析,但全程做下来小编也是花了不少时间的。基本的数据清洗就花了一整天时间,更不用说后面的画图调参数之类。还是那句话,纸上得来终觉浅,绝知此事要躬行。ggplot2我也是最近才上手,很多地方还很茫然,前面画图小到调一个简单的参数都要琢磨好久,但我相信这就是学习数据分析的过程,鼓励大家和小编一样,自己动手按照个人兴趣整一个数据集,然后用R或者Python进行分析,当你开始做了你就上道了。
回想小编当初刚读研那会儿,某天晚上躺在床上愉快地刷着知乎,刷到一条“数据分析是21世纪最性感的职业”,于是小编就很激动,认为自己找到了方向,下决心毅然决然地要成为一名数据分析师。后来,数据科学家这一名词又火起来了,作为一名对新事物极为敏感的小编,又下决心要成为一名数据科学家,快两年过去了,小编心底默默感激这个充满机会与挑战的数据时代,当初的那份对数据分析的热情好在还留在自己的精气神里。与诸位共勉!
微信回复关键字即可学习
回复 R R语言快速入门免费视频
回复 统计 统计方法及其在R中的实现
回复 用户画像 民生银行客户画像搭建与应用
回复 大数据 大数据系列免费视频教程
回复 可视化 利用R语言做数据可视化
回复 数据挖掘 数据挖掘算法原理解释与应用
回复 机器学习 R&Python机器学习入门