记得上次用rvest包从某家网上爬取了杭州二手房数据,并详细介绍了爬取经过,后来有朋友留言说“哎,你这什么分析都没有啊”,当然什么分析都没有咯,小编给大家介绍就是如何用R语言来抓数据。后来小编一想,这好好的数据不能闲置,于是就拿来做一点分析,正好最近又在学习ggplot2,一起拿来进行简单的数据分析练手吧。本文参考了R语言中文社区的上海二手房数据分析,它的数据量比较大,拿清洗后的数据做了完整的回归分析和k均值聚类,限于数据特征的原因,小编这里后来放弃了做回归的打算,仅在ggplot2图形展示之后给了一个聚类分析,毕竟这里做的是简单的数据分析。
将上次的爬虫代码稍微修改了下,以便对杭州各主城区进行分城区抓取。想了解抓取过程的童鞋可在文末点击阅读全文。总共抓取了杭州8个主城区大约8000条二手房数据,清洗后共得到7331条数据。有人可能会说我数据量比较小,数据确实是有点少了但那也没办法,杭州比不了北京和上海有那么多二手房房源。数据集有12个属性,包括房名、户型、面积、朝向、装修情况、有无电梯、地址、房龄、房屋总价、房屋单价和所属城区。完整数据结构如图所示。
为了对房屋面积、房龄和房价这样的连续属性进行分组,小编在数据集里面增加了四列,分别是面积分组、房龄分组、总价分组和单价分组。可在R里面简单看一下数据集的数据结构:
接下来主要结合ggplot2对杭州二手房数据进行简单的可视化展示,一方面了解下目前杭州的二手房房价行情,另一方面就是为了练习ggplot2绘图语法,毕竟以后画图全用它了。
杭州二手房各区房源数量分布:
ggplot(hzhouse, aes(region)) + geom_bar(width = 0.7, fill = "skyblue3")
总体来看市区的二手房市场还是相对活跃的,西湖区拥有最多的二手房房源,可能是得益于其较大的城区面积,余杭大多属于城郊,也因为其面积较大,二手房数量也比较多。其余主城区二手房房源数量差距并不大,在此按下不表。
杭州二手房户型分布:
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元,看来在杭州买房的人还是喜欢偏大户型,但最重要的还是有钱。
typeup30 <- c('3室2厅','2室2厅','2室1厅','4室2厅','1室1厅','3室2厅','1室0厅','5室2厅','5室3厅','4室3厅','6室2厅','1室2厅','2室0厅','4室1厅','6室3厅')
hzhouse$type.new <- ifelse(hzhouse$type %in% typeup30, hzhouse$type, 'others')
typenew <- data.frame(table(hzhouse$type.new))
ggplot(typenew, aes(reorder(Var1,-Freq), Freq)) + geom_bar(stat = 'identity', fill = "skyblue3") + geom_text(aes(label = Freq), hjust = 0.5,vjust = -0.3) + xlab('type') + ylab('counts')
杭州二手房户型前15分布图:
杭州二手房面积分布:
ggplot(hzhouse, aes(area_fz)) + geom_bar(fill = "skyblue3")
面积在50~100平米之间的二手房约占了45%,200平米以上的豪宅仅占了8%,结合前面的最受欢迎的3室2厅户型来看,杭州二手房面积基本还是集中在100平左右。
杭州二手房房屋朝向前五统计
sort(table(hzhouse$orientation),decreasing=T)[1:5]
南 南北 北 东南 东
3970 2256 196 176 138
买过房或者住寝室的大多会对房屋朝向耿耿于怀。就拿小编研究生寝室来说吧,阳台正怼着北边,常年不见天日,搁杭州这温暖潮湿的空气衣服发霉那是常有的事儿。还有东西向的只有早晚才能见阳光,北向的天天喝西北风,衣服也晒不干,至于风水讲究什么的就更复杂了,反正房屋朝向对于买房者而言肯定是重中之重了。
中国人自古讲究房屋坐北朝南,杭州二手房朝向当然毫不例外的是南或南北朝向,而地理原因、城市规划等都有可能是存在其他朝向的房屋的原因。
杭州二手房楼层分布:
ggplot(hzhouse, aes(floor)) + geom_bar(width = 0.5,fill = "skyblue3")
买房者对楼层的重视也是不言而喻,按理说顶层和低层的房子一般人都不太喜欢,顶层房子冬天冷夏天热,低楼层比较潮湿等等,这两种房子住起来不是那么舒服,所以原本以为卖房的大部分是这两种楼层。 不过从数据上看,楼层分布比较平均,原因可能和楼层的划分有关系,比如一座16层的楼房,1 ~ 5为低层,6 ~ 10为中层,11 ~ 16为高层,这样中楼层就比较多了。也不知道未知楼是什么鬼,可能是地下室也说不准。
杭州二手房房龄分布:
ggplot(hzhouse,aes(year)) + geom_bar(fill = "skyblue3")
从图上看,杭州房子在05年和09年分别有一个建造高峰,具体当年是怎样的开发背景小编也没有去查,总之杭州二手房整体房龄还是较小的,市场上特别老的房子并不多。
杭州二手房单价分布:
ggplot(hzhouse, aes(unitprice)) + geom_histogram(fill = "skyblue3")
原来杭州也有总价超4000万、单价近10万的二手房,赶紧查下数据看看是何方宝地,原来是东方润园的一套豪华联排别墅,吃根辣条压压惊。杭州二手房数据总体概览就简单看下了,下面再看看分城区的二手房数据概览。
先看看各城区二手房市场均价:
avg_unitprice <- aggregate(hzhouse$unitprice, by = list(hzhouse$region), mean)
avg_unitprice
Group.1 x
1 滨江区 16055.57
2 拱墅区 19234.16
3 江干区 30840.30
4 上城区 28059.14
5 西湖区 31595.43
6 下城区 30222.90
7 萧山区 27901.41
8 余杭区 33646.74
反正这房子小编是觉得买不起了。
各城区二手房均价分布:
杭州各城区总价分布:
ggplot(hzhouse, aes(region, totalprice)) + geom_boxplot(outlier.colour="darkgreen", fill="skyblue3") + ylim(0,2000)
上城、西湖和滨江二手房总价均值和中位数都位居前列,且数据分布空间也比较广,而余杭等离市区较远的城区分布则较为集中,可能是同一时期建造的缘故。余杭区有个很明显2000万的异常点。
各城区单价分布:
ggplot(hzhouse, aes(region, unitprice)) + geom_boxplot(outlier.colour = "darkgreen", fill = "skyblue3") + ylim(5000,1000)
简单说下单价的几点,出去萧山和余杭之外,杭州其他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),]
ggplot(newhzhouse, aes(address, unitprice)) + geom_bar(stat= "identity", fill = "skyblue3") + geom_text(aes(label = unitprice), colour = "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),]
ggplot(haozfang, aes(address, totalprice)) + geom_bar(stat = "identity", fill = "skyblue3") + 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
table(hzhouse$region, clust$cluster)
1 2 3 4 5 6
滨江区 343 20 1 38 3 378
拱墅区 405 80 2 79 18 308
江干区 135 161 115 262 10 127
上城区 45 43 42 257 8 236
西湖区 112 114 171 684 23 405
下城区 164 113 107 348 21 194
萧山区 108 43 42 184 5 146
余杭区 128 227 212 481 33 149
aggregate(hzhouse$area, list(hzhouse$type), mean)
Group.1 x
1 0室1厅 53.39500
2 0室2厅 51.33000
3 0室3厅 102.00000
4 0室5厅 185.00000
5 0室7厅 157.65000
6 11室5厅 133.00000
7 12室0厅 103.00000
8 13室5厅 994.00000
9 1室0厅 61.67206
10 1室1厅 53.11600
按聚类结果,比较各类中房子的平均面积、平均价格和平均单价:
aggregate(hzhouse[,c(3,10,11)], list(clust$cluster), mean)
Group.1 area totalprice unitprice
1 1 140.45822 264.7014 18968.43
2 2 202.27441 628.9700 32011.09
3 3 111.02678 543.7095 49775.58
4 4 79.55775 252.9940 31921.65
5 5 328.45289 1617.2479 50873.14
6 6 67.56440 125.1951 18940.49
所以,大体上而言,我们就可以将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类,地段极好,在地铁口的几率极大,算不上大户型但价格惊人。
最后绘制面积与单价的散点图,并按聚类进行划分:
ggplot(hzhouse[,c(3,10,11)], aes(x = area, y = unitprice, color = factor(clust$cluster))) + geom_point(pch = 20,size =3) + scale_colour_manual(values = c("red","blue","darkgreen","pink","orange","purple"))
对照该图和前述分析,相信大家能对杭州二手房的聚类分析有一个直观的感受啦。小编的杭州二手房数据分析练手到这里就结束啦,还有很多值得挖掘的内容,在这里限于篇幅就不去做了,大家有兴趣可以找我拿到数据按照这些套路自己练一练,这些都是可行的。
说是简单的数据分析,但全程做下来小编也是花了不少时间的。基本的数据清洗就花了一整天时间,更不用说后面的画图调参数之类。还是那句话,纸上得来终觉浅,绝知此事要躬行。ggplot2我也是最近才上手,很多地方还很茫然,前面画图小到调一个简单的参数都要琢磨好久,但我相信这就是学习数据分析的过程,鼓励大家和小编一样,自己动手按照个人兴趣整一个数据集,然后用R或者Python进行分析,当你开始做了你就上道了。
回想小编当初刚读研那会儿,某天晚上躺在床上愉快地刷着知乎,刷到一条“数据分析是21世纪最性感的职业”,于是小编就很激动,认为自己找到了方向,下决心毅然决然地要成为一名数据分析师。后来,数据科学家这一名词又火起来了,作为一名对新事物极为敏感的小编,又下决心要成为一名数据科学家,快两年过去了,小编心底默默感激这个充满机会与挑战的数据时代,当初的那份对数据分析的热情好在还留在自己的精气神里。
参考资料
https://zhuanlan.zhihu.com/p/24802969
推荐阅读
更多微课请关注【数萃大数据】公众号,点击学习园地—可视化
欢迎大家关注微信公众号:数萃大数据
python大数据分析培训班【杭州站】
时间:2017年8月18日-22日
地点:杭州亚朵吴酒店
更多详情,请扫描下面二维码
网络爬虫与文本挖掘培训班【宁波站】
时间:2017年9月23日-25日
地点:维也纳国际酒店(机场店)
更多详情,请扫描下面二维码