지난번 포스팅에서는 드디어 우리가 원하는 일 평균 이용객수를 역별로 구할 수가 있었답니다.
해당 데이터를 가지고 간단히 상위 30곳을 그래프로 그려보겠습니다.
일단 시각화를 위해서 matplotlib.pyplot을 사용합니다. 그리고 아래 폰트 관련된 부분은 한글이 그래프상에서 깨지는 걸 방지하기 위해서 사용할 한글 폰트 정보를 가져오는 부분이니 거의 그대로 사용하시면 됩니다.
그래서 앞서 만든 데이터 프레임에 타일과 라벨을 간다히 설저하고 bar그래프로 표시해보면 이렇게 됩니다.
아주 이쁘지는 않지만 그럭저럭 볼만 합니다.
이번 포스팅에서는 지도위에 시각화하는 걸 해보겠습니다. 단순하게 바 그래프로 있는 것보다는 실제 지도위에 이용객수를 시각화해서 보여주면 좀 와 닿지 않을까요? python에서는 forium이란 패키지로 간단히 지도 위에 시각화가 가능합니다.
구글맵이나 네이버지도 등을 사용하려면 뭔가 설정이 더 필요하겠지만(api 키 발급 등) 일단 간단히 사용할 수 있는 forium패키지를 이용해보겠습니다.
그나저나 지도위에 역들을 실제 위치에 표시를 하려면 뭐가 필요하죠?
맞습니다. 역의 위치정보가 필요합니다. 주소로 표시하는 게 아니라 정확히 말해서는 위도와 경도가 필요합니다.
부산의 역들의 위도와 경도 정보는 첫번째 포스팅 때 설명을 했던 두 번째 파일인 부산 도시철도 역사정보 데이터 파일이 필요합니다. 해당 파일을 읽어와서 이제까지 데이터 프레임을 만지면서 만든 일평균 이용객수 데이터 파일에 위도/경도 정보를 매칭 해줘야 합니다.
데이터를 읽어와서 데이터프레임으로 한번 보겠습니다.
데이터 프레임끼리 정보를 가지고와서 병합을 하는 방법에는 concat와 merge가 있습니다. concate의 경우 데이터 프레임을 그냥 순서대로 합치는 거고 merge는 각 데이터 프레임의 키값을 기준으로 맞는 데이터를 찾아온다고 보시면 됩니다.
Excel에서 두개의 시트에서 필요한 데이터를 매칭 할 때 vlookup함수를 사용하는 것처럼 키값 기준으로 가져오면 됩니다.
이번 데이터 분석에서 사용하는 두 개의 데이터셋은 '역번호' 기준으로 데이터를 merge 하면 될 것 같습니다.
데이터를 merge전에 이 데이터셋도 유효한지 체크를 해봐야 합니다. 안타깝게도 역시 이상한 데이터로 추정되는 게 확인됩니다. 바로 중동역의 역번호가 4자리 수로 이상하게 되어 있네요.
이 경우 역번호를 키로 merge를 했을 때 제대로 값을 가져오지 못하겠지요. 추정상 보니 중동역은 202 가 되어 야할것 같은데 0이 하나 잘못 들어간 거 같습니다. 그래서 loc로 41번 인덱스 값을 202로 변경해줍니다.
다른 컬럼들의 정보들도 필요하지만 해당 데이터셋에서 필요한 정보는 사실 역번호와 역위도, 역경도만 가져오면 되니 해당 데이터만 가져와서 데이터 프레임으로 저장합니다.
이제 앞서 작업했던 역별 일평균 이용객수 데이터를 확인해보니 저번에 언급드렸던 인덱스 리셋이 필요해 보입니다.(why? 역번호로 merge를 해야 하니까요)
이렇게 reset_index명령어로 해주면 이제 역번호를 키로 merge가 가능해집니다. 간단히 merge를 해봅니다.
how의 옵션은 'inner'로 명시하지 않으면 default값이고 키 값 역시 명시하지 않아도 동일한 컬럼명이 있으면 바로 됩니다. 대신 명시적으로 하려면 on ='역번호' 란 내용을 해주면 됩니다.
자 멋지게 위도와 경도가 데이터가 merge가 되었네요. 전체 114개 역을 다 표시하면 어지러울 것 같아서 상위 30개와 하위 30개만 별도 데이터 프레임으로 저장해서 각각 보겠습니다.
이제 이걸 지도 위에 시각화해보겠습니다. 일단 folium 패키지를 사용하고 초기 지도 위치와 줌 레벨을 조정해줍니다.
상위 30개 저장된 데이터 프레임을 하나하나 읽어서 지도 위치에 파란색 동그라미로 표시해보겠습니다.
한눈에 봐도 역시 1호선과 2호선 라인의 이용객이 많은 역들이 보이네요.
이번에는 이용객이 적은 역들을 지도에 표시해보겠습니다. 3호선과 가장 나중에 생긴 4호선들이 역시 이용객이 작은 곳으로 지도상에 표시가 됩니다.
어떠셨나요? 데이터 프레임의 데이터를 위도/경도 정보를 가지고 와서 지도 위에 시각화하는 거 어렵지 않게 할 수 있을 것 같죠. 다음번 포스팅에서는 부산에 주요 관광지로 오는 지역의 역들을 대상으로 언제 이용객이 많은지 한번 살펴보겠습니다.
함께 보면 좋을 정보
- 김형준님 파이썬 기초 05 Pandas and DataFrame
- folium Documentation
- 하나씩 점을 찍어 나가며 님의 folium의 plugins 패키지 샘플 살펴보기
'아재도 하는 데이터분석' 카테고리의 다른 글
[250원] 데이터분석준전문가(ADsP) 자격증 시험후기 (0) | 2019.10.02 |
---|---|
[200원] Python 데이터분석 05 - 부산 주요 관광지 근처의 지하철 이용객수 시각화분석(feat by seabon heatmap) (0) | 2019.08.13 |
[100원] Python 데이터분석 03 -데이터 프레임조작하기 (groupby) (0) | 2019.08.10 |
[150원] Python 데이터분석 02 -데이터 정리 (4) | 2019.08.09 |
[100원] Python 데이터분석 01 - 부산교통공사 시간대별승하차인원 (4) | 2019.08.08 |