서울 시내 대중교통 정류장 밀집도 도식화

장재형·2023년 3월 14일
0

데이터분석_실전

목록 보기
1/1
post-thumbnail

서울 시내 대중교통 밀집도와 관련하여 눈으로 확인해보고 싶어 공공데이터를 이용해 대중교통 정류장의 위치를 도식화해보았다.


모든 데이터는 위와 같이 csv파일로 읽어왔고,
각 정류장마다 위/경도만을 남기는 전처리 과정을 거쳤다.

데이터 출처
서울시 버스정류소 위치정보
https://data.seoul.go.kr/dataList/OA-15067/S/1/datasetView.do
서울특별시_따릉이대여소 마스터 정보
https://www.data.go.kr/data/15099365/fileData.do
서울교통공사_1_8호선 역사 좌표(위경도) 정보
https://www.data.go.kr/data/15099316/fileData.do?recommendDataYn=Y

!pip install folium

파이썬 지도 시각화 라이브러리인 folium 설치 후 간단한 코드를 작성했다.

import folium
import pandas as pd

# CSV 파일 읽기
df_bus = pd.read_csv('seoul_bus_XY.csv')
df_bike = pd.read_csv('seoul_bike_XY.csv')
df_subway = pd.read_csv('seoul_subway_XY.csv')

# 지도 생성
m = folium.Map(location=[37.53897093698831, 127.05461953077439], zoom_start=14)

# CSV 파일의 좌표 값 반복하여 Circle 추가
for index, row in df_bus.iterrows():
    folium.Circle(
        location=[row['lat'], row['lng']],
        radius=400,  # 원 크기
        color='#FFFFFF',  # 원 선 색상
        fill_color='#0068b7',  # 원 내부 색상
    ).add_to(m)
   
m
m.save('example.html')

밀집도를 확인하기 위해 원의 크기를 키우고, 불투명도를 낮추고 싶었다.
찾아본 결과, hexcode 뒤 숫자 두자리를 변경하면 불투명도를 조절할 수 있다고 하더라...

        color='#FFFFFF00',  # 원 선 색상
        fill_color='#0068b766',  # 원 내부 색상

위와 같이 수정하고 run시키니 실제로 외곽선이 사라지고 원이 투명해졌다..-


위 이미지는 따릉이와 지하철 정류장을 추가하기 전, 버스 정류장 좌표만을 지도에 찍어보았던 미완성 ... 상태이다.
그래도 잘 작동함을 알 수 있었습니다.

목표 달성을 위해 나머지 두 대중교통 정류장 좌표를 표시해줬다.
그리고 제가 생각하기에 각 대중교통이 커버할 수 있는 영역이 다르다고 생각하여 자전거 < 버스 < 지하철 순서로 원의 radius값에 차등을 두었다.

표시 색상
bus = blue
bicycle = green
subway = orange

import folium
import pandas as pd

# CSV 파일 읽기
df_bus = pd.read_csv('seoul_bus_XY.csv')
df_bike = pd.read_csv('seoul_bike_XY.csv')
df_subway = pd.read_csv('seoul_subway_XY.csv')

# 지도 생성
m = folium.Map(location=[37.53897093698831, 127.05461953077439], zoom_start=14)

# CSV 파일의 좌표 값 반복하여 Circle 추가_버스
for index, row in df_bus.iterrows():
    folium.Circle(
        location=[row['lat'], row['lng']],
        radius=400,  # 원 크기
        color='#FFFFFF00',  # 원 선 색상
        fill_color='#0068b766',  # 원 내부 색상
    ).add_to(m)
    
# CSV 파일의 좌표 값 반복하여 Circle 추가_자전거
for index, row in df_bike.iterrows():
    folium.Circle(
        location=[row['lat'], row['lng']],
        radius=300,  # 원 크기
        color='#FFFFFF00',  # 원 선 색상
        fill_color='#39bc00FF',  # 원 내부 색상
    ).add_to(m)
    
# CSV 파일의 좌표 값 반복하여 Circle 추가_지하철
for index, row in df_subway.iterrows():
    folium.Circle(
        location=[row['lat'], row['lng']],
        radius=500,  # 원 크기
        color='#FFFFFF00',  # 원 선 색상
        fill_color='#f87f00FF',  # 원 내부 색상
    ).add_to(m)

m
m.save('example.html')


result
대략적으로 보면 종로-을지로를 따라 orange영역이 짙게 형성되어 있고 외곽으로 빠질수록 blue영역이 짙은 것을 확인할 수 있다.
관악구/노원구는 언덕이 많아 버스가 많은 것일까? 아직은 잘 모르겠다...

송파구 result

양천구 result

import한 html 파일은 velog에 어떻게 직접 업로드하는지 모르겠어서
https://drive.google.com/file/d/1dZdfC_yJl6oJ-LKHh8erC8khPxpECrDf/view?usp=sharing
이게 현재로선 최선의 방법이 아닐까 생각한다.

To-do

  • 이용량 데이터를 토대로 각 대중교통마다 최적의 radius값 적용
  • 1-8호선을 제외한 나머지 지하철역 좌표값 추가
  • 색상 밀도와 실제 이용량간의 correlation coefficient 탐색
profile
HYU 17'

0개의 댓글