將資料讀進一名為lvr_data 的 Data Frame
lvr_data <- read.csv('lvr_prices_windows.csv')
根據finish_ymd 以及trading_ymd 計算屋齡(年),並將屋齡以名稱(house_age) 加入到該Data Frame 的欄位中
class(lvr_data$trading_ymd)
## [1] "factor"
lvr_data$trading_ymd <- as.Date(lvr_data$trading_ymd)
lvr_data$finish_ymd <- as.Date(lvr_data$finish_ymd)
lvr_data$house_age <- as.numeric((lvr_data$trading_ymd - lvr_data$finish_ymd)/ 365)
從address 欄位中抽取路名或街名(e.g.從”臺北市萬華區萬大路423巷28弄1~30號”抽取出”萬大路” ),並將該資訊存到street_name 欄位之中
head(lvr_data$address)
## [1] 臺北市大安區和平東路三段1巷72弄1~30號
## [2] 臺北市中正區忠孝東路二段121~150號
## [3] 橋北段二小段601~630地號
## [4] 臺北市大同區重慶北路一段61~90號
## [5] 臺北市內湖區民權東路六段90巷6弄1~30號
## [6] 福德段一小段661~690地號
## 17557 Levels: 一段91巷23弄1~30號 ... 蘭雅段三小段361~390地號
lvr_data$street_name <- as.character(lvr_data$address)
lvr_data$street_name <- gsub( '(.*?)市(.*?)區(.+?[路|街|道|段]).*', '\\3', lvr_data$street_name)
lvr_data$street_name <- gsub( '(.+?[路|街|段|里]).*', '\\1', lvr_data$street_name)
table(nchar(lvr_data$street_name))
##
## 2 3 4 5 6 7 11 12 13 14 15 16
## 112 70387 31249 249 30 8 1 1 3 3 1 2
## 17 18 20 22
## 2 4 1 1
從trading_num 欄位(e.g.土地1建物2車位0)中抽取土地數: 1、建物數: 2、車位數:0,並將這三者資訊分別存成land_num, building_num, parking_num 三個欄位
lvr_data$trading_num <- as.character(lvr_data$trading_num)
library(stringr)
trade_items <- str_match_all(lvr_data$trading_num, '土地(\\d+)建物(\\d+)車位(\\d+)')
trade_binds <- do.call('rbind', trade_items)
colnames(trade_binds) <- c('trading_num', 'land_num', 'building_num', 'parking_num')
合併資料
lvr_data <- cbind(lvr_data, trade_binds)
head(lvr_data)
geocoding api
library(jsonlite)
getLocation <- function(address){
geoloc <- fromJSON(paste0('https://maps.googleapis.com/maps/api/geocode/json?address=', address))
#names(geoloc)
try(geoloc$results[1,'geometry']$location, silent = TRUE)
}
sapply( head(lvr_data$address,6), getLocation)
## [[1]]
## lat lng
## 1 25.02496 121.5482
##
## [[2]]
## lat lng
## 1 25.04265 121.5322
##
## [[3]]
## lat lng
## 1 34.24197 108.939
##
## [[4]]
## lat lng
## 1 25.05133 121.514
##
## [[5]]
## lat lng
## 1 25.06824 121.5859
##
## [[6]]
## [1] "Error in geoloc$results[1, \"geometry\"] : incorrect number of dimensions\n"
## attr(,"class")
## [1] "try-error"
## attr(,"condition")
## <simpleError in geoloc$results[1, "geometry"]: incorrect number of dimensions>