며칠 전에 XARRAY 패키지를 이용해서 ECMWF의 ERA5 데이터를 로딩하고 시각화해봤었다. 오늘은 이력데이터가 아닌 예보데이터를 살펴보자.
예보 데이터는 ECMWF 홈페이지의 예보 메뉴를 통해 접근할 수 있다. 먼저 홈페이지에 접속한다. 모든 데이터가 공개는 아닌 것 같고, Open Data는 로그인 없이도 사용할 수 있고, 저작자 표시를 하면 상업적인 재배포 등의 활용도 가능한 것으로 보인다.
위 페이지 우측 상단의 Access the free version이라는 버튼을 클릭하면 데이터를 다운로드 받을 수 있는 사이트가 뜬다. 4~1일 전의 연월일 목록이 보이고 특정 일자를 선택하면, 다시 6시간 주기의 목록이, 더 들어가면 enfo/ scda/ scwv/ waef 등의 목록이 나타나는데 예측모델에 적용하는 변수들과 관련된 차이로 보여진다.
모델을 선택하면 grib2와 index 파일 목록들이 나타난다. 이 목록들은 시간대별로 나뉘어져 있는데, 맨 위의 Open Data의 예측모델별 설명에 Step 또는 Range로 표현되고 있는데 모델 마다 다르게 되어 있다.
원하는 데이터를 선택했으면 클릭해서 다운로드 받으면 된다. 코드 상에서 url을 조합하는 방식으로 grib2 파일을 가져와봤으나 동일한 이름의 index 파일도 함께 있어야 해서 이 방식으로는 해결하지 못했다.
자, 이제 코딩을 해보면,
import xarray as xr
import cfgrib
ds = xr.open_dataset('data/20230314120000-360h-enfo-ep.grib2', engine='cfgrib',
filter_by_keys={'dataType': 'ep'})
ds
“filter_by_keys” 파라미터도 적용해줘야 데이터가 열리는데, 주지 않으면 친절하게 적용 가능한 datatype을 알려주기 때문에 걱정할 필요는 없다. ep, em es는 ep(Probabilities), em(Ensemble mean), es(Ensemble standard deviation)이라고 한다.
데이터를 조회해보면 tpg10 등 16개의 예측치가 경도, 위도 그리고 step별로 들어가 있다. tpg10 등의 예측치에 대한 정보는 맨 위의 Open Data 페이지에 나와 있는데, tpg10은 "Total precipitation of at least 10mm”의 약어로서 최소 10mm 이상의 총강수량이 생길 확률(%)을 의미한다.
지난 번과 동일하게 한반도 지역에 해당하는 경도, 위도 데이터들만 추출하고 나서 이 중에서 tpg1 변수의 첫번째 step에 해당하는 데이터를 조회해봤다.
# 한반도 지역 데이터만 추출
ds_kor = ds.where((ds.longitude > 124) & (ds.longitude < 131) & (ds.latitude < 39) & (ds.latitude > 32), drop=True)
# tpg1 변수의 첫번째 step 데이터 추출
tpg1_0 = ds_kor['tpg1'][0]
tpg1_0
그럼 2차원 배열값이 보이는데, 이걸 바로 차트로 뿌려보면
tpg1_0.plot()
즉, 3/14 12시를 기준으로 10일 12시간 후의 1mm 이상 강수 확률을 보여주는 데이터이다. 위에서 살펴봤던 제품(예측모델 및 예측 시간 범위 등)에 따라 시간 간격이 다른 것을 감안하고 len(ds_kor[‘tpg1’].step)을 이용해서 step의 갯수를 파악한 다음 step별 지도를 생성한다.
for i in range(0, len(ds_kor['tpg1'].step)):
ds_kor['tpg1'][i].plot( figsize=(12,7))
m.drawcoastlines()
plt.savefig('image/' + str(i) + '.png', bbox_inches='tight', pad_inches=0.1)
지난 번과 마찬가지로 이 이미지들을 animated gif로 묶어주면 아래와 같은 예보 지도를 만들 수 있다.
알려고 할 수록, 모르는 게 너무 많다!