티스토리 뷰

대한민국 약국위치 시각화 하기!

사용 패키지 : ggmap
데이터 : communitypharmacy.txt from 심평원 약국위치데이터
참고 URL
http://www.hira.or.kr/rd/hosp/getHospList.do
https://blog.dominodatalab.com/geographic-visualization-with-rs-ggmaps/

library(ggmap)
setwd("C:/Users/link9/Dropbox/MyCode/DataAnalysis")

communitypharmacy.txt 가 있는 위치로 setwd()

pharm = read.csv("communitypharmacy.txt", sep="\t", header=T, fileEncoding="UTF-8")
head(pharm)

처음에 txt 가 열리지않아 애를 먹었으나 sublime 에서 UTF-8 로 저장한후 fileEncoding=‘UTF-8’ 하니 해결되었다^^

그런데 데이터에서 adress 컬럼을 보면
경기도 성남시 분당구 서현로 192 304호 (서현동,야스벨리)
이처럼 (…동, …) 이 붙어있어 GoogleMap 에서 위치를 찾지못하는 문제가 생겨서 이를 지워주기로 했음.

pharm$address <- gsub("\\s*\\([^\\)]+\\)","",as.character(pharm$address))
head(pharm)
경기도 성남시 분당구 서현로 192 304호 (서현동,야스벨리)
이 아래처럼 변했다.
경기도 성남시 분당구 서현로 192 304호

gsub 은 Regular expression 으로 문자열 matching을 하는 함수로 첫번째 인자는 다음처럼 나눠 이해할 수 있다.

\\s*     : space 가 0번이상 매치
\\(      : (를 매치
[^\\)]+  : )가 아닌 모든것을 매치 ex) [^ab] 는 ab 가 아닌 모든 문자열.
\\)      : ) 를 매치.


따라서 (….) 를 매치하여 지워주게된다.

for (i in 1:2500) {
    lonlat = geocode(pharm[i,"address"], messaging = F)
    pharm$lon[i] = as.numeric(lonlat[1])
    pharm$lat[i] = as.numeric(lonlat[2])
}

geocode 함수는 주소에 대하여 경도(longitute), 위도(latitude)를 벡터로 반환해 준다.
1:2500 행 까지만 가져온 이유는 구글api 가 하루에 쿼리를 2500개로 제한해 놓았기 때문에 테스트목적으로 2500개만 쿼리 한것.. 남은 쿼리수를 확인하려면 geocodeQueryCheck 를 사용. 1.5시간정도 걸렸다…

head(pharm)

lon, lat 좌표를 위한 컬럼이 추가된것을 확인 할 수 있고, 이를 이용해서 대한민국의 지도에 point 를 찍을 것이다..

cent <- as.numeric(geocode(“대한민국”)) 하려했으나
더이상 geocode 가 안되어 직접 좌표를 넣어주었다.

cent <- c(lon=127.8, lat=35.8)
map <- ggmap(get_googlemap(center = cent, zoom=7, maptype='roadmap', color='bw', scale=2), extent='device')
Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=35.8,127.8&zoom=7&size=640x640&scale=2&maptype=roadmap&sensor=false
`panel.margin` is deprecated. Please use `panel.spacing` property instead

geocode 로 대한민국 위치의 좌표를 얻은후,
get_googlemap, ggmap 함수로 대한민국지도에 대한 ggplot 객체를 구했다.

map + geom_point(data=pharm, aes(x=lon, y=lat), colour = 'steelblue', alpha=0.4)

ggmap 에 geom_point 를 더하여 점을찍은후 출력이 되었다!
약국은 서울주변과 대도시에 크게 집중된것을 확인 할 수 있었다.. 끝…^^

+ .Rmd 파일은 오른쪽 상단 Code 에서 다운로드 하실수 있습니다.

