본문 바로가기
Python for Beginners

GeoJSON 데이터 파일을 이용한 세계 지진의 크기와 위치 시각화

by Andrew's Akashic Records 2024. 6. 17.
728x90

이 파이썬 스크립트는 지진 데이터를 포함한 GeoJSON 파일을 읽고, 해당 데이터를 활용하여 전 세계 지진의 크기와 위치를 시각화하는 기능을 수행합니다.

import json
from pathlib import Path

import plotly.express as px

def read_geo_json_data():
    # 데이터를 문자열로 읽어 파이썬 객체로 변환합니다.
    path = Path('eq_data/eq_data_30_day_m1.geojson')
    contents = path.read_text(encoding='utf-8')
    all_eq_data = json.loads(contents)

    # 데이터 파일을 더 읽기 쉬운 형태로 바꿉니다.
    # path = Path('eq_data/eq_data.geojson')
    # readable_contents = json.dumps(all_eq_data, indent=4)
    # path.write_text(readable_contents,encoding='utf-8')

    # 데이터 집합의 지진 데이터를 모두 읽습니다.
    all_eq_dicts = all_eq_data['features']

    mags, lons, lats, eq_titles = [],[],[],[]
    for eq_dict in all_eq_dicts:
        mag = eq_dict['properties']['mag']
        lon = eq_dict['geometry']['coordinates'][0]
        lat = eq_dict['geometry']['coordinates'][1]
        eq_title = eq_dict['properties']['title']
        mags.append(mag)
        lons.append(lon)
        lats.append(lat)
        eq_titles.append(eq_title)

    # print(mags[:10])
    # print(lons[:5])
    # print(lats[:5])

    title = 'Global Earthquakes'

    fig = px.scatter_geo(lat=lats, lon=lons, size=mags, title=title,
                         color=mags,
                         color_continuous_scale='Viridis',
                         labels={'color':'Magnitude'},
                         projection='natural earth',
                         hover_name=eq_titles)
    fig.show()

if __name__ == '__main__':
    read_geo_json_data()

eq_data_30_day_m1.geojson
4.30MB

 

실행결과

필요한 모듈 임포트

import json
from pathlib import Path
import plotly.express as px
  • json: JSON 데이터를 파싱하고 처리하기 위해 사용되는 내장 모듈입니다.
  • pathlib.Path: 파일 경로를 객체로 다루기 위한 모듈로, 플랫폼 독립적인 파일 시스템 경로를 제공합니다.
  • plotly.express: 데이터 시각화를 위한 라이브러리로, 이 스크립트에서는 지도상에 지진 데이터를 표현하는 데 사용됩니다.

함수 read_geo_json_data

def read_geo_json_data():
    path = Path('eq_data/eq_data_30_day_m1.geojson')
    contents = path.read_text(encoding='utf-8')
    all_eq_data = json.loads(contents)
  • path.read_text(): Path 객체를 사용하여 지정된 경로의 파일 내용을 문자열로 읽어옵니다. 인코딩 옵션으로 'utf-8'이 명시되어 있어, 다양한 언어가 포함된 텍스트도 올바르게 처리됩니다.
  • json.loads(): 읽어온 문자열 형태의 JSON 데이터를 파이썬 객체로 변환합니다.

데이터 추출 및 리스트 생성

    all_eq_dicts = all_eq_data['features']

    mags, lons, lats, eq_titles = [], [], [], []
    for eq_dict in all_eq_dicts:
        mag = eq_dict['properties']['mag']
        lon = eq_dict['geometry']['coordinates'][0]
        lat = eq_dict['geometry']['coordinates'][1]
        eq_title = eq_dict['properties']['title']
        mags.append(mag)
        lons.append(lon)
        lats.append(lat)
        eq_titles.append(eq_title)
  • GeoJSON 데이터에서 지진 정보를 담고 있는 features 배열에 접근합니다.
  • 각 지진 정보(eq_dict)는 propertiesgeometry라는 키를 포함하고 있습니다.
  • mag: 지진의 크기, lon: 경도, lat: 위도, eq_title: 지진의 제목 또는 설명을 각 리스트에 추가합니다.

데이터 시각화

    title = 'Global Earthquakes'

    fig = px.scatter_geo(lat=lats, lon=lons, size=mags, title=title,
                         color=mags,
                         color_continuous_scale='Viridis',
                         labels={'color':'Magnitude'},
                         projection='natural earth',
                         hover_name=eq_titles)
    fig.show()
  • px.scatter_geo: Plotly Express를 사용하여 지리적 데이터를 시각화하는 함수입니다. 이 함수는 위도(lat), 경도(lon), 지진 크기(size), 색상(color) 등 다양한 파라미터를 받아 지진의 위치와 크기를 나타내는 지도를 생성합니다.
  • color_continuous_scale: 지진의 크기에 따라 색상을 부여합니다. 'Viridis'는 데이터 값에 따라 색상이 변하는 연속적인 컬러 스케일을 나타냅니다.
  • labels: 색상 바의 라벨을 사용자 정의하는 옵션입니다.
  • projection: 지도의 투영 방식을 지정합니다. 여기서는 'natural earth'가 사용되었습니다.
  • hover_name: 마우스를 각 점 위에 놓았을 때 표시되는 텍스트로, 여기서는 지진의 제목이 사용됩니다.
  • fig.show(): 생성된 그래피를 화면에 표시합니다.

메인 실행 블록

if __name__ == '__main__':
    read

_geo_json_data()
  • 이 스크립트가 직접 실행될 때 read_geo_json_data() 함수를 호출하여 지진 데이터를 읽고 시각화합니다.
728x90