一、原始数据提取
从链家网站上获取杭州九大城区的二手房在售信息,并存为csv文件。主要使用的工具包有:stringr,rvest,dplyr和xml2,ggplot2。辅助工具:SelectorGadget插件。部分代码如下:
获取到的原始数据结构如下:去重后一共有24545条有效数据,部分列存在空缺值,已用NA填充。
二、数据分析
主要包括数据的读取、各区域二手房的房源数量、房源单价、房源总价、面积等信息的分析。
rm(list=ls())
options(stringsAsFactors = F)
install.packages("ggplot2")
library(ggplot2)
house_lianjia.new=read.csv(file = "C:/Users/Linda/Documents/house_lianjia.csv",sep = ",",header = TRUE,fill = TRUE,na.strings = "") #将空值赋值为NA
str(house_lianjia.new)
class(house_lianjia.new)
colnames(house_lianjia.new)=c("house_name","house_information","address","totalprice","unitprice","region","square","type")
#各区域房源数量柱状图
ggplot(house_lianjia.new,aes(region))+geom_bar(width=0.4)
> head(sort(house_lianjia.new$totalprice,T))
[1] 7000 5800 4500 3800 3780 3500
> head(sort(house_lianjia.new$totalprice,F))
[1] 33.7 35.0 39.0 42.0 42.0 43.0
> mean(house_lianjia.new$totalprice)
[1] 359.0199
> head(sort(house_lianjia.new$unitprice,T))
[1] 176282 145650 143596 141831 135965 130284
> head(sort(house_lianjia.new$unitprice,F))
[1] 8805 9002 9168 9876 9998 10106
> mean(house_lianjia.new$unitprice)
[1] 37381.88
#绘制各区域总价分布的箱线图
>p=ggplot(house_lianjia.new,aes(region,totalprice))
> p+geom_boxplot(outlier.colour ="red",outlier.shape = 1,fill="grey80")+ylim(0,4000)
Warning message:
Removed 3 rows containing non-finite values (stat_boxplot)
#绘制各区域单价分布的箱线图
>u=ggplot(house_lianjia.new,aes(region,unitprice))
> u+geom_boxplot(outlier.colour ="red",outlier.shape = 1,fill="grey80")+ylim(5000,100000)
Warning message:
Removed 35 rows containing non-finite values (stat_boxplot).
#探究各个区域平均单价的分布情况
> avg_price <- aggregate(house_lianjia.new$unitprice, by = list(house_lianjia.new$region), mean)
> avg_price
Group.1 x
1 滨江区 41453.06
2 拱墅区 40541.72
3 江干区 37988.58
4 钱塘新区 26278.81
5 上城区 50359.54
6 西湖区 47262.94
7 下城区 41467.20
8 萧山区 29610.61
9 余杭区 25801.11
> avg_price2 <- aggregate(house_lianjia.new$unitprice, by = list(house_lianjia.new$region), fivenum)
> avg_price2
Group.1 x.1 x.2 x.3 x.4 x.5
1 滨江区 13233.0 35088.0 40127.0 46829.0 102357.0
2 拱墅区 12581.0 34567.5 39231.5 45902.0 141831.0
3 江干区 12253.0 30107.5 36790.0 43841.0 126937.0
4 钱塘新区 10106.0 20924.0 26164.0 30021.0 56294.0
5 上城区 14988.0 42931.0 47170.0 54616.5 176282.0
6 西湖区 18394.0 37852.0 44532.5 54738.0 145650.0
7 下城区 16465.0 34869.5 41364.0 46846.5 143596.0
8 萧山区 9002.0 23825.0 28058.5 33407.5 114685.0
9 余杭区 8805.0 21059.0 24548.5 29456.5 77146.0
#个别土豪小区的存在会明显拉高平均单价,为了避免极端值对平均数的影响,这里用中位数来衡量平均单价
> x=avg_price2$x[,3]
> avg_price2$Group.1
[1] "滨江区" "拱墅区" "江干区" "钱塘新区" "上城区" "西湖区" "下城区" "萧山区" "余杭区"
> Group.1=avg_price2$Group.1
> data.frame(Group.1,x)
Group.1 x
1 滨江区 40127.0
2 拱墅区 39231.5
3 江干区 36790.0
4 钱塘新区 26164.0
5 上城区 47170.0
6 西湖区 44532.5
7 下城区 41364.0
8 萧山区 28058.5
9 余杭区 24548.5
>avg_p=data.frame(Group.1,x)
#绘制各区域平均单价的折线图
> ggplot(avg_p,aes(x = reorder(Group.1, -x),y = x,group = 1))+geom_line() +geom_point(size=2,colour ="red") + xlab('') + ylab('均价')+geom_text(aes(label=x),vjust="inward")
#各区域平均面积分布
avg_area <- aggregate(house_lianjia.new$square, by = list(house_lianjia.new$region), mean)
#绘图
s <- ggplot(data = avg_area, mapping = aes(x = reorder(Group.1, -x), y = x, group = 1)) + geom_area(fill = 'lightgreen') + geom_line(colour = 'steelblue', size = 2) + geom_point() + xlab('') + ylab('平均面积')
####统计户型数量最多的前10种户型
> sort(summary(as.factor(house_lianjia.new$type)),decreasing = T)[1:10]
3室2厅 2室1厅 2室2厅 1室1厅 3室1厅 4室2厅 5室2厅 1室0厅 4室1厅 5室3厅
6996 4924 3289 3022 2361 2292 445 362 250 104
#二手房分布数量最多的前10个地方
> sort(table(house_lianjia.new$address),T)[1:10]
丁桥 临平 沿江南 滨江区政府 申花 萧山新城区 闲林 三墩 三塘 萧山市区
765 750 731 710 706 639 569 552 548 537
> house_available=house_lianjia.new[which(house_lianjia.new$totalprice<500),]
> house_proper=house_available[which(house_available$type=="3室2厅" |house_available$type=="3室1厅"|house_available$type=="2室1厅"|house_available$type=="2室2厅"|house_available$type=="1室1厅"|house_available$type=="4室1厅"),]
> nrow(house_proper)
[1] 18203
> ggplot(house_proper,aes(region))+geom_bar(width=0.4)
>ggplot(house_proper, aes(totalprice)) +
geom_histogram(aes(y=..density..),
binwidth=30,
colour="black", fill="white") +
geom_density(alpha=.2, fill="#FF6666")+geom_vline(aes(xintercept=mean(totalprice,na.rm=T)),colour="red",linetype="dashed",size=1)
> ggplot(house_proper, aes(unitprice)) +
+ geom_histogram(aes(y=..density..),
+ binwidth=30,
+ colour="black", fill="white") +
+ geom_density(alpha=.2, fill="#FF6666")+geom_vline(aes(xintercept=mean(unitprice,na.rm=T)),colour="red",linetype="dashed",size=1)
三、统计图形与结论
图1.各区域房源数量
图2.各区域房源单价
图3.各区域房源总价
图4.各区域平均单价
图5.各区域房源平均面积
图6.总价500万以下的普适房源信息
图7.各区域适用房数量
图8.适用房总价密度图
图9.适用房单价密度图
由上述分析可知:
1、除了滨江、钱塘新区和上城这几个区外,其他区的房源数量大致相同,且可提供房源数量在2500万套以上。
2、从房源单价来看,上城区的平均单价最高,为4.7万/平米,西湖区次之。余杭区的平均单价最低,为2.5万/平米,钱塘新区次之。从箱子的长短来看,西湖区的单价离散程度最大,余杭区、萧山区和钱塘新区这几个区域的单价离散程度较小。(由于平均数受极端值影响,这里用中位数衡量均价)
3、从房源总价来看,滨江区的平均总价最高,余杭区和钱塘新区的平均总价最低。从箱子长短来看,余杭区的总价离散程度最低,滨江区和上城的总价离散程度最高。
4、从二手房的平均面积看,下城区平均面积最低,大概80平米左右,萧山区的平均面积最高,大概108平米左右。
5、单独分析总价在500万以下的经济适用房,上城区和滨江区的二手房数量最少,200万~300万的房源数量最多,单价3万~4万左右的房源数量最多。
说明:该数据取自链家网2019年6月27日的数据。