1. Folium 라이브러리
🚀 folium 라이브러리는 지도 위에 시각화할 때 유용한 도구
🚀 세계 지도를 기본 지원하고 다양한 스타일의 지도 이미지를 제공하고 있음
2. 지도 만들기
🚀 folium 라이브러리의 Map() 함수를 이용하여 지도 객체를 생성
🚀 지도 화면은 고정된 것이 아니고 줌 Zoom 기능과 화면 이동 Scroll이 가능
⚡️ folium은 웹 기반 지도를 만들기 때문에 웹 환경에서만 지도를 확인할 수 있음
⚡️ 지도를 보려면 지도 객체에 save() 메서드를 적용하여 HTML 파일로 저장하고 웹 브라우저에서 파일을 열어서 확인
➡️ 주피터 노트북에서는 바로 지도 객체를 확인할 수 있음
import folium
# 서울 지도 만들기
# location 옵션에 [위도, 경도] 수치를 입력하면 그 지점을 중심으로 지도를 보여줌
# zoom_start 옵션을 사용하면 화면 확대 비율을 조절할 수 있음
seoul_map = folium.Map(location=[37.55, 126.98], zoom_start=12)
seoul_map
# 지도를 HTML 파일로 저장하기
seoul_map.save('../output/seoul.html')
3. 지도 스타일 적용하기
🚀 Map() 함수에 tiles 옵션을 적용하면 지도에 적용하는 스타일을 변경하여 지정할 수 있다
🚀 tiles 스타일 종류
→ tiles = 'OpenStreetMap' (기본값)
→ tiles = 'Cartodb Positron' or 'cartodbpositron' (단계 구분도가 잘 표현 되도록 밝은 색으로 바꿈)
→ tiles = 'Cartodb dark_matter' (지도 색상을 다크모드로 지정)
import folium
seoul_map2 = folium.Map(location=[37.55, 126.98], zoom_start=15, tiles='Cartodb Positron')
seoul_map2
4. 지도 마커 (Marker) 표시하기
📌 서울 시내 주요 대학교의 위치 데이터를 데이터 프레임으로 변환하고, folium 지도에 위치를 표시
import pandas as pd
import folium
# 대학교 리스트를 데이터프레임 변환
df = pd.read_excel('../input/서울지역 대학교 위치.xlsx')
'''
name 위도 경도
0 KAIST 서울캠퍼스 37.592573 127.046737
1 KC대학교 37.548345 126.854797
2 가톨릭대학교(성신교정) 37.585922 127.004328
3 가톨릭대학교(성의교정) 37.499623 127.006065
4 감리교신학대학교 37.567645 126.961610
'''
# 서울 지도 만들기
seoul_map = folium.Map(location=[37.55, 126.98], zoom_start=12)
# 대학교 위치정보를 Marker로 표시
for name, lat, lng in zip(df['name'], df['위도'], df['경도']):
folium.Marker([lat, lng], popup=name).add_to(seoul_map)
seoul_map
⚡️ folium.Marker() 함수의 인수
- [위도, 경도] 는 마커를 찍을 좌표
- popup = '클릭문구' 는 마우스 클릭시 표시되는 문구
- tooltip = '오버문구' 는 마우스를 갖다 놓으면 표시되는 문구
- icon = folium.Icon(color='red', icon='star') 은 아이콘의 색상과 모양을 설정
- add_to(m) 은 설정한 모든 내용을 현재 지도에 적용하라는 의미
# 지도를 HTML 파일로 저장하기
seoul_map.save('../output/seoul_colleges.html')
💡 대학교 위치정보를 CircleMarker()로 표시
- Marker() 대신 CircleMarker()를 사용. 원형 마커의 크기, 색상, 투명도 들을 설정할 수 있음
for name, lat, lng in zip(df['name'], df['위도'], df['경도']):
folium.CircleMarker([lat, lng], popup=name,
radius=10, # 원의 반지름
color='brown', # 원의 둘레 색상
fill=True,
fill_color='coral', # 원을 채우는 색
fill_opacity=0.7 # 투명도
).add_to(seoul_map)
seoul_map
5. 단계 구분도 Choropleth Map 표시
🚀 행정구역과 같이 지도 상의 어떤 경계에 둘러싸인 영역에 색을 칠하거나 음영 등으로 정보를 나타내는 시각화 방법
🚀 전달하는 정보의 값이 커지면 영역에 칠해진 색이나 음영이 진해짐
import json
import pandas as pd
import folium
# 경기도 인구변화 데이터를 불러와서 데이터프레임으로 변환
# 경기도 지역의 시군구별 인구변화 데이터 (2007 ~ 2017)
df = pd.read_excel('../input/경기도인구데이터.xlsx', index_col='구분')
df.head()
'''
2007 2008 2009 2010 2011 2012 2013 2014 \
구분
수원시장안구 287474 285803 290798 293692 290999 291757 300908 301196
수원시권선구 310553 308177 304097 306783 321176 332633 331773 339835
수원시팔달구 216945 213235 219833 216503 209772 206794 204805 203479
수원시영통구 252730 260210 258421 260557 266542 289074 310671 329718
성남시수정구 256744 248452 242161 241070 236123 233997 228167 223539
2015 2016 2017
구분
수원시장안구 299016 296479 293828
수원시권선구 351053 358393 365653
수원시팔달구 199180 198515 193311
수원시영통구 335375 340654 349836
성남시수정구 219531 232841 236932
'''
df.info()
'''
<class 'pandas.core.frame.DataFrame'>
Index: 44 entries, 수원시장안구 to 양평군
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 2007 44 non-null int64
1 2008 44 non-null int64
2 2009 44 non-null int64
3 2010 44 non-null int64
4 2011 44 non-null int64
5 2012 44 non-null int64
6 2013 44 non-null int64
7 2014 44 non-null int64
8 2015 44 non-null int64
9 2016 44 non-null int64
10 2017 44 non-null int64
dtypes: int64(11)
memory usage: 4.1+ KB
'''
# int -> str 타입 변경
df.columns = df.columns.map(str)
# 경기도 시군구 경계 정보를 가진 geo-json 파일 불러오기
# 경기도 행정구역 경계 지리 정보를 사용
geo_path = '../input/경기도행정구역경계.json'
geo_data = json.load(open(geo_path))
geo_data
'''
{'type': 'FeatureCollection',
'features': [{'type': 'Feature',
'properties': {'code': 31380,
'name': '양평군',
'name_eng': 'Yangpyeong-gun',
'base_year': 2013},
'geometry': {'type': 'Polygon',
'coordinates': [[[127.56113535909492, 37.6256560539258],
'''생략'''
'''
# 경기도 지도 만들기
g_map = folium.Map(location=[37.5502, 126.982], zoom_start=9)
g_map
# 출력할 연도 선택 (2007 ~ 2017년 중에서 선택)
year = '2017'
# Choropleth 클래스로 단계구분도 표시하기
folium.Choropleth(geo_data=geo_path, # 지도 경계
data=df[year], # 표시하려는 데이터
columns=[df.index, df[year]], # 열 지정
fill_color='YlOrRd', fill_opacity=0.7, line_opacity=0.5,
threshold_scale=[10000, 100000, 300000, 500000, 700000],
# -> 임계값 수치, 10000명/100000명...
key_on='feature.properties.name'
).add_to(g_map)
g_map
📌 geo_data : Choropleth 맵에 사용될 지리 정보
📌 key_on : geo_data 내용에서 지리 영역을 구분할 열 이름 호출 ( ex. '양평군', '이천시'...)
📌 data : 추출한 DataFrame에서 Choropleth 맵에 사용될 데이터
📌 columns : 추출한 DataFrame에서 데이터로 사용될 열 이름
[ 내용 참고: IT 학원 강의 ]
'Programming Language > Python' 카테고리의 다른 글
[Python] 데이터분석 A-Z (0) | 2024.03.18 |
---|---|
[Python] Seaborn | 선 그래프 line chart (0) | 2024.03.15 |
[Python] Seaborn | 상자 수염 Box Plot 그래프 (1) | 2024.03.15 |
[Python] Seaborn | 산점도 그래프 - scatter plot (0) | 2024.03.15 |
[Python] Seaborn | 산점도 그래프 - Strip plot (0) | 2024.03.15 |