도시에서의 식품 위생은 시민의 건강과 직결되는 중요한 도시 서비스 요소입니다. 특히, 농림축산식품부의 안심식당 제도는 위생 관리 기준을 충족한 음식점을 지정하고 관리하며 도시 내 외식 환경의 신뢰성을 높이고자 하는 공공정책입니다.
안심식당 데이터를 통해 알 수 있는 것
안심식당은 위생서비스 인프라로 볼 수 있으며 특정 구역에만 몰려 있다면 도시 내에 서비스 접근성 불균형이 발생하는 것을, 반대로 주거지와 노후 상권 등에도 균등하게 분포한다면 골고루 작동함을 의미합니다. 특히 코로나19 이후 청결과 위생이 도시 경쟁력 일부로 인식되어 온 만큼 이 지표는 “안전한 도시 이미지” 를 형성하는 요소가 되었고, 본 과제에서는 안심식당 현황 자료를 활용하여, 도시 내 안심식당의 분포를 분석하기 위한 데이터를 정리해보려고 합니다.
3가지 방역수칙을 준수하여 안심식당으로 선정된 식당 리스트
농림축산식품부의 공공데이터 알아보기 –> https://data.mafra.go.kr/main.do.
library(flextable)
library(webshot)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.2
## ✔ ggplot2 4.0.0 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ purrr::compose() masks flextable::compose()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(XML)
library(jsonlite)
##
## Attaching package: 'jsonlite'
##
## The following object is masked from 'package:purrr':
##
## flatten
url <- "http://211.237.50.150:7080/openapi"
auth_key <- "e92b49066a3e7b4ef0a4cba04937c078e290caa6ec9da42104877e3c74a78ef0"
type <- 'xml'
service <- 'Grid_20200713000000000605_1'
startindex <- '1'
endindex <- '500'
api_url = paste(url, auth_key, type, service, startindex, endindex, sep = '/')
parsedXml <- xmlParse(api_url)
rowXml <- getNodeSet(parsedXml, "//row")
restaurant <- xmlToDataFrame(rowXml, stringsAsFactors = F)
glimpse(restaurant)
## Rows: 500
## Columns: 17
## $ ROW_NUM <chr> "1", "2", "3", "4", "5", "6", "7", "8", "9", "1…
## $ RELAX_SEQ <chr> "11162", "11163", "11164", "11165", "11166", "1…
## $ RELAX_ZIPCODE <chr> "37782", "37636", "37633", "37588", "37596", "3…
## $ RELAX_SI_NM <chr> "경상북도", "경상북도", "경상북도", "경상북도", "경상북도", "경상북도",…
## $ RELAX_SIDO_NM <chr> "포항시", "포항시", "포항시", "포항시", "포항시", "포항시", "포항시"…
## $ RELAX_RSTRNT_NM <chr> "김수사", "정담초밥", "99串양꼬치", "왕손짜장", "빨봉분식양덕점", "무이…
## $ RELAX_RSTRNT_REPRESENT <chr> "김성재", "정동필", "이서현", "김정란", "김성현외1명", "양은숙", "이…
## $ RELAX_RSTRNT_REG_DT <chr> "2020-09-04", "2020-09-04", "2020-09-04", "2020…
## $ RELAX_ADD1 <chr> "경상북도 포항시 북구 양학천로 56", "경상북도 포항시 북구 우창동로 33", "…
## $ RELAX_ADD2 <chr> "", "", "가동 지하 102호 ", "", "", "", "", "", "", …
## $ RELAX_GUBUN <chr> "일반음식점", "일반음식점", "일반음식점", "일반음식점", "일반음식점_외", …
## $ RELAX_GUBUN_DETAIL <chr> "일식", "일식", "기타외국식", "중식", "기타 음식점업", "한식", "한식…
## $ RELAX_RSTRNT_TEL <chr> "054-282-0004", "054-242-8700", "054-254-9450",…
## $ RELAX_USE_YN <chr> "Y", "Y", "Y", "Y", "N", "N", "Y", "Y", "Y", "N…
## $ RELAX_RSTRNT_CNCL_DT <chr> "", "", "", "", "2022-06-21", "2023-07-10", "",…
## $ RELAX_RSTRNT_ETC <chr> "", "", "", "", "", "", "", "", "", "", "", "",…
## $ UPDT_DT <chr> "2021-05-28", "2021-05-28", "2021-05-28", "2021…
names(restaurant)
## [1] "ROW_NUM" "RELAX_SEQ" "RELAX_ZIPCODE"
## [4] "RELAX_SI_NM" "RELAX_SIDO_NM" "RELAX_RSTRNT_NM"
## [7] "RELAX_RSTRNT_REPRESENT" "RELAX_RSTRNT_REG_DT" "RELAX_ADD1"
## [10] "RELAX_ADD2" "RELAX_GUBUN" "RELAX_GUBUN_DETAIL"
## [13] "RELAX_RSTRNT_TEL" "RELAX_USE_YN" "RELAX_RSTRNT_CNCL_DT"
## [16] "RELAX_RSTRNT_ETC" "UPDT_DT"
restaurant <- restaurant |>
rename(res_si = "RELAX_SI_NM",
res_sido = "RELAX_SIDO_NM",
res_name = "RELAX_RSTRNT_NM",
res_type = "RELAX_GUBUN_DETAIL",
res_result = "RELAX_USE_YN")
glimpse(restaurant)
## Rows: 500
## Columns: 17
## $ ROW_NUM <chr> "1", "2", "3", "4", "5", "6", "7", "8", "9", "1…
## $ RELAX_SEQ <chr> "11162", "11163", "11164", "11165", "11166", "1…
## $ RELAX_ZIPCODE <chr> "37782", "37636", "37633", "37588", "37596", "3…
## $ res_si <chr> "경상북도", "경상북도", "경상북도", "경상북도", "경상북도", "경상북도",…
## $ res_sido <chr> "포항시", "포항시", "포항시", "포항시", "포항시", "포항시", "포항시"…
## $ res_name <chr> "김수사", "정담초밥", "99串양꼬치", "왕손짜장", "빨봉분식양덕점", "무이…
## $ RELAX_RSTRNT_REPRESENT <chr> "김성재", "정동필", "이서현", "김정란", "김성현외1명", "양은숙", "이…
## $ RELAX_RSTRNT_REG_DT <chr> "2020-09-04", "2020-09-04", "2020-09-04", "2020…
## $ RELAX_ADD1 <chr> "경상북도 포항시 북구 양학천로 56", "경상북도 포항시 북구 우창동로 33", "…
## $ RELAX_ADD2 <chr> "", "", "가동 지하 102호 ", "", "", "", "", "", "", …
## $ RELAX_GUBUN <chr> "일반음식점", "일반음식점", "일반음식점", "일반음식점", "일반음식점_외", …
## $ res_type <chr> "일식", "일식", "기타외국식", "중식", "기타 음식점업", "한식", "한식…
## $ RELAX_RSTRNT_TEL <chr> "054-282-0004", "054-242-8700", "054-254-9450",…
## $ res_result <chr> "Y", "Y", "Y", "Y", "N", "N", "Y", "Y", "Y", "N…
## $ RELAX_RSTRNT_CNCL_DT <chr> "", "", "", "", "2022-06-21", "2023-07-10", "",…
## $ RELAX_RSTRNT_ETC <chr> "", "", "", "", "", "", "", "", "", "", "", "",…
## $ UPDT_DT <chr> "2021-05-28", "2021-05-28", "2021-05-28", "2021…
restaurant.tib <- as_tibble(restaurant)
restaurant.tib
## # A tibble: 500 × 17
## ROW_NUM RELAX_SEQ RELAX_ZIPCODE res_si res_sido res_name
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1 11162 37782 경상북도 포항시 김수사
## 2 2 11163 37636 경상북도 포항시 정담초밥
## 3 3 11164 37633 경상북도 포항시 99串양꼬치
## 4 4 11165 37588 경상북도 포항시 왕손짜장
## 5 5 11166 37596 경상북도 포항시 빨봉분식양덕점
## 6 6 11167 37587 경상북도 포항시 무이봉
## 7 7 11168 37579 경상북도 포항시 회일번지
## 8 8 11169 37572 경상북도 포항시 온정가
## 9 9 11170 37572 경상북도 포항시 B&J미술관
## 10 10 11171 37572 경상북도 포항시 소풍경(법원점)
## # ℹ 490 more rows
## # ℹ 11 more variables: RELAX_RSTRNT_REPRESENT <chr>, RELAX_RSTRNT_REG_DT <chr>,
## # RELAX_ADD1 <chr>, RELAX_ADD2 <chr>, RELAX_GUBUN <chr>, res_type <chr>,
## # RELAX_RSTRNT_TEL <chr>, res_result <chr>, RELAX_RSTRNT_CNCL_DT <chr>,
## # RELAX_RSTRNT_ETC <chr>, UPDT_DT <chr>
restaurant <- restaurant.tib
rm(restaurant.tib)
names(restaurant)
## [1] "ROW_NUM" "RELAX_SEQ" "RELAX_ZIPCODE"
## [4] "res_si" "res_sido" "res_name"
## [7] "RELAX_RSTRNT_REPRESENT" "RELAX_RSTRNT_REG_DT" "RELAX_ADD1"
## [10] "RELAX_ADD2" "RELAX_GUBUN" "res_type"
## [13] "RELAX_RSTRNT_TEL" "res_result" "RELAX_RSTRNT_CNCL_DT"
## [16] "RELAX_RSTRNT_ETC" "UPDT_DT"
restaurant |> select(res_si, res_sido, res_name, res_type, res_result)
## # A tibble: 500 × 5
## res_si res_sido res_name res_type res_result
## <chr> <chr> <chr> <chr> <chr>
## 1 경상북도 포항시 김수사 일식 Y
## 2 경상북도 포항시 정담초밥 일식 Y
## 3 경상북도 포항시 99串양꼬치 기타외국식 Y
## 4 경상북도 포항시 왕손짜장 중식 Y
## 5 경상북도 포항시 빨봉분식양덕점 기타 음식점업 N
## 6 경상북도 포항시 무이봉 한식 N
## 7 경상북도 포항시 회일번지 한식 Y
## 8 경상북도 포항시 온정가 한식 Y
## 9 경상북도 포항시 B&J미술관 한식 Y
## 10 경상북도 포항시 소풍경(법원점) 한식 N
## # ℹ 490 more rows
restaurant
## # A tibble: 500 × 17
## ROW_NUM RELAX_SEQ RELAX_ZIPCODE res_si res_sido res_name
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1 11162 37782 경상북도 포항시 김수사
## 2 2 11163 37636 경상북도 포항시 정담초밥
## 3 3 11164 37633 경상북도 포항시 99串양꼬치
## 4 4 11165 37588 경상북도 포항시 왕손짜장
## 5 5 11166 37596 경상북도 포항시 빨봉분식양덕점
## 6 6 11167 37587 경상북도 포항시 무이봉
## 7 7 11168 37579 경상북도 포항시 회일번지
## 8 8 11169 37572 경상북도 포항시 온정가
## 9 9 11170 37572 경상북도 포항시 B&J미술관
## 10 10 11171 37572 경상북도 포항시 소풍경(법원점)
## # ℹ 490 more rows
## # ℹ 11 more variables: RELAX_RSTRNT_REPRESENT <chr>, RELAX_RSTRNT_REG_DT <chr>,
## # RELAX_ADD1 <chr>, RELAX_ADD2 <chr>, RELAX_GUBUN <chr>, res_type <chr>,
## # RELAX_RSTRNT_TEL <chr>, res_result <chr>, RELAX_RSTRNT_CNCL_DT <chr>,
## # RELAX_RSTRNT_ETC <chr>, UPDT_DT <chr>
unique(restaurant$res_si)
## [1] "경상북도" "광주광역시" "경기도" "경상남도" "인천광역시"
## [6] "대구광역시" "울산광역시" "충청남도" "충청북도" "대전광역시"
restaurant |>
group_by(res_si) |>
summarize(n = n())
## # A tibble: 10 × 2
## res_si n
## <chr> <int>
## 1 경기도 46
## 2 경상남도 10
## 3 경상북도 273
## 4 광주광역시 23
## 5 대구광역시 62
## 6 대전광역시 7
## 7 울산광역시 1
## 8 인천광역시 3
## 9 충청남도 26
## 10 충청북도 49
restaurant |>
group_by(res_si, res_type) |>
summarize(n = n()) |>
mutate(total = sum(n),
freq = n / total)
## `summarise()` has grouped output by 'res_si'. You can override using the
## `.groups` argument.
## # A tibble: 35 × 5
## # Groups: res_si [10]
## res_si res_type n total freq
## <chr> <chr> <int> <int> <dbl>
## 1 경기도 기타외국식 3 46 0.0652
## 2 경기도 서양식 2 46 0.0435
## 3 경기도 일식 5 46 0.109
## 4 경기도 중식 2 46 0.0435
## 5 경기도 한식 34 46 0.739
## 6 경상남도 기타 음식점업 4 10 0.4
## 7 경상남도 서양식 1 10 0.1
## 8 경상남도 한식 5 10 0.5
## 9 경상북도 기타 음식점업 15 273 0.0549
## 10 경상북도 기타외국식 2 273 0.00733
## # ℹ 25 more rows