아재도 하는 데이터분석

[100원] Python 데이터분석 01 - 부산교통공사 시간대별승하차인원

열심남 2019. 8. 8. 01:01
반응형

아재도 하는 데이터 분석  첫 번째 포스팅입니다.

 

여름방학 특강으로 들었던 개인 프로젝트에서 사용했던 데이터 파일에 대한 부분입니다.

요즘은 공공데이터 개방을 많이 하는 추세라 정부를 비롯해 많은 공공기관에서도 보유한 데이터들을 제공하고 있답니다. 그중에서 공공데이터 포털(https://www.data.go.kr/)을 통해서 내가 필요한 데이터셋을 찾아볼 수 있으니 자주 가봐야겠습니다.

 

프로젝트 시간에 분석하고 싶었던 데이터는 부산 도시철도 역별 이용객수를 확인해보고 싶은 거였습니다.

공공데이터 포털에서 찾을 수도 있지만 일단 부산 지하철을 운용하는 부산교통공사 홈페이지(https://www.humetro.busan.kr/default/main.do)에 가봤습니다. 여기서 정보공개-공공데이터 개방에 갔더니 공공데이터 개방목록을 따로 제공하고 있네요. 

 

결국 개방목록을 클릭했더니 위에 소개한 공공데이터 포털로 연결이 되네요.

다만 부산교통공사에서 제공하는 목록만 따로 나오니 이렇게 봐도 나쁘지는 않겠지요.

 

첫 번째 필요 파일

 

부산교통공사에서 공공데이터 포털을 통해 제공하는 데이터 목록 중에 제가 필요한 걸 찾아보니 부산 도시철도 시간대별 승하차 현황 이 가장 부합해 보입니다.

실세 세부 페이지에 가보니 파일이 2개가 제공되고 있습니다. 2019년 3월까지의 데이터와 2018년 전체 파일입니다.

일단 저는 년 전체가 필요해서 오른쪽의 2018년도 데이터 파일을 받았습니다. 

최신 데이터는 csv형태 아닌 xml파일로도 제공을 하고 있으니 필요한 걸로 받으시면 되겠네요.

 

세부 페이지 하단에 데이터 파일의 경우는 미리보기도 제공하니 어떤 데이터인지? 내가 필요한 데이터인지 다운로드하기 전에도 체크가 가능합니다. 원래 제가 필요한 건 일일 이용객 수가 확인되면 되는데 제공되는 데이터는 더 디테일합니다.

 

승/하차 구분이 되어 있고 시간대별로 구분되어 있습니다. 어차피 해당 데이터셋을 가공하면 될 테니 이 데이터로 하기로 했습니다.

 

받은 원천 데이터 파일 내용을 한번 살펴보겠습니다.

판다스 패키지에 read_csv로 한번 파일을 읽어와서 head()로 몇 개 데이터만 확인해봅니다.

데이터를 보고 어떤 데이터를 만들어내야 할지 감이 오시나요? 저의 목표는 부산에서 1일 이용객수가 가장 많은 역을 알고 싶습니다. 앞선 포스팅에서 쉽게 예상되는 서면역이 1위이겠지만 정말 그런지 확인해봐야죠! 그리고 궁금한 건 2위...

 

2위는 이 포스트에서 알려드릴 수가 없네요. ㅎㅎ(좀 더 보셔야 합니다.)

 

데이터를 좀더 살펴보니 승/하차로 구분이 되어 있으니 이것도 합쳐야 하고, 시간대별 승하차 이용객수를 합해서 1일 전체 합계도 만들어야겠네요.

 

전체 데이터에 대한 정보 확인을 해보겠습니다.

 행으로 81,760 열로 28개의 컬럼을 가지고 있고, 메모리 사용률이 17.5Mb 정도 사용한다고 하네요.

8만 건 정도의 데이터는 껌이죠 ^^:

칼럼 별로 데이터 타입을 한번 체크를 해보니 년월일이 int이니 이건 날짜 타입으로 변경해줘야 할 것 같고 역 번호는 상황에 따라 string타입이든 int 타입이든 변환을 하면 될 것 같습니다.

 

두 번째 필요 파일

다음 포스팅에서는 이 데이터를 가지고 1일 이용객 상위(TOP) 30과 하위(BOTTOM) 30인 역을 확인해보고 해당 역을 지도 위에 한번 시각화하는것 까지 해볼 예정입니다.

 

앗 그런데 지도위에 역정보를 뿌리려면 기본적으로 역사 위치에 대한 위도/경도 정보가 필요한데 이건 어디서 확인이 가능할까요?

 

제공된 데이터 파일 목록을 한번 검토해봤습니다.

 

부산도시철도 역정보에 있을 것 같은데 해당 파일 제공된 설명을 보니 (설명 :부산도시철도 1~4호선 역사 내 대합실, 승강장의 출구, 엘리베이터 등 주요 시설 정보를 도면으로 제공) 여기에는 시설정보만 있네요.

 

비슷해 보이는 부산도시철도 역사정보 파일을 보니 (설명 : 부산도시철도 역사명, 노선명, 영문, 한자명, 위도, 경도 등 역사정보 제공) 역위도와 경도 정보가 이 파일에 있네요.  이 파일도 필요해 보여 CSV로 받습니다.

(정말 다행입니다 없었으면 역별로 위도/경도 일일이 구글맵에서 확인할 뻔? ㅠㅠ)

 

나중에 첫 번째 파일과 두 번째 파일을 활용해서 멋지게 지도 위에 보이도록 하겠습니다.

두 개의 파일을 합하려면 pandas에서 제공하는  pandas.DataFrame.merge을 사용하면 됩니다.

 

 

  • python 스크립트 참조
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pandas as pd
#승하차인원 csv파일 읽기
data= pd.read_csv('./data2/부산교통공사 시간대별 승하차인원 (2018년).csv',engine='python')  #한글파일 csv인 경우 engine옵션 필요
 
#부산도시철도 시간대별 승하차 현황 
data.head()
 
#데이터셋 기본 정보 확인
data.info()
 
 
#도시철도역사정보 csv파일 읽기
dinfo= pd.read_csv('./data2/부산교통공사_도시철도역사정보_20190520.csv',engine='python')  #한글파일 csv인 경우 engine옵션 필요
dinfo.head()
cs

 

반응형