[ERA5 재분석 자료] 1. API를 활용한 다운로드 (2024년 10월 수정)

2024. 6. 21. 09:54·대기과학/프로그래밍

최근 ECMWF의 API에 관한 업데이트가 있었습니다.

이전에 잘 받아지던 분들은 과거에 쓰던 API key 대신 새로운 API key를 써야합니다.

또한 url 도 url: https://cds.climate.copernicus.eu/api/v2가 아닌

url: https://cds.climate.copernicus.eu/api를 써야합니다.

 

- 개요

대기과학 분야에서 관측을 제외하면 아마 재분석 자료를 가장 많이 쓸겁니다.

재분석 자료를 간단하게 설명하자면 적당한 규칙으로 관측 자료와 모델 자료를 등간격 격자 자료로 합친 것입니다.

 

관측 자료는 지구 모든 곳에 관측소에 있는 것이 아니기 때문에 관측하지 못하는 공간이 있습니다.

반대로 모델 자료에서는 모든 지점의 대기 변수 값을 얻을 수 있지만 관측보다 정확하지 않겠죠.

여기서 주의할 점은 관측 자료라고 반드시 옳은 게 아니라 관측 자료 자체에도 오차가 있죠.

 

이렇게 다른 특성을 갖는 관측, 모델 자료를 어떤 과정에 따라 등간격으로 합칠 수 있습니다.

여기서 어떤 과정은 자료 동화 과정으로 종류도 많고 개념 자체를 설명하기에는 이번 포스트의 스코프에서 벗어납니다.

기회가 있다면 다른 포스트에서 다룰지도 모르겠네요.

 

재분석 자료도 여러 종류가 있는데 제가 보기에는 ECMWF의 ERA5 재분석 자료를 가장 많이 씁니다.

ECWMF 홈페이지에서 수동으로 다운로드 받을 수도 있지만 

이번 포스트에서는 API를 활용하여 ERA5 재분석 자료를 다운로드 받아보겠습니다.

 

- CDS 회원가입 후 API key 받기

먼저 아래의 사이트에 가입을 합시다.

https://cds.climate.copernicus.eu/#!/home

 

가입을 하고 로그인을 하면 홈페이지 상단 오른쪽에 본인 이름과 logout 버튼이 있을겁니다.

본인 이름을 클릭합시다.

로그인 후 홈페이지 상단

 

클릭해서 나온 화면의 가장 아래에 API key라는 항목에서 본인의 UID와 API Key를 확인할 수 있습니다.

 

- 다운로드를 위한 API 설정

위에서 얻은 개인 UID과 개인 API Key값을 본인 컴퓨터나 서버에 저장해야합니다.

운영체제에 따라 이 값들을 저장해주는 경로가 다릅니다.

 

리눅스라면 $HOME 경로에 (기본설정이면 경로가 '/home/본인아이디')

윈도우라면 %USERPOFILE%(기본설정이면 경로가 'C:\Users\본인아이디')

'.cdsapirc' 파일을 만들고 아래의 두 줄을 작성해줍시다.

url: https://cds.climate.copernicus.eu/api/v2
key: {uid}:{api-key}

{uid}:{api-key}에 개인 UID, 개인 API Key를 적어야 합니다.

참고로 {} 안에 넣으라는 게 아니라 {} 부분도 지우고 각각 값들을 입력해야 합니다.

 

다음으로 CDS 홈페이지 url 접속을 위해 cdsapi라이브러리를 설치해야합니다.

conda를 사용하시면 위의 줄을, pip을 사용하시면 아랫 줄을 cmd창에 입력해서 cdsapi 라이브러리를 설치합니다.

# conda 이용
conda install cdsapi
# pip 이용
pip install cdsapi

 

- 다운로드를 위한 파이썬 코드 작성

ERA5 재분석 자료는 일(daily) 단위로 받을 수 없고 시간(hourly) 단위로 받아야 합니다.

즉 날마다 00시부터 23시까지 다 다운로드 받아야 합니다.

그리고 area 변수를 설정해서 특정 위도, 경도의 도메인 내에서 자료를 받을 수 있습니다.

 

시간 자료다보니 용량이 커서 저는 연/월마다 1개의 파일로 저장하는 코드를 작성했습니다.

year, month 변수에 여러개 값을 넣어 한 번에 저장할 수도 있지만 당연히 용량이 커지므로 분석할 때 불편한 점이 있을겁니다.

import cdsapi

c = cdsapi.Client()

years = list(range(1993, 2019 + 1)) # 1993년부터 2019년
months = ['{:02d}'.format(m) for m in range(1, 13)] # 1월부터 12월
area = [50, 110, 20, 140] # 위도 경도 설정 [위도1, 경도1, 위도2, 경도2]


