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="

srch_url <- paste0(url, API_key, "&reqPage=1")

srch_url <- paste0() : 인수들을 공란없이 모든 붙임

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 == 106ROUTE_CD를 찾으면 된다.

bus_ID <- dj_Bus[dj_Bus$ROUTE_NO == "106",  "ROUTE_CD"] 
bus_ID
## [1] "30300041"