**#################################################
前言:本文利用网上爬取的南京二手房信息,利用R进行简单分析,数据做仅学习研究练习用,侵删
首先读取数据,数据为.csv格式
houseprice = read.csv("E:/houseprice.csv",stringsAsFactors = F)
View(head(houseprice,30))
str(houseprice)
修改数据类型,由于并不是所有的数据都是我们需要的,可以选择特定的数据做处理
//编写函数,拼接字符串并除去数字、标点
combindString = function(s){
tem = ''
for (i in 1:length(s)) tem = paste(tem,s[i],sep = "")
tem = gsub("[0-9 ,、!?。]","",tem)
tem
}
`
title = combindString(houseprice$标题)
maidian = combindString(houseprice$卖点)
words = combindString(c(title,maidian))
`
#######
进行分词,使用Rwordseg包
`
library(Rwordseg)
library(jiebaR)`
测试Rwordseg与jiebaR分词的效果
w = "中间楼层双南东边户老虎桥小区黄金三楼户型方正黑龙江八巷南北通透全明格局精致装修星雨华府室厅万奥体万科金域缇香南北通透双阳台采光好黄金楼层采光充足黄金楼层诚心出售满两年周边配套好靠近大洋百货非常方便盛景华庭CBD中心交通便捷环境优美配套齐全常府街地铁年小区八一医院核心地段雅居乐花园学区房满两年武定门地铁中北精装三房秦淮一中心学区改善首选"
w1 = segmentCN(w,returnType = "vector")
w1
jiebaR分词
test = worker()
w2 = (test<=w)
w2
#从结果看,jiebaR更符合我们的需求,因此使用jiebaR进行分词
results<-(test<=words)
head(results)
#分好的词是一个向量,我们需要进行词频统计
#可以通过制造一个数据框,分组数数的方法
mywords<-data.frame("词汇"=results)
mywords$词频<-1
View(head(mywords,30)) #看看长什么样
#使用plyr包中的函数进行分组统计
library(plyr)
sumBygroup = function(df) sum(df[,2])
myWords<-ddply(mywords,.(词汇),sumBygroup)
names(myWords) = c("词汇","词频")
#为了避免小概率的词出现太多,我们找出词频
#大于10的词进行绘图
result<-subset(myWords,词频>10)
#共有383个高频词
#绘图
library(wordcloud)
color = c("blue","yellow","orange","red","green")
wordcloud(result$词汇,result$词频,random.order = F,colors = color)
#卖家买家关注的因素暂时分析到此,可以看到,大家比较关心的是“满五年”
#“多少多少号线”,“距离”,“采光”,“通透”,“楼层”,“交通”,“便利”,
#“小学”等,可以反映出几方面的因素:
#1,安全感--》房本满五年
#2,交通便利,最好周边有地铁站--》距离、站、号线、米
#3,周边的教育情况应该不错--》学区、小学、分校、南师
#4,房子采光要好--》采光、通透、南北
###########################################################################
###########################################################################
##除了关注以上那些点,人们可能更加关心房价,房子的地理位置,房子大小等
houseprice$单价 = as.numeric(houseprice$单价)
houseprice[is.na(houseprice$单价),]
View(houseprice$单价)
#由于只有两个记录单价是缺失值,分析时直接去掉即可
##那么对于房价,位置,大小,房子类型,我们能分析什么呢?
#首先我们可以来看看什么地方的房子数量最多,搞清楚南京地区
#各个区域的房子供应情况
number = subset(houseprice,select = c(小区))
number$数量 = 1
numberBy = ddply(number,.(小区),sumBygroup)
numberBy = numberBy[order(numberBy$V1,decreasing = T),]
#查看前十与后十都有哪些
head(numberBy,10)
tail(numberBy,10)
#可以发现房子供应动力比较充足的主要有这些地方:桥北,
#龙江,奥体,凤凰西街,月牙湖,来风里,新街口等,
#这些地方要么是开发区,要么是市中心繁华地段
#引入单价与面积,对各个小区的房价进行对比分析
mydata = subset(houseprice,select = c("小区","面积","单价"))
mydata$数量 = 1
#根据小区分组,计算面积、单价的均值,计算房子数
caculat = function(df) c("面积均值" = mean(df[,2]),"价格均值" = mean(df[,3],na.rm = T),"房子数" = sum(df[,4]))
result1 = ddply(mydata,.(小区),caculat)
library(ggplot2)
p = ggplot(result1,aes(x = 房子数, y = 价格均值, size = 面积均值))+geom_point()
#添加几个标签
p+geom_text(aes(label=小区),size = 4)+labs(title = "各小区房价与数量分布")
#从图中可以看出,奥体,龙江,凤凰西街的房子又多又贵,桥北,月牙湖,来风里
#的房子多,但是价格相对便宜,而且多数地方的价格集中在20000~30000之间,
#除了刚刚提到的3个地方外,北京东路,宁海路,华侨路,万达广场,定淮门大街
#的房价相对其他地方要高很多
###################################################################################################
###################################################################################################
##除了地理位置,楼层的高低也是影响房价的重要因素之一
type = subset(houseprice,select = c("楼层类型","单价","卖点","总价万"))
type$楼层类型 = as.factor(type$楼层类型)
ggplot(type,aes(x = 楼层类型,y = 单价))+geom_boxplot()+ggtitle("类型与单价")
#由于未知型的记录较少,暂且不管
#可以看到,总体来说低楼层的价格高于中楼层,中楼层的价格高于高楼层,这是符合
#一般情况的,不过我们发现中、高、低楼层里面都有很多离群点,而且这些点单价都
#高于40000,远远超过了平均值,这让我们比较感兴趣
low = subset(type,楼层类型=="低楼层")
mid = subset(type,楼层类型=="中楼层")
high = subset(type,楼层类型=="高楼层")
View(low[order(low$单价,decreasing = T),])
View(mid[order(mid$单价,decreasing = T),])
View(high[order(high$单价,decreasing = T),])
#通过观察发现,这些高价房,很多都是学区房,我们可以构造一个函数,
#将学区房与非学区房进行区分,然后对比分析
#从卖点入手,一般学区房的卖点里会出现“小”、“学”、“校”这些字眼
distrit = function(s){
juge = c(grep("小",s),grep("学",s),grep("校",s))
if (1 %in% juge) 1
else 0
}
n = c()
for (i in length(type$卖点)) n[i] = distrit(type$卖点[i])
type$是否学区 = n
View(type)
type$小区 = houseprice$小区
type$房子数 = 1
#整理好数据后就可以分析了
#首先看看什么地区的学区房最多,从这一点可以看南京教育发达地区
fun1<-function(df) c(学区房数 = sum(df[,5]),房子数 = sum(df[,7]),比例 = sum(df[,5]/sum(df[,7])))
rs=ddply(type,.(小区),fun1)
View(rs)
p = ggplot(subset(rs,学区房数>0),aes(x = 学区房数,y = 比例, size = 房子数))+geom_point()
p+geom_text(aes(y = 比例-0.1,label = 小区))+ggtitle("学区房与地区")
#可以看出学区房比例较高的有新街口,应天西路,龙江,凤凰西街,珠江路
#华侨路,北京东路,玄武门等,这些地方教育比较发达
ggplot(subset(rs,比例>0.4),aes(x = 小区,y = 学区房数,fill = 比例))+geom_bar(stat = "identity")+ggtitle("学区房的地区关系")+theme(axis.text.x=element_text(size = 12))
#可以看出,学区房比例较高的地方是珠江路、玄武门、北京东路,密度较大的是
#龙江与凤凰西街
#学区房与价格的关系
mean1 = function(df) c(均价 = mean(df[,2],na.rm = T))
ddply(type,.(是否学区),mean1)
# 是否学区 均价
# 1 0 25292.91
# 2 1 34693.57
#学区房的平均价格竟然高出普通房9000多
以上就是对南京房价的简单分析,从中能够发现,交通因素是多数人买房时会考虑的,以及房子的采光条件,同时,南京房子供应较多的地方主要集中在繁华的市中心以及较边缘的、开发中的桥北等地方,市中心的房价一如既往的高,学区房却更高一筹。从学区房的数量可以看出,教育资源较多的地方仍然集中在珠江路、奥体、玄武门、新街口、北京东路等较繁华地段。