지진 데이터 지도 시각화 - 히트맵, 클러스터링, folium
들어가며
파이썬으로 지도를 시각화하는 여러 방법 중 folium 패키지를 활용하여 시각화하는 방법을 소개합니다. folium은 leaflet.js를 기반으로 하여 웹 지도를 만들 수 있는 라이브러리입니다. 인터랙티브 지도를 웹브라우저에서 렌더링 할 수 있으며, 간단한 사용법으로 다양한 마커, 경로 등을 추가할 수 있습니다. 이 글에서는 folium을 활용하여 지진 데이터를 히트맵으로 시각화하는 방법을 소개합니다.
지진 데이터
이 글에서 활용할 데이터는 미국 지질조사국(USGS)에서 제공하는 지진 데이터입니다. USGS는 전 세계 지진 데이터를 제공하는 가장 중요한 기관 중 하나로 최신 지진 데이터, 지진 활동 지도, 역사적 지진 기록 등을 제공합니다. 최근 한 달 이내 지진이 발생한 위치와 진도를 히트맵으로 시각화해보겠습니다.
지진 데이터를 활용한 히트맵 시각화
먼저 필요한 패키지를 import합니다.
import folium
from folium.plugins import HeatMap
import pandas as pd
데이터의 구성은 다음과 같습니다. 이 글에서는 위치를 나타낼 수 있는 latitude, longtitude와 지진 진도를 나타내는 mag 변수만 사용합니다.
df = pd.read_csv('earthquake.csv')
df[['latitude','longitude','mag']].head()
중심점과 함께 지도를 생성합니다. 중심점은 위 데이터 기준 지진의 진도가 가장 심했던 칠레의 San Pedro de Atacama 지역으로 설정했습니다.
map = folium.Map(location=[-23.0813, -67.8098], zoom_start=5)
히트맵의 가중치를 설정하기 위해 진도를 나타내는 mag 변수를 사용합니다.
heat_data = [[row['latitude'], row['longitude'], row['mag']] for index, row in df.iterrows()]
히트맵을 지도에 추가하고, html 파일로 저장합니다. 결과는 다음과 같습니다.
HeatMap(heat_data).add_to(map)
map.save('earthquake_heatmap.html')
지진 데이터를 활용한 클러스터링 시각화
데이터가 많을 경우, 마커를 클러스터링하여 시각화하면 지도를 더 깔끔하게 표현할 수 있습니다. 먼저 필요한 패키지를 import 하고, 데이터를 불러옵니다. (위와 동일한 데이터입니다.)
import folium
from folium.plugins import MarkerCluster
import pandas as pd
df = pd.read_csv('earthquake.csv')
df.head()
중심점과 함께 지도를 생성합니다. 중심점은 위 데이터 기준 지진의 진도가 가장 심했던 칠레의 San Pedro de Atacama 지역으로 설정했습니다.
map_cluster = folium.Map(location=[-23.0813, -67.8098], zoom_start=5)
MarkerCluster를 지도에 추가합니다.
marker_cluster = MarkerCluster().add_to(map_cluster)
데이터의 각 지점에 대해 지도에 마커를 표시합니다.
for index, row in df.iterrows():
folium.Marker(
location=[row['latitude'], row['longitude']],
popup=f"Magnitude: {row['mag']}"
).add_to(marker_cluster)
생성한 클러스터링 지도를 html 파일로 저장합니다. 결과는 다음과 같습니다. 지도에 표시된 숫자는 지진의 건수를 나타내며, 지도를 확대하면 마커에 진도를 확인할 수 있습니다.
map_cluster.save('earthquake_cluster.html')
전체 코드
## 지진 데이터를 활용한 히트맵 시각화
import folium
from folium.plugins import HeatMap
import pandas as pd
df = pd.read_csv('earthquake.csv')
df[['latitude','longitude','mag']].head()
map = folium.Map(location=[-23.0813, -67.8098], zoom_start=5)
heat_data = [[row['latitude'], row['longitude'], row['mag']] for index, row in df.iterrows()]
HeatMap(heat_data).add_to(map)
map.save('earthquake_heatmap.html')
# --------------------------------------------------------------------------------- */
## 지진 데이터를 활용한 클러스터링 시각화
import folium
from folium.plugins import MarkerCluster
import pandas as pd
df = pd.read_csv('earthquake.csv')
df.head()
map_cluster = folium.Map(location=[-23.0813, -67.8098], zoom_start=5)
marker_cluster = MarkerCluster().add_to(map_cluster)
for index, row in df.iterrows():
folium.Marker(
location=[row['latitude'], row['longitude']],
popup=f"Magnitude: {row['mag']}"
).add_to(marker_cluster)
map_cluster.save('earthquake_cluster.html')
# --------------------------------------------------------------------------------- */
'Python' 카테고리의 다른 글
[파이썬] Slack API를 활용한 슬랙 메시지 전송 (0) | 2025.04.22 |
---|---|
[파이썬] 파이썬을 활용한 좌표 변환 - pyproj (0) | 2025.04.20 |
[파이썬] matplotlib을 활용한 지식 그래프 Knowledge Graph 시각화 (4) | 2025.04.15 |
[파이썬] 지도 시각화 - folium, 마커 표시 (2) | 2025.04.14 |
[파이썬] .env 파일 활용 - API KEY 관리 및 개인 정보 보호 (2) | 2025.04.13 |