광고연구소

버스 데이터

서울시 버스 정류소 위치 및 노선별 정류장 승하차 데이터 가이드

1. 데이터 개요

수집 데이터
서울 열린데이터광장에서 제공하는 버스 관련 공공 데이터
카테고리DB 테이블건수 규모상태
버스 정류소 위치bus_stop~10,000건
등록완료
노선별 승하차bus_ridership_logs~1,000,000건+
등록완료
정류소 유형 코드bus_stop_type8건
등록완료
업데이트 주기

정류소 마스터: 연 1회 수준 (신규 정류소 추가/폐지 시)

승하차 데이터: 월 단위 CSV 추가 (전월 데이터 공개 후)

관리 페이지: /0xadmin/bus-stop, /0xadmin/bus-ridership

2. 정류소 유형 코드 (bus_stop_type)

유형 분류
서울시 버스 정류소를 차로 형태와 용도에 따라 분류한 코드
코드유형명설명
0
일반차로일반 도로변에 위치한 기본 정류소
1
중앙차로중앙버스전용차로 정류소 (간선버스 등)
2
일반중앙차로일반차로와 중앙차로를 겸하는 정류소
3
가로변전일가로변에 위치, 전일 운영
4
가로변시간가로변에 위치, 시간제 운영
5
마을버스마을버스 전용 정류소
6
가상정류장물리적 시설 없이 좌표만 존재하는 정류장
7
한강선착장한강 수상버스 선착장

3. 버스 정류소 (bus_stop)

테이블 스키마
서울시 전체 버스 정류소의 위치, 식별번호, 유형 마스터 데이터
컬럼명타입설명예시
nodeIdVARCHAR(20) PK표준 버스 정류장 ID (고유 식별자)100000001
arsIdVARCHAR(10)ARS 안내번호 (정류장에 표시된 5자리 번호)01001
stationNmVARCHAR(100)정류소 이름종로5가.동대문종합시장
xCoordDECIMAL(10,7)X좌표 (경도, WGS84)126.9996690
yCoordDECIMAL(10,7)Y좌표 (위도, WGS84)37.5709330
stationTypeVARCHAR(2)정류소 유형 코드 (bus_stop_type과 JOIN)0, 1, 5 ...
createdAtDATETIMEDB 등록 시각2026-02-27 10:00:00
인덱스
인덱스명컬럼용도
PRIMARYnodeId정류장 고유 ID로 조회
idx_arsIdarsIdARS 번호로 검색 (사용자 안내 시)
idx_stationTypestationType유형별 필터링 (중앙차로만 등)
nodeId vs arsId
구분형식용도
nodeId9자리 숫자 (100000001)시스템 내부 식별자. 승하차 데이터와 JOIN하는 기준 키
arsId5자리 숫자 (01001)정류장 표지판에 표시된 안내번호. 사용자가 인식하는 ID

승하차 데이터(bus_ridership_logs)에는 두 ID가 모두 포함되어 있어 어느 쪽으로든 JOIN 가능합니다.

4. 노선별 정류장 승하차 (bus_ridership_logs)

테이블 스키마
버스 노선별, 정류장별, 일별 승차/하차 총 승객수 데이터
컬럼명타입설명예시
idBIGINT (PK)자동 증가 ID1, 2, 3...
nodeIdVARCHAR(20)표준 버스 정류장 ID (bus_stop와 JOIN)100000001
arsNoVARCHAR(10)ARS 안내번호01001
rteNoVARCHAR(20)노선 번호140, 371, N37
rteNmVARCHAR(100)노선명 (기점~종점)140번(도봉산역~강남역)
stationNmVARCHAR(100)역명 (지하철 환승역인 경우)강남역, null
핵심 데이터
useYmdDATE사용일자 (승하차 집계일)2026-02-23
gtonCountINT승차 총 승객수 (해당 노선, 해당 정류장, 해당 일자)342
gtoffCountINT하차 총 승객수289
메타 정보
regYmdVARCHAR(8)등록일자 (서울시 원본)20260225
createdAtDATETIMEDB 저장 시각2026-02-27 10:00:00
인덱스
인덱스명컬럼용도
idx_nodeId_useYmdnodeId, useYmd특정 정류장의 기간별 승하차 조회
idx_rteNo_useYmdrteNo, useYmd특정 노선의 기간별 승하차 조회
idx_useYmduseYmd일자별 전체 집계

