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를 확인할 수 있다.
<- "106" # 검색할 노선버스 번호를 빈문자로 정한다. busRtNm
1.1.2.2 노선정보 조회 서비스 URL
노선정보조회 서비스 url을 입력한다.
- 기본 url : “http://openapitraffic.daejeon.go.kr/api/rest/busRouteInfo/getRouteInfoAll?serviceKey=”
- &reqPage=1 : 모든 페이지 요구
<- "http://openapitraffic.daejeon.go.kr/api/rest/busRouteInfo/getRouteInfoAll?serviceKey="
url
<- paste0(url, API_key, "&reqPage=1") srch_url
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
에 대입한다.
<- xmlParse(srch_url)
xmlfile # xmlRoot(xmefile) # 다운받은 결과 모두 출력
- xmlfile <- xmlParse(srch_url) :
srch_url
사이트에서 정보를 가져와(xmlParse()
), 변수xmlfile
에 저장하기. - xmlRoot(xmlfile) :
xmffile
의 내용출력하기(xmlRoot()
)
1.1.2.4 조회한 정보를 데이터 프레임 형태로 변환
xmlToDataFrmae()
함수를 이용하여, xmlfile
을 데이터 프레임 형태로 변환하여 dj_Bus
변수에 대입한다.
<- xmlToDataFrame(getNodeSet(xmlfile, "//itemList"))
dj_Bus 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
를 찾으면 된다.
<- dj_Bus[dj_Bus$ROUTE_NO == "106", "ROUTE_CD"]
bus_ID bus_ID
## [1] "30300041"