Chapter 1 버스 노선의 노선 ID
확인
data.go.kr
의 Open API 활용 방법을 학습하기 위해, 현재 서울시에서 운행중인 버스 노선에 대한 정보 조회 방법을 예로 들어본다.
(노선정보조회 서비스 Open API 활용가이드 P. 10)
패키지 불러오기
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 서울시 운행중인 노선 번호와 노선 ID 확인
먼저 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 노선정보 조회
(노선정보조회 서비스 Open API 활용가이드 P. 10, (3) getBusRouteList 상세기능 명세)
1.1.2.1 조회할 노선번호
노선번호(busRtNm
)를 공란으로 한다. 즉, 서울시에 운행중인 모든 노선정보를 조회한다.
<- "" # 검색할 노선버스 번호를 빈문자로 정한다. busRtNm
1.1.2.2 노선정보 조회 서비스 URL
노선정보조회 서비스 url을 입력한다.
- 기본 url : “http://ws.bus.go.kr/api/rest/busRouteInfo/getBusRouteList?ServiceKey=”
- &strSrcg :
busRtNm
<- "http://ws.bus.go.kr/api/rest/busRouteInfo/getBusRouteList?ServiceKey="
url <- paste(url, API_key, "&strSrch=", busRtNm, sep= "") srch_url
1.1.2.3 노선정보를 조회
xmlParse()
함수를 이용하여 노선정보 데이터를 다운로드하여, xmlfile
에 대입한다.
<- xmlParse(srch_url) # 해당 url에 데이터를 요구(request)하고,
xmlfile # 그 결과(response)를 xmlfile 변수에 저장한다.
# xmlRoot(xmlfile) # xmlfile 변수의 내용을 출력한다.
1.1.2.4 조회한 정보를 데이터 프레임 형태로 변환
xmlToDataFrmae()
함수를 이용하여, xmlfile
을 데이터 프레임 형태로 변환하여 df
변수에 대입한다.
이제 df
변수는 서울시에서 운행 중인 모든 노선 정보를 담고 있다.
<- xmlToDataFrame(getNodeSet(xmlfile, "//itemList")) # xml 형식을 데이터프레임으로 변환.
df str(df) # 노선정보조회 서비스 Open API 활용 가이드 : p. 10-11 (2) 응답메시지 명세 참고...
## 'data.frame': 1179 obs. of 13 variables:
## $ busRouteId : chr "100100506" "100100507" "100100513" "100100373" ...
## $ busRouteNm : chr "6006" "6009" "6100" "6101" ...
## $ corpNm : chr "서울공항리무진 02-577-1343" "서울공항리무진 02-577-1343" "한국도심공항 02-551-0077" "한국도심공항 02-551-0077" ...
## $ edStationNm: chr "인천공항" "인천공항" "인천공항" "김포공항" ...
## $ firstBusTm : chr "20201206065000" "20201206065000" "20201206053000" "20201206051000" ...
## $ firstLowTm : chr " " "20200302000000" " " "20190812000000" ...
## $ lastBusTm : chr "20201206202000" "20201206150500" "20201206154000" "20201206204000" ...
## $ lastBusYn : chr " " " " " " " " ...
## $ lastLowTm : chr " " "20200302000000" "20191105000000" "20190812000000" ...
## $ length : chr "178.7" "147" "206" "90" ...
## $ routeType : chr "1" "1" "1" "1" ...
## $ stStationNm: chr "몽촌토성역" "푸른마을아파트앞" "망우역" "수락터미널" ...
## $ term : chr "630" "630" "180" "70" ...
- 서울시에 운행 중인 버스 노선이 1172개임을 확인할 수 있다.
- 컬럼의 갯수는 13개 : 이들에 대한 자세한 내용은 “노선정보조회 서비스 Open API 활용 가이드 : p. 10-11 (2) 응답메시지 명세 참고…”
1.1.2.5 노선정보 확인
서울시에 운행 중인 “모든 노선정보”를 확인한다.
%>% head df
## busRouteId busRouteNm corpNm edStationNm firstBusTm
## 1 100100506 6006 서울공항리무진 02-577-1343 인천공항 20201206065000
## 2 100100507 6009 서울공항리무진 02-577-1343 인천공항 20201206065000
## 3 100100513 6100 한국도심공항 02-551-0077 인천공항 20201206053000
## 4 100100373 6101 한국도심공항 02-551-0077 김포공항 20201206051000
## 5 100100508 6300 서울공항리무진 02-577-1343 인천공항 20201206064000
## 6 100100568 6707A KAL리무진 02-2667-0386 인천공항 20201206044000
## firstLowTm lastBusTm lastBusYn lastLowTm length routeType
## 1 20201206202000 178.7 1
## 2 20200302000000 20201206150500 20200302000000 147 1
## 3 20201206154000 20191105000000 206 1
## 4 20190812000000 20201206204000 20190812000000 90 1
## 5 20201206145500 20200324000000 201.4 1
## 6 20200617000000 20201206223000 20180112000000 130 1
## stStationNm term
## 1 몽촌토성역 630
## 2 푸른마을아파트앞 630
## 3 망우역 180
## 4 수락터미널 70
## 5 고덕동 630
## 6 김포공항 70
그 중에 busRouteNm
컬럼은 버스 노선 번호를, 그리고 busRouteId
컬럼은 노선 ID
를 보여준다.
head(df$busRouteNm) # 버스 노선 번호 출력
## [1] "6006" "6009" "6100" "6101" "6300" "6707A"
head(df$busRouteId) # 노선 ID 출력
## [1] "100100506" "100100507" "100100513" "100100373" "100100508" "100100568"
1.2 402번 버스 노선의 노선 ID 확인
df
변수의 busRouteNm == 402
인 busRouteId (컬럼 번호 1)를 찾으면 된다.
<- df[df$busRouteNm == "402", 1]
busID busID
## [1] "100100063"