5. 참고 및 주의사항

모든 정류장에 광고가 있는 것은 아닙니다

서울시에는 약 10,000개의 버스 정류장이 등록되어 있지만, 이 중 광고 매체가 설치된 정류장은 일부에 해당합니다. 정류장 데이터는 모든 정류장의 위치/승하차 정보를 담고 있으므로, 광고 집행 시에는 실제 광고 매체 보유 여부를 별도로 확인해야 합니다.

광고 가능 여부 판별: dukplace-srv의 product 테이블에 등록된 매체만 광고 집행이 가능합니다. 정류장 데이터에 있다고 해서 모두 광고 매체가 있는 것은 아닙니다.

가상정류장 (유형코드 6): 물리적 시설이 없는 좌표만 존재하는 정류장으로, 광고 매체 설치 불가

활용 방법: 주변 정류장 승하차 데이터로 유동인구 규모를 파악한 뒤, product 테이블의 광고 매체 목록과 교차 확인하여 최종 매체 선정

데이터 해석 시 참고사항

승하차 수 ≠ 대기 인구: 승하차 데이터는 버스를 실제로 탑승/하차한 인원이며, 정류장 앞을 지나가는 보행 유동인구와는 다릅니다.

노선별 집계: 같은 정류장이라도 노선마다 별도 행으로 기록됩니다. 정류장 전체 승하차를 구하려면 해당 nodeId의 모든 노선을 합산해야 합니다.

일별 데이터: 시간대별 데이터는 포함되지 않습니다 (하루 단위 총합). 시간대별 패턴이 필요하면 실시간 유동인구 데이터를 병행 활용하세요.

6. 활용 시나리오

지정 위치 주변 버스 정류장 찾기

광고 매체 위치나 특정 역의 좌표(xCoord, yCoord)를 기준으로 반경 내 버스 정류장 목록을 조회할 수 있습니다.

입력: 기준 좌표 (예: 강남역 127.0276, 37.4979) + 반경 (예: 500m)

결과: bus_stop의 xCoord/yCoord로 거리 계산 → 반경 내 정류장 리스트 + 각 정류장의 승하차 합산

버스정류장 광고 매체 주변의 실제 버스 유동인구를 산출하는 데 활용됩니다.

특정 위치를 지나가는 버스 노선 조회

위 방법으로 주변 정류장을 찾은 뒤, 해당 정류장들의 nodeId bus_ridership_logs를 조회하면 그 위치를 지나가는 모든 버스 노선(rteNo, rteNm)을 알 수 있습니다.

입력: 주변 정류장의 nodeId 목록

결과: 해당 정류장을 경유하는 노선 번호 + 노선명 + 노선별 일 평균 승하차 수

특정 지역을 경유하는 노선의 승객 규모를 파악하여 버스 랩핑 광고 등의 매체 선정에 활용할 수 있습니다.

정류장 승하차로 지역 유동인구 추정

특정 지역(예: 역삼동) 내 모든 정류장의 승하차 합계를 구하면, 해당 지역의 버스 기반 유동인구 규모를 추정할 수 있습니다.

입력: 지역 범위 (좌표 영역 또는 반경)

결과: 영역 내 정류장 목록 → 일 평균 승차/하차 합산 → 지역별 버스 유동인구 비교

옥외광고 매체가 밀집된 지역의 버스 이용객 규모를 비교하여 매체 가치를 평가할 수 있습니다.

기존 실시간 데이터와 연계

정류장 좌표를 기존 지역 분석의 areaCd와 매칭하면, 실시간 유동인구 + 버스 승하차를 결합한 종합 분석이 가능합니다.

실시간 인구

해당 지역에 현재 있는 사람 수

버스 승하차

해당 지역 버스 이용객 수

생활이동

구 간 인구 흐름 방향/규모

세 가지 데이터를 결합하면 "이 지역에 누가, 어디서, 어떻게 오는지"를 종합적으로 파악할 수 있습니다.