대기과학/프로그래밍

[python] 스마트서울 도시데이터 센서(S-DoT)로 보는 집중호우 발생시 온도장: 2. 온도장 확인 및 레이더 에코와 비교

레까 2025. 1. 8. 14:14

- 개요

저번 포스트에서는 S-DoT 자료를 전처리하고 간단히 그림을 그려보았습니다.

2024년 8월 13일에 내린 집중호우는 서울 전역을 강타한 것이 아니라 특정 지역에만 내렸습니다.

ASOS/AWS 관측소가 서울에 30개나 있지만 이 정도로는 국지성 호우의 영향을 보기 어렵습니다.

하지만 서울에 1000개나 설치한 S-DoT이라면 국지성 호우의 영향을 확인할 수 있겠죠.

 

집중호우가 내린 곳은 온도가 급격히 떨어지기 때문에 레이더 에코의 위치와 S-DoT의 온도가 감소하는 위치가 거의 같을 겁니다.

그러므로 2024년 8월 13일 시간별로 레이더 에코와 S-DoT 온도장을 확인해보겠습니다.

우리는 변화를 봐야하기 때문에 정확히는 온도장을 그리는 것이 아니라 1시간 동안 변한 온도의 공간장을 그려야 합니다.

만약 진짜로 레이더 에코와 S-DoT의 온도가 감소하는 지역이 같다면 S-DoT의 온도 변화를 신뢰해도 되겠죠.

 

- 2024년 8월 13일 17시

위에서도 말했지만 S-DoT 온도장은 1시간 변화입니다. 8월 13일 17시 온도장은 17시 온도에서 16시 온도의 차이를 공간장으로 그린 것입니다.

코드도 첨부하니 참고하세요.

sig.shp 파일은 한반도 shp파일로 다음 링크에서 다운로드 받았습니다. http://www.gisdeveloper.co.kr/?p=2332

import geopandas as gpd
gdf = gpd.read_file("./data/shp/sig.shp")
gdf_seoul = gdf[gdf['SIG_CD'].str[:2] == '11'] # 앞자리 11이 서울임
gdf_seoul = gdf_seoul.set_crs("EPSG:5179")

# Transform to EPSG:4326 (WGS84)
gdf_epsg4326 = gdf_seoul.to_crs("EPSG:4326")

# 온도 차이를 구하기 위함
valid_data2 = df_merged[df_merged['등록일시_hour'] == '2024081317'].copy()
valid_data1 = df_merged[df_merged['등록일시_hour'] == '2024081316'].copy()
valid_data1.loc[:, '온도 평균(℃)_과거'] = valid_data1['온도 평균(℃)']
valid_data21 = valid_data2.merge(valid_data1[['시리얼','온도 평균(℃)_과거']], on="시리얼", how="inner")
valid_data21['온도 차이'] = valid_data21['온도 평균(℃)'] - valid_data21['온도 평균(℃)_과거']
valid_data_ = valid_data21.dropna(subset=['경도', '위도', varname])
valid_data_ = valid_data_[valid_data_[varname] > -40]
mean_value = valid_data_[varname].mean()
std_value = valid_data_[varname].std()

lower_bound = mean_value - 3 * std_value
upper_bound = mean_value + 3 * std_value

valid_data = valid_data_[(valid_data_[varname] >= lower_bound) & (valid_data_[varname] <= upper_bound)].reset_index()
# 그림 그리는 코드
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
fig, ax = plt.subplots(
    figsize=(10, 6),
    subplot_kw={'projection': ccrs.PlateCarree()}  
)
gdf_epsg4326.plot(ax=ax, facecolor='none', lw=0.2)
scatter= ax.scatter(valid_data['경도'].values, valid_data['위도'].values, c=valid_data['온도 차이'].values, 
                    cmap='coolwarm', s= 5, vmin=-5, vmax=5)
ax.set_extent([126.73, 127.25, 37.4, 37.72], crs=ccrs.PlateCarree())

 

 

 

그럼 이제 그림을 보겠습니다.

먼저 왼쪽의 S-DoT 온도장을 보면 16시부터 17시까지 서울 북동쪽, 남동쪽에서 온도가 감소하고 있습니다.

그리고 오른쪽 그림을 보면 레이더 에코가 딱 서울 북동쪽과 남동쪽에 있습니다.

실제로 비가 온 곳에서 온도가 감소합니다..

 

 

- 2024년 8월 13일 18시

18시에는 남서쪽, 북동쪽만이 아니라 남동쪽에서도 온도가 감소했습니다.

중간 그림을 보면 17시 10분에 남서, 북동, 남동쪽 모두에서 레이더 에코가 있습니다.

이후 17시 50분의 레이더 에코에서는 남동쪽의 에코가 엄청 넓어지고 강해집니다.

아마 이 집중호우가 잠실 야구경기를 취소시켰겠죠.

 

- 2024년 8월 13일 19시

18시부터 19시까지는 남쪽 지역의 온도가 크게 감소하고 있습니다.

오른쪽 그림을 보면 딱 온도가 감소하는 지역에 레이더 에코가 있습니다.

 

- 마무리

S-DoT은 정말 고해상도 자료지만 품질검사가 제대로 안되어있어 정말 이를 믿고 사용할 수 있을까? 의문이 듭니다..

자료 검증이라 말하긴 어렵지만 이번 포스트에서는 "여름철에 집중호우가 오면 온도가 감소한다"는 당연한 사실이 S-DoT 온도장에 잘 드러나는지 확인해보았습니다.

 

레이더 에코와 비교했을 때 비가 오는 지역의 S-DoT 온도가 감소하는 모습이 아주 잘 보입니다.

S-DoT의 온도변화는 꽤 신뢰할만 해보입니다.

물론 S-DoT 온도의 절대값을 신뢰할만한가와는 다른 문제입니다.

 

S-DoT 자료를 아예 신뢰 못할 정도는 아닌 것 같으니 서울의 고해상도 자료를 이용한 재미있는 분석, 인사이트 도출을 해보면 좋겠습니다.