-
[Data Visualization] folium으로 지도에 데이터 시각화하기Data Science/Data Visualization 2021. 7. 25. 18:54
위도, 경도와 같은 지리 정보를 가지고 있는 데이터는 아래처럼 scatter plot 을 이용하기도 합니다.
하지만 지도 위에 표시해서 위치 정보에 대해서 자세히 알아보고 싶을 때가 있습니다 .
이럴 때 folium을 이용해서 지도 위에 정보를 표시해볼 수 있습니다.
folium을 이용해 지도 위에 데이터를 표시하기 위해 위도, 경도 데이터가 필요해서
서울 열린데이터 광장에서 서울시 나눔카 거점리스트 정보 데이터를 다운받아 사용해보았습니다.
http://data.seoul.go.kr/dataList/OA-13544/S/1/datasetView.do
서울시 나눔카 거점리스트 정보
서울시 통합 나눔카로서 통합 거점정보 정보를 제공한다.
data.seoul.go.kr
pandas를 이용해서 데이터를 불러오겠습니다.
import pandas as pd df = pd.read_csv('서울시 나눔카 거점리스트 정보.csv', encoding = 'cp949') df
데이터를 살펴보니 중복 데이터가 있어서 중복 데이터를 제거해주었고,
전체 데이터를 사용해 마커로 표시하기에는 양이 많아 마포구 데이터만 분리해서 사용해 주었습니다.
# 중복 제거 df.drop_duplicates(ignore_index = True, inplace = True) # 인덱스 재정렬:ignore_index = True # 지역구 칼럼 추가 df['지역구'] = df.주소.apply(lambda x: x[3:6]) # 마포구 데이터 mapo = df[df.지역구 == '마포구'] mapo
folium 라이브러리를 불러와주고, 먼저 지도를 생성해 준 다음 지도에 위도, 경도 데이터를 마커로 추가해 주었습니다.
지도의 중앙값, 즉 지도의 중앙 지점으로 location을 마포구 데이터의 위도, 경도 평균으로 설정해 주었고,
처음 지도가 생성되었을 때 줌의 정도는 zoom_start로 필요에 따라서 설정해 주시면 되는데 이번에는 14로 설정해 주었습니다.
숫자가 클수록 줌인이 되어 좁은 지역을 확대해 보여주고, 숫자가 작을수록 줌아웃이 되어 한 번에 넓은 지역을 지도에 보여줍니다.
folium은 인터랙티브 하게 이용할 수 있는데 줌인 줌아웃뿐만 아니라
tooltip에 feature를 지정해 주면 마커에 마우스를 가져다 대었을 때 지정해 준 feature에 해당하는 상세정보를 확인할 수 있습니다.
import folium from folium import Marker # 지도 생성 - 지도 중앙값 mapo 데이터 위도, 경도의 평균으로 설정 map = folium.Map(location=[mapo['위도'].mean(), mapo['경도'].mean()], zoom_start = 14) # 지도에 마커 추가 # 마커에 전기차 여부 상세정보 추가 for idx, row in mapo.iterrows(): Marker([row['위도'], row['경도']], tooltip=row['전기차 여부 TO: 혼합차량 EV: 전기차 GA: 가솔린차']).add_to(map) map
Marker외에도 folium을 이용해서
지도상에 색으로 데이터 수치의 정도를 표현하는 Choropleth Map, 원으로 데이터를 표시하는 Circle 등 다양한 시각화를 할 수 있습니다.
'Data Science > Data Visualization' 카테고리의 다른 글
[Data Visualization] 데이터 시각화 - plotly : Interactive scatter plot (0) 2021.07.13 [Data Visualization] 데이터 시각화 - matplotlib(4) : pie (0) 2021.01.27 [Data Visualization] 데이터 시각화 - matplotlib(3) : hist (0) 2021.01.25 [Data Visualization] 데이터 시각화 - matplotlib(2) : scatter, bar, barh (0) 2021.01.24 [Data Visualization] 데이터 시각화 - matplotlib(1) (0) 2021.01.18