R을 이용한 대한민국 동물 병원 지도 시각화
데이터는 공공데이터포털에서 얻었다.
https://www.localdata.go.kr/devcenter/dataDown.do?menuNo=20001
LOCALDATA - 지방행정인허가데이터개방:데이터다운로드
전체 데이터다운로드 전체 인허가 데이터에 대한 전체분,월 변동분, 일 변동분에 대한 자료를 제공받을 수 있습니다. 전체 다운로드 선택 업종다운로드 36개 그룹, 196개 업종에 대한 데이터를 업
www.localdata.go.kr
동물병원 분포도를 그려봄
단순 위도/경도 데이터로만 산점도로 그려봄
googleVis 패키지를 이용하여 쉽게 지도로 표시함
그럼 어떻게 했는지 살펴보자.
패키지 설치 및 데이터 불러오기
library(tidyverse)
library(googleVis)
library(readxl)
library(stringr)
df6 <- read.csv("D:/R/data/fulldata_02_03_01_P_동물병원.csv",header = T, fileEncoding = "euc-kr")
head(df6)
동물병원 주소는 나와 있는데, 위도/ 경도 데이터가 없음
그래서 우편번호에 따른 위도/경도 데이터 파일을 불러와서 위 동물 병원 데이터 주소와 matching 해서 그려보려고 함
json 파일로 되어 있어서 불러오고 이걸 풀어서 파일로 만듦
library(jsonlite)
library(httr)
library(tidyverse)
library(stringr)
library("ggsci")
df_repos <- fromJSON("D:/R/data/address/20221006_latlng_by_zip.txt")
json_repos <- toJSON(df_repos)
nested_json <-prettify(json_repos, indent = 4)
nested_df <- fromJSON(json_repos, simplifyDataFrame = TRUE)
df2 <- as.data.frame(unlist(nested_df))
class(df2)
head(df2)
df3 <-
df2 %>% mutate(id = rownames(df2))
colnames(df3) <- c("value", "name")
head(df3)
df4 <- df3 %>% separate(name, into=c("code", "names"))
head(df4)
df5 <- df4 %>% pivot_wider(names_from=names, values_from =value)
code <- df5 %>% separate(addr, into = c("a", "b", "c", "d", "e"), sep = " ")
write.csv(df5, "code_to_address.csv", row.names = F, fileEncoding = 'euc-kr')
이렇게 하면 우편번호가 나와있는 위도/경도 데이터 파일을 얻을 수 있다.
그럼 여기 나와있는 주소와 위 동물병원 주소를 left_join을 써서 하나의 데이터프레임으로 만들어보자
df8 <- left_join(df7, code, by="d") %>%
select(a.x, b.x, c.x, d, 사업장명, lat, lng) %>%
mutate(lat = round(as.numeric(lat), 4),
lng = round(as.numeric(lng), 4)) %>%
distinct(사업장명, .keep_all = T) %>%
na.omit()
df9<- df8 %>%
#filter(b.x == "용인시") %>%
mutate(latlon=paste(lat,":",lng,sep='')) %>%
mutate(description=paste(사업장명,":",c.x, sep='')) %>%
distinct(사업장명, .keep_all = T) %>%
select(latlon, description) %>%
na.omit()
대한민국 전체 데이터로 ggplot 그래프를 그리면 아래와 같다
df8 %>% ggplot(aes(x=lng, y=lat, col=a.x ))+geom_point()+
scale_color_ucscgb()+
theme_bw()+
labs(x = "경도", y = "위도", title = "대한민국 동물병원 분포도",
subtitle = "공공데이터포털 : https://www.localdata.go.kr/devcenter/dataDown.do?menuNo=20001")
googleVis 패키지로 그래프를 그리는 코드는 아래와 같다.
df10 <- gvisMap(df9, "latlon","description",
options=list(showTip=T,showLine=T,enableScrollWheel=T,
mapType='hybrid',useMapTypeControl=T,
width=800, height=600))
plot(df10)
특별히 용인시에 있는 동물병원 지도를 그려보자