library(jsonlite)
library(httr)
# 공공데이터포털 API 공적마스크 재고현황..
# 부산시 영도구 검색후 해당 Rest API값 할당..
# https://app.swaggerhub.com/apis-docs/Promptech/public-mask-info/20200307-oas3#/
df_mask <- fromJSON("https://8oi9s0nnth.apigw.ntruss.com/corona19-masks/v1/storesByAddr/json?address=%EB%B6%80%EC%82%B0%EA%B4%91%EC%97%AD%EC%8B%9C%20%EC%98%81%EB%8F%84%EA%B5%AC")
str(df_mask)
## List of 3
## $ address: chr "부산광역시 영도구"
## $ count : int 56
## $ stores :'data.frame': 56 obs. of 9 variables:
## ..$ addr : chr [1:56] "부산광역시 영도구 태종로 129 (영선동1가)" "부산광역시 영도구 태종로 98 402호 (대교동2가, 모닝아일랜드)" "부산광역시 영도구 동삼로 32 (동삼동)" "부산광역시 영도구 태종로 106-1, (영선동1가)" ...
## ..$ code : chr [1:56] "21801401" "21803021" "21803951" "21804028" ...
## ..$ created_at : chr [1:56] "2020/03/12 16:00:00" "2020/03/12 16:00:00" "2020/03/12 16:00:00" "2020/03/12 16:00:00" ...
## ..$ lat : num [1:56] 35.1 35.1 35.1 35.1 35.1 ...
## ..$ lng : num [1:56] 129 129 129 129 129 ...
## ..$ name : chr [1:56] "영신약국" "효승당약국" "보명약국" "메디팜민제약국" ...
## ..$ remain_stat: chr [1:56] "empty" "few" "empty" "empty" ...
## ..$ stock_at : chr [1:56] "2020/03/11 08:45:00" "2020/03/12 11:53:00" "2020/03/12 11:19:00" "2020/03/11 16:21:00" ...
## ..$ type : chr [1:56] "01" "01" "01" "01" ...
names(df_mask)
## [1] "address" "count" "stores"
names(df_mask$stores)
## [1] "addr" "code" "created_at" "lat" "lng"
## [6] "name" "remain_stat" "stock_at" "type"
# 슬롯에서 데이터프레임 꺼내기...
df_mask <- df_mask$stores
#df_mask <- na.omit(df_mask)
str(df_mask)
## 'data.frame': 56 obs. of 9 variables:
## $ addr : chr "부산광역시 영도구 태종로 129 (영선동1가)" "부산광역시 영도구 태종로 98 402호 (대교동2가, 모닝아일랜드)" "부산광역시 영도구 동삼로 32 (동삼동)" "부산광역시 영도구 태종로 106-1, (영선동1가)" ...
## $ code : chr "21801401" "21803021" "21803951" "21804028" ...
## $ created_at : chr "2020/03/12 16:00:00" "2020/03/12 16:00:00" "2020/03/12 16:00:00" "2020/03/12 16:00:00" ...
## $ lat : num 35.1 35.1 35.1 35.1 35.1 ...
## $ lng : num 129 129 129 129 129 ...
## $ name : chr "영신약국" "효승당약국" "보명약국" "메디팜민제약국" ...
## $ remain_stat: chr "empty" "few" "empty" "empty" ...
## $ stock_at : chr "2020/03/11 08:45:00" "2020/03/12 11:53:00" "2020/03/12 11:19:00" "2020/03/11 16:21:00" ...
## $ type : chr "01" "01" "01" "01" ...
head(df_mask)
names(df_mask)[5] <-"lon"
df_mask
unique(df_mask$remain_stat)
## [1] "empty" "few" "plenty" "some" NA
# 팝업시 재고 수량 상세정보 제공을 위해 파생변수(remain_stat_name) 생성!
df_mask$remain_stat_name[df_mask$remain_stat=="plenty"] = "충분 (100개 이상 보유)"
df_mask$remain_stat_name[df_mask$remain_stat=="some"] = "보통 (30~99개 보유)"
df_mask$remain_stat_name[df_mask$remain_stat=="few"] = "부족 (30개 미만 보유)"
df_mask$remain_stat_name[df_mask$remain_stat=="empty"] = "없음 (1개 미만)"
df_mask
library(leaflet)
pal <- colorFactor(palette=c("springgreen3","orange","red","lightgray"),
levels = c("plenty","some","few","empty"), na.color = "black")
leaflet(df_mask) %>% addProviderTiles(providers$OpenStreetMap) %>%
addCircleMarkers(
radius = 8, color="black", weight=2,
fillColor = ~pal(df_mask$remain_stat),
stroke = TRUE, fillOpacity = 1,
lng=df_mask$lon, lat=df_mask$lat,
label = ~as.character(name),
popup = paste0("<b>방역마스크 재고현황 ==></b>","<br>","<b>명칭:",df_mask$name,"</b><br>",
"재고 상태 : ",df_mask$remain_stat_name,"<br>",
"입고 일시 : ",df_mask$created_at)
) %>%
addLegend("bottomright", pal = pal, values = ~df_mask$remain_stat,
title = paste0("공적마스크 재고현황","<br>"),
labFormat = labelFormat(prefix = ""),
opacity = 1)
#일자별로 파일 저장
file_name <- paste0("D:/R_Workspace/Mask_status_", Sys.Date(), ".csv")
write.csv(df_mask, file_name, fileEncoding="UTF-8")
# End !!