[데이콘] 대도시권 광역교통 빅데이터 분석 시각화 및 활용 아이디어 경진대회

SOO·2022년 12월 13일
0

프로젝트

목록 보기
2/3
post-thumbnail

데이콘 사이트

1. 목적

경기도에 거주하면서 수도권 내 대중교통 수단이 부족하다고 느낀 적이 많았다.
그래서 서울, 경기, 인천간 통행량과 대중교통 운송량을 비교하여 교통이 부족한 지역을 찾아 노선 신설이나 연장을 제안하려 한다.





2. 코드

`

데이터 분석에 필요한 코드를 먼저 불러온다.



1) 통행량 데이터 수집


교통카드 빅데이터 종합정보시스템 페이지에서 2019-2021년 3월 평일 중 하루의 통행량 데이터를 수집했다.
출발지 단위는 [시군구] 로, 도착지 단위는 [전체선택] 으로 설정했다.
둘 다 [전체선택]으로 하고싶었지만, 그건 불가능하다고 페이지에서 그랬다...아쉽



출발지는 내가 시/군을 입력해야 했다.
그래서 먼저 출발지 "시" 칸에 "서울특별시", "경기도", "인천광역시"를 입력하고, 구 이름들을 따로 list로 저장했다.



시 이름과 각 시의 구 이름을 합쳐 list로 만들었다.



selenium 모듈을 사용해 내가 원하는 지역을 출발지로 설정했을때의 통행량 데이터를 다운받았다.
날짜 선택은 계속 오류가 발생해 그냥 수동으로 선택해줬다.



3년치 데이터 다운받기 성공!



2) 버스 정류장, 전철역 주소 데이터 수집

그리고 데이콘에서 제공해준 데이터들도 불러온다.
제공해준 데이터는 2019-2021년 3월 중 평일 하루의 전국 대중교통 정보가 담겨있다.


제공받은 파일 중 Stop 파일에는 버스 정류장(전철역)의 위도, 경도 데이터가 있다.
위도 경도를 검색해 각 정류장의 주소 데이터를 수집하는 작업을 해주었다.



처음에는 네이버 지도를 사용했는데 시간이 지날수록 속도가 느려지는 문제가 발생해서 카카오맵으로 바꿨다.

정류장 이름과 시/도, 시/군/구, 동/읍/면, 위도, 경도 값을 dataframe 형태로 저장했다.



3) 통행량 데이터 전처리

(1) 파일 읽어오기


glob 모듈을 사용해 위에서 다운받은 통행량 파일들을 한번에 읽어왔다.
처음엔 몰랐는데.... 이 파일의 지명에는 띄어쓰기가 있었다..!! 그래서 strip()을 사용해 앞뒤에 있는 띄어쓰기를 없앴다.

(2) 필요한 데이터만 남기기


일자는 연-월 형식으로 바꿨다.



출발지는 서울, 경기, 인천으로 지정했지만 도착지는 전국으로 설정했었기에 도착지가 서울, 경기, 인천인 데이터만 남겼다.

(3) 피벗테이블 만들기


도시간 이동은 출발지-도착지가 A-B이든, B-A 이든 동일하다고 생각했고 대중교통도 편도가 아닌 왕복 운행이니 이를 합쳐야겠다 생각했다.
계산이 쉬운 피벗테이블을 활용했다.

반복문을 사용해 3년치 피벗테이블을 한번에 만들어 저장했다.

(4) DataFrame 만들기



나중에 할 시각화와 다른 파일과 merge 등을 위해 DataFrame 형태로 바꿔줬다.
이것도 3년치 모두 해주었다.



4) 버스 데이터 전처리

1) 크롤링으로 수집한 주소 데이터 정리



서울, 경기, 인천에 위치한 정류장만 추출

2) 지역 컬럼 만들기



통행량 데이터의 지역구분에 맞추기 위해 지역 컬럼에 서울시 OO구, 인천광역시 OO구/군, 경기도 OO구/군 형식으로 저장.

3) 정류장별 버스 노선



RouteStop 과 Stop 파일을 merge하여 각 정류장에 서는 버스를 알아낸다.
RouteStop 에서 Stop_YN = TRUE 인 데이터만 사용한다.(경유하는건 사용하지 않는다)
버스번호는 "RT_NM" 인데, Stop 과 RouteStop 에는 없어서,,, 다시 Route와 merge한다
bus_stop 데이터를 이용해 서울경기인천 내 정류장들만 추출

4) 노선별 운행횟수



정류장별로 서는 노선의 하루 운행 회수를 정차시각이 있는 StopTime 데이터를 사용해 구했다.
StopTime 에는 정류장 정보가 없어서, Stop_rail 데이터와 병합해서 사용했다.
1) Stop_rail과 StopTime 데이터를 "Stop_ID" 를 기준으로 병합
2) 필요없는 컬럼 제거
3) 피벗테이블을 사용해 노선별 운행 회수 계산


5) 데이터 합치기


위에서 만든 모든 파일을 지하철 역명을 기준으로 합쳐준다.


6) 출발지-도착지 별 버스번호와 운행횟수 구하기



버스운행 컬럼 : 출발지-도착지 간 버스의 운송량
버스정원을 45명(광역버스 기준)으로 두고 계산



5) 전철 데이터 전처리

1) 크롤링으로 수집한 주소 데이터 정리 & 지역 컬럼 만들기



서울, 경기, 인천에 위치한 정류장만 추출
통행량 데이터의 지역구분에 맞추기 위해 지역 컬럼에 서울시 OO구, 인천광역시 OO구/군, 경기도 OO구/군 형식으로 저장.

2) 노선별 하루 운행 회수 구하기

1) Stop_rail과 StopTime 데이터를 "Stop_ID" 를 기준으로 병합
2) 필요없는 컬럼 제거
3) 피벗테이블을 사용해 노선별 운행 회수 계산


정류장별로 서는 노선의 하루 운행 회수를 정차시각이 있는 StopTime 데이터를 사용해 구했다.
StopTime 에는 정류장 정보가 없어서, Stop_rail 데이터와 병합해서 사용했다.


3) 역별 호선, 칸 개수



모든 정류장의 량수 필요
Stop 에 정류장 정보가, Route 에 호선 별 량수 정보가 있음
둘을 바로 병합할수 없어서 중간에 RouteStop 을 사용함
1) Stop_rail 파일과 RouteStop 파일을 "Stop_ID" 를 기준으로 병합
2) 필요없는 컬럼 제거
3) 다시 Route_rail 파일과 "RT_ID" 를 기준으로 병합 (Route_rail 파일에 호선별 칸수 데이터가 있음)

4) 데이터 합치기


위에서 만든 모든 파일을 지하철 역명을 기준으으로 합쳐준다.

5) 출발지-도착지 별 노선명과 운행 회수



전철운행 컬럼 : 출발지-도착지 간 전철의 운송량
1칸 당 160명을 정원으로 두고 계산



6) 통행량, 버스, 전철 데이터 하나로 합치기



출발지 - 도착지 간 버스/전철의 수송량, 통행량 데이터로 만들기
교통적정 컬럼: 통행량 - 대중교통 수송량
교통적정 > 0 : 대중교통 노선 부족
교통적정 < 0 : 대중교통 노선 충분





3. 시각화

시각화는 담아야 하는 정보가 너무 많아서 한번에 다 펼쳐보이기는 어렵다고 생각해 태블로를 사용했다.
태블로는 PPT처럼 원하는 대로 움직이는 장점이 있기 때문이다.
태블로 사이트

상단에서 연도와 출발지를 선택하면, 통행량이 많은 순서대로 트리맵이 그려지고
색상이 진한 빨강인 부분은 통행량에 비해 교통수단이 적은 곳을 의미한다.

마우스 커서를 올리면 통행량과 교통 수송량, 그리고 교통이 얼마나 부족한지 까지 알수 있다.





4. 결론


위의 분석 결과, 서울 강서구 - 인천 연수구 간 통행량은 1856으로 많지만 대중교통은 아예 없는 것으로 나타났다.
연수구에는 송도가 있고, 송도는 계속해서 인구가 늘어나고 있어 앞으로 수요가 더 증가할 것으로 예상했다.


통행량 수치는 왕복 통행량이니 이를 절반으로 나누고,
신설하기 상대적으로 편리한 버스노선을 신설한다고 가정하여 수용인원인 45로 나누면 20.6이 나온다.
즉 하루 약 20회 운행하는 강서구-연수구 직행 노선이 생기면 좋을 듯 하다.


버스 노선은 현재 버스들이 다니는 노선을 참고하여 만들어봤다.

profile
데이터 분석으로 세상을 읽어보쟈 빠샤

0개의 댓글