문서의 이전 판입니다!
목차
지진 (Earthquake) 데이터
1. 개요
지진은 지구 내부 단층의 급격한 파쇄 혹은 마그마의 이동으로 발생하는 탄성파 현상입니다. 한반도는 유라시아 판 내부에 위치하여 판 경계 지역(일본 등)에 비해 발생 빈도는 낮으나, 지각 내 응력 축적에 따른 중대형 지진(규모 5.0 이상)의 위험이 상존합니다. 기상청은 국가지진방재의 중추로서 지진의 발생 위치(진원, 진앙), 발생 시각, 규모(Magnitude), 그리고 지표면의 흔들림 정도인 진도(Intensity)를 정밀하게 분석하여 데이터를 제공합니다.
2. 관측 (Observation)
국가지진관측망은 지면의 미세한 움직임을 실시간으로 포착하기 위해 다수의 관측소와 고정밀 센서로 구성됩니다.
• 관측망 밀집도: 전국적으로 약 10~20km 간격의 관측망을 구축하여 지진 분석의 정밀도를 높이고 있습니다.
• 센서의 종류:
• 속도계(Velocity Sensor): 지면 운동의 속도를 측정하며, 초광대역(VBB) 및 광대역 센서는 원거리 및 미세 지진 분석에, 단주기 센서는 근거리 지진 분석에 특화됩니다.
• 가속도계(Acceleration Sensor): 강지진 발생 시 포화(Saturation) 없이 강한 흔들림을 측정하며, 구조물 및 지반의 동적 특성 분석에 필수적입니다.
• 관측 환경: 배경 잡음(Background Noise)을 최소화하기 위해 지표형 외에도 지하 수십~수백 미터 아래에 설치하는 시추형(Borehole) 관측소를 확대 운영하고 있습니다.
3. 산출물 (Data Products)
• 파형 데이터(Waveform Data): 관측소에서 기록된 시계열 데이터로, 국제 표준 포맷인 MiniSEED 혹은 SEED 형식으로 제공됩니다. 이는 지각 구조 연구 및 파원을 정밀 분석하는 데 활용됩니다.
• 지진 카탈로그(Event Catalog): 지진 발생 시각, 진앙 위치(위경도), 진원 깊이, 규모 등을 포함한 속성 데이터베이스입니다.
• 지진조기경보(EEW): 지진 발생 후 수 초 이내에 파괴력이 큰 S파 도착 시간을 예측하여 전파하는 경보 데이터입니다.
• 계기진도 데이터: 관측된 최대지반가속도(PGA) 또는 속도(PGV)를 기반으로 산출된 지역별 진도 값(MMI 등급)입니다.
지진해일 (Tsunami) 데이터
1. 개요
지진해일은 해저 지진 등으로 인해 해수면 높이가 급격히 변하며 발생하는 장주기파(Long Wave)입니다. 동해와 같이 수심이 깊은 해역에서 발생한 지진해일은 시속 수백 킬로미터로 이동하며, 연안의 얕은 수심으로 진입할 때 파고가 급증하여 막대한 피해를 입힙니다. 기상청은 일본 서쪽 해역의 대규모 지진에 따른 동해안 내습 가능성을 상시 감시합니다.
2. 관측 (Observation)
기상청은 울릉도, 임원항 및 정동진에 해일파고계(15m 이상 파고 관측 가능), 연안 방재 관측 시스템(17개소), 해상감시 CCTV(24개소), 국립해양조사원의 조위자료(56개소) 등을 공유하여 실시간으로 감시에 활용하고 있습니다.
• 해일파고계: 연안의 조석 성분을 제외한 해수면의 급격한 변동만을 추출하기 위해 초음파 혹은 수압 센서를 활용합니다.
• 조위관측소 공유: 국립해양조사원의 고정밀 조위 관측 데이터를 실시간으로 수신하여 보완적인 감시망을 운영합니다.
3. 산출물 (Data Products)
• 수치모의 시나리오 DB: 가상 지진 파원에 따른 예상 파고 및 도달 시간을 미리 계산한 6,000여 개의 시나리오 세트입니다.
• 지진해일 특보: 예상 파고가 일정 기준(주의보 0.5m, 경보 1.0m 이상)을 초과할 것으로 예상될 때 발표되는 격자형 공간 데이터입니다.
• 실시간 해수면 변동 자료: 관측소별로 기록된 지진해일의 최대 파고와 내습 지속 시간 데이터입니다.
4. 활용방안
① 데이터 파싱 함수
def parse_text_to_dataframe(text):
""" API 응답 텍스트를 DataFrame으로 변환
주의: LOC 뒤쪽 INT, REM, COR에는 쉼표가 섞일 수 있으므로 이번 교육용 지도 예제에서는 앞의 고정 7개 필드 + LOC만 사용한다."""
lines = extract_data_lines(text)
if len(lines) == 0:
return pd.DataFrame(columns=COLUMNS)
rows = []
for line in lines:
line = line.strip()
# 맨 끝 ",=" 제거
if line.endswith(",="):
line = line[:-2]
# 앞 7개는 고정 필드, 나머지는 통째로 받음
parts = line.split(",", 7)
if len(parts) < 8:
continue
tp = parts[0].strip()
tm_fc = parts[1].strip()
seq = parts[2].strip()
tm_eqk_msc = parts[3].strip()
mt = parts[4].strip()
lat = parts[5].strip()
lon = parts[6].strip()
# 나머지 전체에서 LOC만 추출
rest = parts[7].strip()
loc = rest.split(",", 1)[0].strip()
rows.append([tp, tm_fc, seq, tm_eqk_msc, mt, lat, lon, loc])
if len(rows) == 0:
return pd.DataFrame(columns=COLUMNS)
df = pd.DataFrame(rows, columns=COLUMNS)
return df
② 전체 분포도 시각화 함수
def plot_all_map(df):
"""전체 지진 분포도 저장 규모 구간별 색상을 다르게 사용"""
if df.empty:
print("[안내] 전체 지도에 그릴 데이터가 없습니다.")
return
fig, ax = setup_map()
tmp = df.copy()
tmp["MAG_CLASS"] = tmp["MT"].apply(classify_magnitude)
tmp["COLOR"] = tmp["MAG_CLASS"].apply(magnitude_class_to_color)
ax.scatter(tmp["LON"], tmp["LAT"], s=POINT_SIZE, c=tmp["COLOR"], alpha=POINT_ALPHA, edgecolors=POINT_EDGE_COLOR, linewidths=POINT_EDGE_WIDTH,transform=ccrs.PlateCarree())
add_color_legend(ax)
ax.set_title("Epicenter Distribution for the Last 1 Year (All)", fontsize=14)
plt.subplots_adjust(right=0.82)
plt.savefig(OUTPUT_PNG_ALL, dpi=150, bbox_inches="tight")
plt.close()
print("[저장 완료] PNG:", OUTPUT_PNG_ALL)
③ 예상결과

