將資料讀進一名為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>