for year in years:
    for month in months:
        file_name = f'download_{year}_{month}.nc' # 저장할 파일 이름 설정
        c.retrieve(
            'reanalysis-era5-pressure-levels', # pressure level 데이터로 설정
            {
                'product_type': 'reanalysis',
                'format': 'netcdf',
                'variable': [ # 받을 변수 설정, 여기서는 지위고도, 온도, u wind, v wind를 받음
                    'geopotential', 'temperature',
                    'u_component_of_wind', 'v_component_of_wind',
                ],
                'pressure_level': [ #  연직층 설정, 200, 500, 850 hPa을 받음
                    '200',
                    '500',
                    '850',
                ],
                'year': str(year), # 연도 설정
                'month': month, # 월 설정
                'day': [ # 일 설정
                    '01', '02', '03',
                    '04', '05', '06',
                    '07', '08', '09',
                    '10', '11', '12',
                    '13', '14', '15',
                    '16', '17', '18',
                    '19', '20', '21',
                    '22', '23', '24',
                    '25', '26', '27',
                    '28', '29', '30',
                    '31',
                ],
                'time': [ #시간 설정
                    '00:00', '01:00', '02:00',
                    '03:00', '04:00', '05:00',
                    '06:00', '07:00', '08:00',
                    '09:00', '10:00', '11:00',
                    '12:00', '13:00', '14:00',
                    '15:00', '16:00', '17:00',
                    '18:00', '19:00', '20:00',
                    '21:00', '22:00', '23:00',
                ],
                'area': area, # 지역 설정
            },
            file_name #저장할 파일 이름 설정
        )

 

마지막으로 저는 연직층 자료가 필요해서 'reanalysis-era5-pressure-levels'로 설정했습니다만

단층 자료를 다운로드 받으신다면 'reanalysis-era5-single-levels'로 값을 바꿔주시면 됩니다.

그리고 어떤 변수를 다운 받을 있는 지에 대해서는 아래의 사이트의 테이블을 확인하시면 됩니다.

https://confluence.ecmwf.int/display/CKB/ERA5%3A+data+documentation#heading-Parameterlistings

 

Table 이름에 surface and single level이 적혀있으면 'reanalysis-era5-single-levels'로 설정하시고, Table 이름에 pressure level이 적혀있으면 'reanalysis-era5-pressure-levels 로 설정하여 Variable name in CDS값을 코드의 variable 부분에 입력해서 원하는 변수를 다운로드 받을 수 있습니다.

 

다음 포스트에서는 시간 단위로 받아진 ERA5 자료를 일 단위로 바꾸어보겠습니다.

'대기과학 > 프로그래밍' 카테고리의 다른 글

[Matplotlib] 기상청 ASOS/AWS 그래프 따라 그리기 1: 오른쪽에 y축 여러 개 그리기  (0) 2024.07.10
[ERA5 재분석 자료] 2. 시간(hourly) 자료를 일(daily) 자료로 변환하고 저장하기  (1) 2024.07.01
[MetPy] Vertical cross section, 연직단면 그리기  (1) 2024.06.17
[MetPy] 단열선도 그리기  (1) 2024.06.11
[MetPy] 튜토리얼: 알아보고 설치해보자  (1) 2024.06.10
'대기과학/프로그래밍' 카테고리의 다른 글
  • [Matplotlib] 기상청 ASOS/AWS 그래프 따라 그리기 1: 오른쪽에 y축 여러 개 그리기
  • [ERA5 재분석 자료] 2. 시간(hourly) 자료를 일(daily) 자료로 변환하고 저장하기
  • [MetPy] Vertical cross section, 연직단면 그리기
  • [MetPy] 단열선도 그리기
레까
레까
  • 레까
    데이터 조아
    레까
  • 전체
    오늘
    어제
    • 전체 (87) N
      • 대기과학 (45)
        • 프로그래밍 (42)
        • 개념 (2)
        • 칼럼 (1)
      • 여러가지 데이터 (5)
        • 프로그래밍 & 분석 (5)
      • 프로그래밍 (16) N
        • 파이썬 (8)
        • 시각화 (7) N
        • 유용 (1)
      • 프로젝트 (17)
        • 기계학습 기반 서울 기온 예측 (9)
        • 사과게임 매크로 만들기 (4)
        • 버스 한 번으로 특정 지역에 갈 수 있는 지역 찾.. (4)
      • 데이터리안 SQL 공부 (3)
      • 주제별 링크 모음 (1)
      • 백업 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
레까
[ERA5 재분석 자료] 1. API를 활용한 다운로드 (2024년 10월 수정)
상단으로

티스토리툴바