데이터 시각화

R을 이용한 대한민국 동물 병원 지도 시각화

r-code-for-data-analysis 2023. 6. 24. 19:05

데이터는 공공데이터포털에서 얻었다.

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)

 

fulldata_02_03_01_P_동물병원.csv
3.31MB

 

동물병원 주소는 나와 있는데, 위도/ 경도 데이터가 없음

그래서 우편번호에 따른 위도/경도 데이터 파일을 불러와서 위 동물 병원 데이터 주소와 matching 해서 그려보려고 함

20221006_latlng_by_zip.txt
4.74MB

 

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')

 

이렇게 하면 우편번호가 나와있는 위도/경도 데이터 파일을 얻을 수 있다. 

code_to_address.csv
2.75MB

 

 

그럼 여기 나와있는 주소와 위 동물병원 주소를 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)

 

특별히 용인시에 있는 동물병원 지도를 그려보자

728x90
반응형