[Visualization in Python] folium HeatMapWithTime을 이용한 북촌 유동인구 지도 시각화


안녕하세요! 이번 포스트에서는 파이썬 지도 시각화 라이브러리 folium.pluginHeatMapWithTime 을 이용해서 특정 시간의 북촌 주요 지역 유동인구 추이를 지도에 시각화하고자 합니다.

아래 데이터는 서울 열린데이터 광장의 데이터에서 기준날짜, 카메라명칭을 가져오고, 진입계수진출계수를 평균 내서 계수 평균이라 명명한 것입니다. 참고로 진입계수와 진출계수는 각각 밤 11시 40분과 50분에 해당하는 유동인구입니다. 또 한, 이 데이터에서는 딱 4가지 지역(율곡로 3길 50, 계동길 69 북촌로5가길 38, 북촌로 11길 1)만 존재했고, 이 지역들에 대한 좌표를 구글맵을 통해 얻었습니다. 이 데이터에 기록된 날짜는 2019년 9월 28일부터 2019년 10월 26일까지입니다.

이제 이 데이터를 가지고, 2019년 9월 28일부터 10월 26일까지, 네개 지역의, 밤 11시 40~50분 유동인구 추이를 지도로 나타내봅시다! 참고로 아래 내용에 대한 코드는 이곳에 있습니다.

그 전에 계수 평균 칼럼을 0에서 300명 사이로 스케일링 하고자 합니다. HeatmapWithTime을 조금 더 예쁘게 시각화하기 위해 스케일링 하는 것입니다. 왜냐하면, 이 계수 평균 개수만큼의 좌표 데이터를 만들 것이기 때문입니다..^^

이제 본격적으로 HeatmapWithTime을 적용하기 위해서는 인풋 데이터를 규격에 맞게 만들어야 합니다! 이게 살짝 복잡할 수도 있는데 유동인구가 움직이는 모습을 잘 표현하기 위해 제가 한 방식은 다음과 같습니다. 먼저 HeatmapWithTime에 넣어야 하는 인풋 데이터는 3차원 구조의 리스트입니다. 바깥 쪽 차원은 시간입니다. 2019년 9월 28일부터 10월 26일까지 총 29개의 리스트가 존재하겠네요. (가장 바깥의 리스트 안에 29개의 리스트가 존재하는 것이겠죠?) 그리고 각각의 29개 리스트 안에 또 리스트가 존재합니다. 이 안쪽 리스트는 바로 각 지역의 계수평균 개수 만큼의 각 지역의 좌표 데이터 입니다. 제가 설명을 쓰면서도 멘붕이 오고 있네요ㅠㅠㅋㅋㅋㅋ 예시를 들어서 설명하도록 하겠습니다.

예를 들어, 이 인풋 데이터 안의 29개의 리스트 중 첫번째 리스트는 2019년 9월 28일 데이터입니다! 위의 데이터프레임을 보면, 이 날에 율곡로3길 50에는 134명이 존재하였으므로, 율곡로3길 50에 해당하는 좌표 리스트 [37,57770, 126.982634]를 134개 생성합니다. 또, 계동길 69는 192명이 존재하였으므로, 계동길 69에 해당하는 좌표 리스트를 192개 추가합니다. 마찬가지로 북촌로5가길 38은 80개, 북촌로11길 1은 94개의 좌표 리스트를 추가합니다. 따라서, 29개의 리스트 중 첫번째 리스트 안에는 134+192+80+94=500개의 좌표 리스트가 존재합니다. 약간 이해가 되셨나요? 나머지 28개의 날짜들도 똑같이 구성됩니다.

자, 여기서 끝나지 않았습니다. 똑같은 좌표 데이터를 백개씩 뽑는다고 유동인구 움직이는 모습이 잘 표현이 될까요? 이렇게 완전히 똑같은 좌표 데이터들을 넣을 경우 각 지역에 빨간 점만 찍힐 뿐, 유동인구의 움직이는 모습이 표현이 안됩니다. 따라서, 그 지역을 중심으로 미세하게 다른 좌표들을 추가해줘야 그 지역을 중심으로 퍼지는 모습이 표현이 됩니다! 따라서, 저는 율곡로3길 50의 좌표 [37,57770, 126.982634]를 평균으로 하고, 표준편차를 0.0003으로 하는 정규분포에서 134개의 샘플을 추출하였습니다. 계동길 69도 마찬가지로 이 지역의 좌표를 평균으로 하는 정규분포에서 192개의 샘플을 추출했습니다. 사실 뭐 이렇게까지 하나 싶기도 한데, 이해만 하면 쉽고, 또 결과물 보면 저는 그래도 꽤 맘에 들더라구요ㅋㅋㅋ

기준날짜 로 지도 시각화에 나타낼 시간 데이터를 만들어 놓습니다.

이제 위에서 만든 인풋 데이터와 시간 데이터를 HeatMapWithTime에 넣으면 끝입니다!
각 지역 별로 유동인구 차이가 상당히 있어야 좀 더 보기 좋은데 이 데이터는 서울 북촌 내 4가지 지역만을 다루고 있어서 애초에 유동인구 차이가 큰 편이라고는 할 수 없었습니다. 그래도 어느정도 북촌로 5가길 38이 미세하게 밤 11시 40분 유동인구가 북촌에서 적은 편이고, 계동길 69 지역이 조금 더 많은 편이라는 것은 확인할 수 있네요!