기상 예측 모델링이나 기후 데이터 분석을 수행할 때 ERA5 재분석 데이터는 매우 유용한 자원입니다. 하지만 ERA5 데이터는 기본적으로 1시간 단위의 해상도를 제공하므로, 더 정밀한 분석을 위해 15분 단위의 데이터가 필요한 경우 적절한 보간(Interpolation) 과정이 필수적입니다. GRIB(Gridded Binary) 파일은 기상 데이터를 저장하는 표준 형식이지만, 구조가 복잡하여 효율적인 핸들링이 까다롭습니다.
이 글에서는 Python의
pygrib 라이브러리를 활용해 GRIB 데이터를 효율적으로 읽어오고,
cdsapi를 이용한 자동화된 데이터 수집부터 고해상도 시계열 데이터 생성을 위한 워크플로우를 소개합니다.
1. 데이터 수집 환경 구성: CDS API 설정
유럽중기예보센터(ECMWF)에서 제공하는 Copernicus Climate Data Store(CDS)는 ERA5 데이터를 다운로드할 수 있는 주된 통로입니다. Python 환경에서
cdsapi 라이브러리를 사용하기 위해서는 사용자 인증 정보가 담긴 설정 파일이 필요합니다.
사용자 계정 페이지에서 UID와 API 키를 확인한 후, 각 운영체제의 홈 디렉토리에
.cdsapirc 파일을 생성하여 다음과 같이 저장합니다.
url: https://cds.climate.copernicus.eu/api/v2
key: [사용자_UID]:[사용자_API_KEY]
이 설정이 완료되어야
cdsapi.Client() 객체를 통해 인증 오류 없이 서버와 통신할 수 있습니다.
2. 데이터 자동 수집 스크립트 작성
GRIB 형식은 메타데이터가 풍부하고 압축률이 뛰어나 기상 분야에서 표준으로 사용됩니다. 특정 지역과 시간 범위의 데이터를 요청하는 스크립트를 작성하여 데이터를 확보해 보겠습니다.
import cdsapi
# CDS API 클라이언트 초기화
cds_client = cdsapi.Client()
# 데이터 요청 파라미터 구성
query_params = {
'product_type': 'reanalysis',
'format': 'grib',
'variable': 'total_precipitation', # 강수량 데이터 요청
'year': '2023',
'month': ['07', '08'], # 여름 시즌 데이터
'day': [f'{d:02d}' for d in range(1, 16)], # 매월 1일부터 15일까지
'time': [f'{h:02d}:00' for h in range(24)], # 00시부터 23시까지 매시간
'area': [43, 124, 33, 132], # 북, 서, 남, 동 (한반도 인근 영역 설정)
}
# 데이터 다운로드 실행
cds_client.retrieve(
'reanalysis-era5-single-levels',
query_params,
'era5_precipitation_data.grib'
)
3. 요청 파라미터 상세 분석
데이터 요청 시 사용하는
area 파라미터와
format 옵션은 분석 효율성에 직접적인 영향을 미칩니다.
| 파라미터 |
역할 |
설명 |
| area |
공간 범위 설정 |
[North, West, South, East] 순서로 위경도를 지정하여 필요한 영역만 추출합니다. |
| format |
파일 형식 |
'grib'으로 설정 시 풍부한 메타데이터를 포함하며 기상 전용 라이브러리와 호환성이 높습니다. |
| variable |
추출 변수 |
강수량(precipitation), 온도(temperature), 풍속(wind_speed) 등 필요한 물리량을 지정합니다. |
GRIB 파일은 단순한 바이너리 파일이 아니라, 각 그리드 포인트에 대한 위치 정보와 시간 정보가 포함된 계층적 구조를 가집니다. 따라서 데이터 다운로드 이후에는
pygrib이나
xarray와 같은 라이브러리를 사용하여 다차원 배열로 변환하는 과정이 수반되어야 합니다.