1.simple model: 可以指定理想房屋型態、條件,可以提供你參考的房價 2.Data source:不動產實價登錄資料 ( ~ 2014年5月16日) 3.Predictor variables : 建物面積、所屬縣市、屋齡、行政區域、建物型態 4.建物型態: 華廈(10層含以下有電梯)、套房(1房1廳1衛)、公寓(5樓含以下無電梯)、大樓(11層含以上有電梯)
我們的問題是:你怎麼決定你會買什麼樣的房子?
#install.packages("dplyr") ;
#install.packages("ggplot2");
#install.packages("rpart");
#install.packages("rpart.plot");
library(dplyr)#dplyr是對資料做整理的套件
library(ggplot2)#ggplot2 是劃圖套件
library(rpart)# rpart 是決策樹套件
library(rpart.plot)# rpart.plot是決策樹的繪圖套件
dat2 <- read.csv("D:/Rdata Practice/Five city01.csv",header=TRUE, sep=",", encoding="utf-8")
nrow(dat2)
## [1] 5431
head(dat2) #抓前6筆資料
## 行政區 縣市 型態 房價 面積 屋齡 車位 管理
## 1 臺北市文山區 臺北市 大樓 47500000 80.495 6 有車位 有管理
## 2 臺北市文山區 臺北市 華廈 8450000 21.804 21 無車位 有管理
## 3 臺北市中正區 臺北市 華廈 14600000 20.936 38 無車位 無管理
## 4 臺北市文山區 臺北市 公寓 8120000 26.236 31 無車位 有管理
## 5 臺北市文山區 臺北市 公寓 13900000 30.347 40 無車位 無管理
## 6 臺北市文山區 臺北市 公寓 13500000 25.471 34 無車位 有管理
dat2[sample(1:nrow(dat2),18),]#隨機抓18筆出來看
## 行政區 縣市 型態 房價 面積 屋齡 車位 管理
## 2923 新北市新店區 新北市 大樓 12400000 23.807 15 無車位 有管理
## 4801 苗栗縣公館鄉 苗栗縣 透天 3900000 44.504 15 無車位 無管理
## 5007 彰化縣埔心鄉 彰化縣 透天 8700000 106.825 20 無車位 無管理
## 2104 高雄市鳳山區 高雄市 透天 5600000 44.976 42 無車位 無管理
## 1752 臺南市東區 臺南市 套房 421000 9.725 24 無車位 無管理
## 4503 嘉義市嘉義市 嘉義市 透天 3480000 31.911 40 無車位 無管理
## 229 臺北市文山區 臺北市 大樓 36800000 64.257 0 有車位 有管理
## 1807 高雄市鳳山區 高雄市 透天 2000000 27.440 41 無車位 無管理
## 4287 桃園縣楊梅市 桃園縣 華廈 3900000 30.689 15 無車位 有管理
## 82 臺北市南港區 臺北市 華廈 6600000 12.641 19 無車位 有管理
## 2047 高雄市左營區 高雄市 華廈 3500000 24.152 17 無車位 有管理
## 1721 臺南市安南區 臺南市 透天 6800000 43.690 29 無車位 無管理
## 3617 桃園縣八德市 桃園縣 大樓 9800000 50.390 1 有車位 有管理
## 846 臺中市大里區 臺中市 透天 3000000 29.990 38 無車位 無管理
## 258 臺北市南港區 臺北市 華廈 15700000 20.688 14 有車位 有管理
## 2443 新北市永和區 新北市 透天 14300000 22.951 42 無車位 無管理
## 4839 苗栗縣苗栗市 苗栗縣 透天 6280000 63.038 20 無車位 無管理
## 5252 屏東縣長治鄉 屏東縣 透天 9800000 56.831 0 無車位 無管理
summary(dat2)#敘述性統計基本資料
## 行政區 縣市 型態 房價
## 桃園縣桃園市: 344 新北市 :1056 大樓:2167 Min. : 50300
## 新北市淡水區: 219 桃園縣 : 978 公寓: 814 1st Qu.: 3550000
## 臺中市西屯區: 160 高雄市 : 602 套房: 280 Median : 6300000
## 桃園縣楊梅市: 146 臺南市 : 569 透天:1185 Mean : 9217429
## 臺北市文山區: 144 臺北市 : 551 華廈: 985 3rd Qu.: 10300000
## 桃園縣中壢市: 137 臺中市 : 474 Max. :155000000
## (Other) :4281 (Other):1201
## 面積 屋齡 車位 管理
## Min. : 0.324 Min. : 0.00 有車位:2020 有管理:3140
## 1st Qu.: 26.154 1st Qu.: 4.00 無車位:3411 無管理:2291
## Median : 35.740 Median :18.00
## Mean : 39.691 Mean :16.88
## 3rd Qu.: 48.806 3rd Qu.:25.00
## Max. :232.756 Max. :74.00
##
summarize(group_by(dat2, 型態), 平均=mean(房價))
## Source: local data frame [5 x 2]
##
## 型態 平均
## 1 大樓 12241661
## 2 公寓 7007017
## 3 套房 3564414
## 4 透天 7863983
## 5 華廈 7625996
barplot(sort(table(dat2$縣市),decreasing=TRUE)[1:10])
pie(sort(table(dat2$型態),decreasing=TRUE))
hist(dat2$房價/10^6,breaks=100,col="lightpink",prob=TRUE,xlab="房價(百萬)",main="Historgram")
boxplot(面積~型態,data=subset(dat2,縣市=="臺北市"),ylab="面積(坪)",main="面積")
dat2a <- dat2[dat2$縣市 %in% c("臺北市","臺中市","新北市","臺南市","高雄市") ,]
nrow(dat2a)
## [1] 3252
head(dat2a)
## 行政區 縣市 型態 房價 面積 屋齡 車位 管理
## 1 臺北市文山區 臺北市 大樓 47500000 80.495 6 有車位 有管理
## 2 臺北市文山區 臺北市 華廈 8450000 21.804 21 無車位 有管理
## 3 臺北市中正區 臺北市 華廈 14600000 20.936 38 無車位 無管理
## 4 臺北市文山區 臺北市 公寓 8120000 26.236 31 無車位 有管理
## 5 臺北市文山區 臺北市 公寓 13900000 30.347 40 無車位 無管理
## 6 臺北市文山區 臺北市 公寓 13500000 25.471 34 無車位 有管理
summary(dat2a)
## 行政區 縣市 型態 房價
## 新北市淡水區: 219 新北市 :1056 大樓:1340 Min. : 300000
## 臺中市西屯區: 160 高雄市 : 602 公寓: 575 1st Qu.: 4100000
## 臺北市文山區: 144 臺南市 : 569 套房: 203 Median : 7355000
## 臺南市永康區: 137 臺北市 : 551 透天: 600 Mean : 10924566
## 高雄市鳳山區: 108 臺中市 : 474 華廈: 534 3rd Qu.: 12800000
## 新北市中和區: 103 宜蘭縣 : 0 Max. :155000000
## (Other) :2381 (Other): 0
## 面積 屋齡 車位 管理
## Min. : 3.312 Min. : 0.00 有車位:1147 有管理:1943
## 1st Qu.: 25.215 1st Qu.: 6.00 無車位:2105 無管理:1309
## Median : 34.305 Median :18.00
## Mean : 38.580 Mean :17.79
## 3rd Qu.: 48.052 3rd Qu.:27.00
## Max. :232.756 Max. :61.00
##
我們的問題是: 縣市~型態+面積+屋齡+房價百萬
#五都順序為: 台北市 台中市 新北市 台南市 高雄市
#dat2a$縣市 <- factor(dat2a$縣市,levels=c("臺北市","臺中市","新北市","臺南市","高雄市"))
dat2a$房價百萬 <- dat2a$房價/10^6
#head(dat2a)
fit2 <- rpart(縣市~型態+面積+屋齡+房價百萬,data=dat2a)
prp(fit2,col=2,box.col="lightgray",shadow.col="gray")
result = rpart(縣市~ 型態+面積+屋齡+房價百萬, data=dat2a)
Y = dat2a$縣市
Ypred = predict(result, type="class")
t = table(Y, Ypred) # 同時顯示 t 的內容
cat("預測正確率 = ", sum(diag(t))/sum(t), "\n" )
## 預測正確率 = 0.5522755
confmatrix = function(Y,Ypred)
{
tab = table(Y,Ypredict=Ypred)
print(tab)
p = sum(diag(t))/sum(t)*100
cat("\n\n預測正確率 = ",p,"% \n")
}
confmatrix(dat2a$縣市, Ypred)
## Ypredict
## Y 宜蘭縣 花蓮縣 金門縣 南投縣 屏東縣 苗栗縣 桃園縣 高雄市 基隆市
## 宜蘭縣 0 0 0 0 0 0 0 0 0
## 花蓮縣 0 0 0 0 0 0 0 0 0
## 金門縣 0 0 0 0 0 0 0 0 0
## 南投縣 0 0 0 0 0 0 0 0 0
## 屏東縣 0 0 0 0 0 0 0 0 0
## 苗栗縣 0 0 0 0 0 0 0 0 0
## 桃園縣 0 0 0 0 0 0 0 0 0
## 高雄市 0 0 0 0 0 0 0 127 0
## 基隆市 0 0 0 0 0 0 0 0 0
## 雲林縣 0 0 0 0 0 0 0 0 0
## 新北市 0 0 0 0 0 0 0 17 0
## 新竹市 0 0 0 0 0 0 0 0 0
## 新竹縣 0 0 0 0 0 0 0 0 0
## 嘉義市 0 0 0 0 0 0 0 0 0
## 嘉義縣 0 0 0 0 0 0 0 0 0
## 彰化縣 0 0 0 0 0 0 0 0 0
## 臺中市 0 0 0 0 0 0 0 88 0
## 臺北市 0 0 0 0 0 0 0 3 0
## 臺東縣 0 0 0 0 0 0 0 0 0
## 臺南市 0 0 0 0 0 0 0 93 0
## 澎湖縣 0 0 0 0 0 0 0 0 0
## Ypredict
## Y 雲林縣 新北市 新竹市 新竹縣 嘉義市 嘉義縣 彰化縣 臺中市 臺北市
## 宜蘭縣 0 0 0 0 0 0 0 0 0
## 花蓮縣 0 0 0 0 0 0 0 0 0
## 金門縣 0 0 0 0 0 0 0 0 0
## 南投縣 0 0 0 0 0 0 0 0 0
## 屏東縣 0 0 0 0 0 0 0 0 0
## 苗栗縣 0 0 0 0 0 0 0 0 0
## 桃園縣 0 0 0 0 0 0 0 0 0
## 高雄市 0 143 0 0 0 0 0 29 40
## 基隆市 0 0 0 0 0 0 0 0 0
## 雲林縣 0 0 0 0 0 0 0 0 0
## 新北市 0 852 0 0 0 0 0 12 131
## 新竹市 0 0 0 0 0 0 0 0 0
## 新竹縣 0 0 0 0 0 0 0 0 0
## 嘉義市 0 0 0 0 0 0 0 0 0
## 嘉義縣 0 0 0 0 0 0 0 0 0
## 彰化縣 0 0 0 0 0 0 0 0 0
## 臺中市 0 178 0 0 0 0 0 68 26
## 臺北市 0 187 0 0 0 0 0 0 350
## 臺東縣 0 0 0 0 0 0 0 0 0
## 臺南市 0 29 0 0 0 0 0 48 0
## 澎湖縣 0 0 0 0 0 0 0 0 0
## Ypredict
## Y 臺東縣 臺南市 澎湖縣
## 宜蘭縣 0 0 0
## 花蓮縣 0 0 0
## 金門縣 0 0 0
## 南投縣 0 0 0
## 屏東縣 0 0 0
## 苗栗縣 0 0 0
## 桃園縣 0 0 0
## 高雄市 0 263 0
## 基隆市 0 0 0
## 雲林縣 0 0 0
## 新北市 0 44 0
## 新竹市 0 0 0
## 新竹縣 0 0 0
## 嘉義市 0 0 0
## 嘉義縣 0 0 0
## 彰化縣 0 0 0
## 臺中市 0 114 0
## 臺北市 0 11 0
## 臺東縣 0 0 0
## 臺南市 0 399 0
## 澎湖縣 0 0 0
##
##
## 預測正確率 = 55.22755 %
par(mfrow=c(2,3)) #建立一個2*3的圖框
boxplot(房價~縣市,data=subset(dat2a,型態=="透天"),ylab="房價",main="透天")
boxplot(房價~縣市,data=subset(dat2a,型態=="套房"),ylab="房價",main="套房")
boxplot(房價~縣市,data=subset(dat2a,型態=="大樓"),ylab="房價",main="大樓")
boxplot(房價~縣市,data=subset(dat2a,型態=="公寓"),ylab="房價",main="公寓")
boxplot(房價~縣市,data=subset(dat2a,型態=="華廈"),ylab="房價",main="華廈")
dev.off()#把圖型清除
## null device
## 1
data.frame(縣市=summarise(group_by(dat2, 縣市), 公寓=sum(型態=="公寓"))[,1],
公寓=summarise(group_by(dat2, 縣市), 公寓=sum(型態=="公寓"))[,2],
大樓=summarise(group_by(dat2, 縣市), 大樓=sum(型態=="大樓"))[,2],
套房=summarise(group_by(dat2, 縣市), 大樓=sum(型態=="套房"))[,2],
華廈=summarise(group_by(dat2, 縣市), 大樓=sum(型態=="華廈"))[,2],
透天=summarise(group_by(dat2, 縣市), 大樓=sum(型態=="透天"))[,2])
## 縣市 公寓 大樓 大樓.1 大樓.2 大樓.3
## 1 宜蘭縣 11 8 16 34 35
## 2 花蓮縣 12 5 5 28 55
## 3 金門縣 0 0 0 0 1
## 4 南投縣 2 3 1 5 29
## 5 屏東縣 9 4 5 12 77
## 6 苗栗縣 9 8 0 49 43
## 7 桃園縣 73 596 29 181 99
## 8 高雄市 57 293 14 67 171
## 9 基隆市 84 33 10 27 7
## 10 雲林縣 0 4 0 12 46
## 11 新北市 288 493 75 166 34
## 12 新竹市 12 18 4 21 4
## 13 新竹縣 4 109 0 38 35
## 14 嘉義市 9 33 5 24 47
## 15 嘉義縣 3 1 0 2 22
## 16 彰化縣 8 5 1 15 64
## 17 臺中市 41 216 51 79 87
## 18 臺北市 146 234 47 114 10
## 19 臺東縣 3 0 1 3 20
## 20 臺南市 43 104 16 108 298
## 21 澎湖縣 0 0 0 0 1