Akashic Records

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

Python for Beginners

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

Andrew's Akashic Records 2024. 6. 17. 15:31
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
Comments