Chapter 1 대전광역시 버스 노선 ID 확인하기
data.go.kr의 Open API 활용 방법을 학습하기 위해, 현재 대전광역시 운행중인 버스 노선에 대한 정보 조회 방법을 예로 들어본다.
(OpenAPI활용가이드_대전광역시_버스정보시스템_v1.0.docx 참고)
패키지 불러오기
library(XML)
library(ggmap)## Loading required package: ggplot2
## Google's Terms of Service: https://cloud.google.com/maps-platform/terms/.
## Please cite ggmap if you use it! See citation("ggmap") for details.
library(tidyverse)## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## √ tibble  3.0.4     √ dplyr   1.0.2
## √ tidyr   1.1.2     √ stringr 1.4.0
## √ readr   1.4.0     √ forcats 0.5.0
## √ purrr   0.3.4
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
1.1 대전광역시의 전체 노선 정보 확인
먼저 Open API를 사용하기 위해 data.go.kr에서 발급받은 API Key를 인증받는다.
1.1.1 API Key 인증받기
API_key <- "XNamCEPA1y........w2oz2Hqld26g%3D%3D"               
# data.go.kr에서 발급받은 API_key 입력
1.1.2 전체 노선정보 조회
1.1.2.1 조회할 노선번호
노선번호(busRtNm)를 106번으로 한다.
대전광역시의 버스 노선정보 조회 서비는 서울특별시와 달리 하나의 데이터 베이스에서 노선번호와 노선ID를 확인할 수 있다.
busRtNm <- "106"                      # 검색할 노선버스 번호를 빈문자로 정한다. 1.1.2.2 노선정보 조회 서비스 URL
노선정보조회 서비스 url을 입력한다.
- 기본 url : “http://openapitraffic.daejeon.go.kr/api/rest/busRouteInfo/getRouteInfoAll?serviceKey=”
 - &reqPage=1 : 모든 페이지 요구
 
url <- "http://openapitraffic.daejeon.go.kr/api/rest/busRouteInfo/getRouteInfoAll?serviceKey="
srch_url <- paste0(url, API_key, "&reqPage=1")srch_url <- paste0() : 인수들을 공란없이 모든 붙임
- url : http://openapitraffic.daejeon.go.kr/api/rest/busRouteInfo/getRouteInfoAll => 버스노선정보 검색 url.
 - ? : API의 인수 연결
 - serviceKey = : (API의 첫번째 인수) 공공데이터 API Key
 - & : 추가적인 인수의 연결
 - reqPage=1 : (API의 두번쨰 인수) 버스노선정보 이용자매뉴얼 참고
 
1.1.2.3 노선정보를 조회
xmlParse() 함수를 이용하여 노선정보 데이터를 다운로드하여, xmlfile에 대입한다.
xmlfile <- xmlParse(srch_url)
# xmlRoot(xmefile)    # 다운받은 결과 모두 출력- xmlfile <- xmlParse(srch_url) : 
srch_url사이트에서 정보를 가져와(xmlParse()), 변수xmlfile에 저장하기. - xmlRoot(xmlfile) :
xmffile의 내용출력하기(xmlRoot()) 
1.1.2.4 조회한 정보를 데이터 프레임 형태로 변환
xmlToDataFrmae() 함수를 이용하여, xmlfile을 데이터 프레임 형태로 변환하여 dj_Bus 변수에 대입한다.
dj_Bus <- xmlToDataFrame(getNodeSet(xmlfile, "//itemList"))
str(dj_Bus)## 'data.frame':    100 obs. of  27 variables:
##  $ ALLO_INTERVAL    : chr  "30" "8" "35" "25" ...
##  $ ALLO_INTERVAL_SAT: chr  "30" "9" "35" "25" ...
##  $ ALLO_INTERVAL_SUN: chr  "30" "10" "40" "40" ...
##  $ BUSSTOP_CNT      : chr  "104" "62" "106" "80" ...
##  $ END_NODE_ID      : chr  "8002737" "8001782" "8005970" "8001783" ...
##  $ END_STOP_ID      : chr  "42750" "44800" "82210" "44490" ...
##  $ ORIGIN_END       : chr  "2230" "2230" "2210" "2235" ...
##  $ ORIGIN_END_SAT   : chr  "2230" "2230" "2210" "2235" ...
##  $ ORIGIN_END_SUN   : chr  "2230" "2230" "2210" "2230" ...
##  $ ORIGIN_START     : chr  "0600" "0545" "0555" "0600" ...
##  $ ORIGIN_START_SAT : chr  "0600" "0545" "0555" "0600" ...
##  $ ORIGIN_START_SUN : chr  "0630" "0545" "0600" "0600" ...
##  $ ROUTE_CD         : chr  "30300001" "30300002" "30300003" "30300004" ...
##  $ ROUTE_NO         : chr  "1" "2" "3" "5" ...
##  $ ROUTE_TP         : chr  "5  " "1  " "5  " "5  " ...
##  $ RUN_DIST_HALF    : chr  "23.907" "29.3505" "22.603" "18.056" ...
##  $ RUN_TM           : chr  "70    " "88    " "70    " "90    " ...
##  $ START_NODE_ID    : chr  "8002736" "8001783" "8005970" "8001783" ...
##  $ START_STOP_ID    : chr  "42740" "44490" "82210" "44490" ...
##  $ TURN_END         : chr  "2220" "2255" "2240" "2230" ...
##  $ TURN_END_SAT     : chr  "2220" "2255" "2240" "2230" ...
##  $ TURN_END_SUN     : chr  "2205" "2255" "2230" "2230" ...
##  $ TURN_NODE_ID     : chr  "8007228" "9002254" "8070009" "8005825" ...
##  $ TURN_START       : chr  "0600" "0545" "0610" "0600" ...
##  $ TURN_START_SAT   : chr  "0600" "0545" "0610" "0600" ...
##  $ TURN_START_SUN   : chr  "0630" "0545" "0615" "0600" ...
##  $ TURN_STOP_ID     : chr  "82370" "20980" "45610" "82240" ...
- 대전광역울시에서 운행 중인 버스 노선이 100개임을 확인할 수 있다.
 - 컬럼의 갯수는 27개 : 이들에 대한 자세한 내용은 “OpenAPI활용가이드_대전광역시_버스정보시스템_v1.0.docx : p. 14~17 참고…”
 
1.2 106번 버스의 노선 ID 확인
dj_Bus 데이터 세트의 ROUTE_NO 컬럼이 노선 번호를, 그리고 ROUTE_CD 컬럼이 노선 ID를 나타내고 있다. (“OpenAPI활용가이드_대전광역시_버스정보시스템_v1.0.docx : p. 15 참고..”)
따라서, dj_Bus 데이터 세트에서 ROUTE_N0 == 106인 ROUTE_CD를 찾으면 된다.
bus_ID <- dj_Bus[dj_Bus$ROUTE_NO == "106",  "ROUTE_CD"] 
bus_ID## [1] "30300041"