LS0tDQp0aXRsZTogIrTrx9G5zrG5IL7gsbnAp8ShIL3DsKLIrSDHz7HiISINCm91dHB1dDogcGRmX2RvY3VtZW50DQotLS0NCjxmb250IHNpemU9Mj4NCrvnv+sgxtDFsMH2IDogZ2dtYXA8QnI+DQq1pcDMxc0gOiBjb21tdW5pdHlwaGFybWFjeS50eHQgZnJvbSC9ycbyv/ggvuCxucCnxKG1pcDMxc08YnI+DQrC/LDtIFVSTDxicj4NCmh0dHA6Ly93d3cuaGlyYS5vci5rci9yZC9ob3NwL2dldEhvc3BMaXN0LmRvIDxCUj4NCmh0dHBzOi8vYmxvZy5kb21pbm9kYXRhbGFiLmNvbS9nZW9ncmFwaGljLXZpc3VhbGl6YXRpb24td2l0aC1ycy1nZ21hcHMvPGJyPg0KDQpSc3R1ZGlvIL+hvLEgwKcgUHJldmlldyC4piC0qbilyMQgv8C4pcLKIEhlbHC/tyBWaWV3ZXIgxcfAuLfOILq4vLy/5C4uLi4uLg0KYGBge3J9DQpsaWJyYXJ5KGdnbWFwKQ0KYGBgDQoNCg0KYGBge3J9DQpzZXR3ZCgiQzovVXNlcnMvbGluazkvRHJvcGJveC9NeUNvZGUvRGF0YUFuYWx5c2lzIikNCmBgYA0KY29tbXVuaXR5cGhhcm1hY3kudHh0ILChIMDWtMIgwKfEobfOIHNldHdkKCkNCg0KYGBge3J9DQpwaGFybSA9IHJlYWQuY3N2KCJjb21tdW5pdHlwaGFybWFjeS50eHQiLCBzZXA9Ilx0IiwgaGVhZGVyPVQsIGZpbGVFbmNvZGluZz0iVVRGLTgiKQ0KaGVhZChwaGFybSkNCmBgYA0KDQrDs8C9v6EgdHh0ILChIL+tuK7B9r7KvsYgvta4piC41L76wLizqiBzdWJsaW1lIL+hvK0gVVRGLTggt84gwPrA5cfRyMQgZmlsZUVuY29kaW5nPSdVVEYtOCcgx8+0zyDH2LDhtce++rTZXl48YnI+DQo8QlI+DQqx17extaUgtaXAzMXNv6G8rSBhZHJlc3MgxMO3s8C7ILq4uOk8QlI+DQqw5rHitbUgvLqzsr3DILrQtOexuCC8rcf2t84gMTkyIDMwNMijICi8rcf2tb8svt+9urqnuK4pPEJSPg0KwMzDs7ezICguLi61vywgLi4uKSDAzCC62b7uwNa+7iBHb29nbGVNYXAgv6G8rSDAp8ShuKYgw6PB9rj4x8+0wiC5rsGmsKEgu/2w3LytIMDMuKYgwfa/9sHWseK3ziDH38C9Lg0KYGBge3J9DQpwaGFybSRhZGRyZXNzIDwtIGdzdWIoIlxccypcXChbXlxcKV0rXFwpIiwiIixhcy5jaGFyYWN0ZXIocGhhcm0kYWRkcmVzcykpDQpoZWFkKHBoYXJtKQ0KYGBgDQoNCrDmseK1tSC8urOyvcMgutC057G4ILytx/a3ziAxOTIgMzA0yKMgKLytx/a1vyy+3726uqe4rik8YnI+wMwgvsa3ocOzt7Mguq/H37TZLjxicj4NCrDmseK1tSC8urOyvcMgutC057G4ILytx/a3ziAxOTIgMzA0yKM8YnI+PGJyPg0KZ3N1YiDAuiBSZWd1bGFyIGV4cHJlc3Npb24gwLi3ziC5rsDav60gbWF0Y2hpbmfAuyDHz7TCIMfUvPa3ziDDubn4wrAgwM7A2rTCILTZwL3Ds7ezILOqtLIgwMzH2MfSILz2IMDWtNkuPGJyPjxicj4NCjxwcmU+DQpcXHMqICAgICA6IHNwYWNlILChIDC5+MDMu/MguMXEoQ0KXFwoICAgICAgOiAouKYguMXEoQ0KW15cXCldKyAgOiApsKEgvsa00SC48LXnsM3AuyC4xcShIGV4KSBbXmFiXSC0wiBhYiCwoSC+xrTRILjwtecgua7A2r+tLg0KXFwpICAgICAgOiApILimILjFxKEuDQo8L3ByZT4NCjxicj4NCrX7tvO8rSAoLi4uLikguKYguMXEocfPv6kgwfa/9sHWsNS1yLTZLjxicj4NCg0KYGBge3J9DQpmb3IgKGkgaW4gMToyNTAwKSB7DQogICAgbG9ubGF0ID0gZ2VvY29kZShwaGFybVtpLCJhZGRyZXNzIl0sIG1lc3NhZ2luZyA9IEYpDQogICAgcGhhcm0kbG9uW2ldID0gYXMubnVtZXJpYyhsb25sYXRbMV0pDQogICAgcGhhcm0kbGF0W2ldID0gYXMubnVtZXJpYyhsb25sYXRbMl0pDQp9DQpgYGANCg0KZ2VvY29kZSDH1Lz2tMIgwda80r+hILTrx8+/qSCw5rW1KGxvbmdpdHV0ZSksIMCntbUobGF0aXR1ZGUpuKYguqTFzbfOILndyK/H2CDB2LTZLjxicj4NCjE6MjUwMCDH4CCx7sH2uLggsKHBrr/CIMDMwK+0wiCxuLHbYXBpILChIMfPt+e/oSDE9biuuKYgMjUwMLCzt84gwabH0cfYILP1vtKx4iC2p7muv6Egxde9usauuPHA+8C4t84gMjUwMLCzuLggxPW4riDH0bDNLi4gs7LAuiDE9biuvPa4piDIrsDOx8+3wbjpIGdlb2NvZGVRdWVyeUNoZWNrILimILvnv+suIDEuNb3DsKPBpLW1ILDJt8i02S4uLjxicj4NCg0KYGBge3J9DQpoZWFkKHBoYXJtKQ0KYGBgDQpsb24sIGxhdCDBwseluKYgwKfH0SDEw7ezwMwgw9+wobXIsM3AuyDIrsDOIMfSILz2IMDWsO0sIMDMuKYgwMy/68fYvK0gtOvH0bnOsbnAxyDB9rW1v6EgcG9pbnQguKYgwu/AuyCwzcDMtNkuLg0KDQpjZW50IDwtIGFzLm51bWVyaWMoZ2VvY29kZSgitOvH0bnOsbkiKSkgx8+3wcffwLizqjxicj4NCrT1wMy78yBnZW9jb2RlILChIL7Itce+7iDB98GiIMHCx6W4piCz1r7uwda++rTZLjxicj4NCg0KYGBge3J9DQpjZW50IDwtIGMobG9uPTEyNy44LCBsYXQ9MzUuOCkNCm1hcCA8LSBnZ21hcChnZXRfZ29vZ2xlbWFwKGNlbnRlciA9IGNlbnQsIHpvb209NywgbWFwdHlwZT0ncm9hZG1hcCcsIGNvbG9yPSdidycsIHNjYWxlPTIpLCBleHRlbnQ9J2RldmljZScpDQpgYGANCg0KZ2VvY29kZSC3ziC068fRuc6xuSDAp8ShwMcgwcLHpbimIL7ywLrIxCw8YnI+DQpnZXRfZ29vZ2xlbWFwLCBnZ21hcCDH1Lz2t84gtOvH0bnOsbnB9rW1v6EgtOvH0SBnZ3Bsb3QgsLTDvLimILG4x9+02S48YnI+DQo8YnI+DQpgYGB7cn0NCm1hcCArIGdlb21fcG9pbnQoZGF0YT1waGFybSwgYWVzKHg9bG9uLCB5PWxhdCksIGNvbG91ciA9ICdzdGVlbGJsdWUnLCBhbHBoYT0wLjQpDQpgYGANCg0KZ2dtYXAgv6EgZ2VvbV9wb2ludCC4piC09cfPv6kgwaHAu8LvwLrIxCDD4rfCwMwgtce++rTZISA8YnI+DQo8QnI+DQq+4LG5wLogvK2/78HWuq+w+iC067W1vcO/oSDFqbDUIMH9wd+1yLDNwLsgyK7AziDH0iC89iDA1r76tNkuLjxicj5ieWUuLi5eXg==


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함