> ## 05-1 지오 코딩 준비하기
>
> # Step 2 : 중복된 주소 제거하기
>
> setwd(dirname(rstudioapi::getSourceEditorContext()$path))
> load("./04_preprocess/04_preprocess.rdata")
> apt_juso <- data.frame(apt_price$juso_jibun)
> apt_juso <- data.frame(apt_juso[!duplicated(apt_juso), ])
> head(apt_juso, 2)
apt_juso..duplicated.apt_juso....
1 서울특별시 종로구 청운동 56-45 청운현대
2 서울특별시 종로구 사직동 9-1 광화문스페이스본
> apt_juso <- apt_juso[!duplicated(apt_juso), ]
> apt_juso <- data.frame(apt_price$juso_jibun)
> apt_juso <- data.frame(apt_juso[!duplicated(apt_juso), ])
>
>
> ## 05-2 주소를 좌표로 변환하는 지오 코딩
>
> # Step 1 : 지오 코딩 준비하기
>
> add_list <- list()
> cnt <- 0
> kakao_key <- "xxxxx"
>
> # Step 2 : 지오 코딩하기
>
> library(httr)
> library(RJSONIO)
> library(data.table)
> library(dplyr)
>
> for (i in 1:nrow(apt_juso)) {
+ tryCatch(
+ {
+ # 주소로 좌표값 요청
+ lon_lat <- GET(url = 'https://dapi.kakao.com/v2/local/search/address.json',
+ query = list(query = apt_juso[i, ]),
+ add_headers(Authorization = paste0("KakaoAK ", kakao_key)))
+
+ coordxy <- lon_lat %>% content(as='text') %>% fromJSON()
+ cnt <- cnt + 1
+
+ # 주소, 경도, 위도 정보를 리스트로 저장
+ add_list[[cnt]] <- data.table(apt_juso = apt_juso[i,],
+ coord_x = coordxy$documents[[1]]$x,
+ coord_y = coordxy$documents[[1]]$y)
+
+ message <- paste0("[", i, "/", nrow(apt_juso), "] 번째 (",
+ round(i/nrow(apt_juso)*100,2), "%) [", apt_juso[i,], "] 지오 코딩 중입니다: X = ",
+ add_list[[cnt]]$coord_x, " / Y = ", add_list[[cnt]]$coord_y)
+ cat(message, "\n\n")
+ }, error = function(e) { cat("ERROR :", conditionMessage(e), "\n")}
+ )
+ }
...
[5711/5713] 번째 (99.96%) [서울특별시 강동구 천호동 53-6 광남벨라스2차아파트] 지오 코딩 중입니다: X = 127.138915312211 / Y = 37.542779865803
[5712/5713] 번째 (99.98%) [서울특별시 강동구 천호동 288-29 브라운스톤암사아파트] 지오 코딩 중입니다: X = 127.128642305767 / Y = 37.5494485313012
[5713/5713] 번째 (100%) [서울특별시 강동구 길동 361-18 청원파크빌2] 지오 코딩 중입니다: X = 127.145234516055 / Y = 37.5387542572085
>
> # Step 3 : 지오 코딩 결과 저장하기
>
> juso_geocoding <- rbindlist(add_list)
> juso_geocoding$coord_x <- as.numeric(juso_geocoding$coord_x)
> juso_geocoding$coord_y <- as.numeric(juso_geocoding$coord_y)
> juso_geocoding <- na.omit(juso_geocoding)
> dir.create("./05_geocoding")
> save(juso_geocoding, file = "./05_geocoding/05_geocoding.rdata")
> write.csv(juso_geocoding, "./05_geocoding/05_geocoding.csv")
출처 : 김철민, ⌜공공데이터로 배우는 R 데이터분석 with 샤이니⌟, 이지스퍼블리싱, 2022
'데이터분석 > R' 카테고리의 다른 글
[R 데이터분석 with 샤이니] 분석 주제를 지도로 시각화하기 (0) | 2022.07.05 |
---|---|
[R 데이터분석 with 샤이니] 지오 데이터프레임 만들기 (0) | 2022.07.03 |
[R 데이터분석 with 샤이니] - 전처리 : 데이터를 알맞게 다듬기 (0) | 2022.07.02 |
[R 데이터분석 with 샤이니] 자료 수집 : API 크롤러 만들기 (0) | 2022.06.29 |
[현장에서 바로 써먹는...] 텍스트마이닝 - 감성 분석 (0) | 2022.05.03 |