- ERA5公式サイトには月次日次データをダウンロードするためのURLが用意されていますが、月ごとに手動でダウンロードするしかなく非常に面倒なので、サーバーを利用して自動一括ダウンロードを実現する方法を検討中です。
ログイン| 日次データURLは以下の通り
- ERA5 ユーザーマニュアルの URL は次のとおりであり、多くの有用な情報が含まれており、情報を照会するための補助ツールとして使用できます。
問題の背景:教師がサーバーを提供しました。サーバー内の ERA5 日次データを何年も何ヶ月も自動的に走査してダウンロードできるようにしたいと考えています。つまり、py スクリプトを使用してバッチでダウンロードできるようにしたいと考えています。
1. ダウンロードの準備
独自のユーザー フォルダー liuhw を作成し、データ フォルダー data を作成し、ダウンロードしたデータ セットを liuhw/data ディレクトリに保存します。
py オペレーティング環境をセットアップし、独自の仮想環境 lhw (別の記事を参照) を構築し、必要なライブラリをダウンロードします。
2.CDS APIをインストールする
まず、サーバーに.cdsapirc ファイルを作成します。
サーバーに入るには、独自のフォルダーに入る必要はありません。ホームまたはユーザーの下で行うことができます。操作インターフェイスに次のコードを入力すると、HOME ルート ディレクトリに .cdsapirc ファイルが作成されます。
vim $HOME/.cdsapirc
次に、自分のURL とキーをコピーします。
URL とキーについては、ERA5 公式 Web サイトで見つけてコピーする必要があります。独自の URL とキーが生成される前に、Web サイトに登録してログインする必要があります。後でデータをダウンロードするときに、コンピューターはどこに行くべきか知っていますか? 、ユーザー名とパスワードの役割に相当しますか? (あくまで推測です)
パスはここにあります。クリックすると、詳細な手順が表示されます。http://CDS API の使用方法 | Copernicus Climate Data Store。URL をコピーして、右側の黒いボックスにキーを入力するだけです (ログオンする必要があることに注意してください)自分の URL とキーが表示される前に、最初に入力してください)
最後に、 .cdsapirc ファイルに独自のURL とキーを入力します。
次の手順に従って、コピーした内容を cdsapirc ファイルに書き込み、保存して終了します (貼り付けとコピーに便利な MobaXterm を使用すると簡単です)。
vi .cdsapirc (コンテンツをファイルに書き込む)
URLとキーを貼り付けます
Esc (編集モードを終了)
:wq (内容を保存してファイルを終了します)
3. cdsapi パッケージをインストールします
独自の lhw 環境を入力し、パッケージをインストールし、pip を使用します。
pip install cdsapi
4.pyコードの書き方
上記の作業が完了したら準備は完了ですので、コアとなるコードの部分を書きますが、このコードがなければコンピュータは何をダウンロードするかをどうやって判断するのでしょうか?
(ここではサーバーを無視し、スパイダー ソフトウェアを開き、次の内容を記述し、コードをコンピューター上の任意の場所に download.py として保存します)
次のテンプレートは適用できますが、必要に応じて変更する必要があります(以前のプレレブはまったく機能せず、常に間違ったデータをダウンロードしていました。苦労して変更した後、ようやくダウンロードできました!! 任意のテンプレートをダウンロードできます)変数と任意の圧力レイヤー、任意の地域と時間の日次データ! 泣く!)
Copernicus 公式 Web サイトのコード例に感謝します。これは、公式 Web サイトが提供するものが yyds であることを証明しています。
# -*- coding: utf-8 -*-
"""
Created on Fri Nov 11 15:55:04 2022
@author: lhw
"""
# -*- coding: utf-8 -*-
import time
import cdsapi
import requests
import multiprocessing
# CDS API script to use CDS service to retrieve daily ERA5* variables and iterate over
# all months in the specified years.
# Requires:
# 1) the CDS API to be installed and working on your system
# 2) You have agreed to the ERA5 Licence (via the CDS web page)
# 3) Selection of required variable, daily statistic, etc
# Output:
# 1) separate netCDF file for chosen daily statistic/variable for each month
# Uncomment years as required
# For valid keywords, see Table 2 of:
# https://datastore.copernicus-climate.eu/documents/app-c3s-daily-era5-statistics/C3S_Application-Documentation_ERA5-daily-statistics-v2.pdf
# select your variable; name must be a valid ERA5 CDS API name.
# Select the required statistic, valid names given in link above
c = cdsapi.Client()
def Download(iyear, imonth):
c = cdsapi.Client(timeout=600, retry_max=1000, quiet=False, debug=True)
t000=time.time()
result = c.service(
"tool.toolbox.orchestrator.workflow",
params={
"realm": "user-apps",
"project": "app-c3s-daily-era5-statistics",
"version": "master",
"kwargs": {
"dataset": "reanalysis-era5-pressure-levels",
"product_type": "reanalysis",
"variable": "u_component_of_wind",
"statistic":"daily_mean",
"year": iyear,
"month": imonth,
"pressure_level": "10",
"time_zone": "UTC+00:0",
"frequency": "1-hourly",
#
# Users can change the output grid resolution and selected area
#
"grid": "1.0/1.0",
"area":{"lat": [0, 90], "lon": [-180, 180]}
},
"workflow_name": "application"
})
# set name of output file for each month (statistic, variable, year, month
file_name = "daily_mean" + "_" + "u_component_of_wind" + iyear + imonth + ".nc"
location = result[0]['location']
res = requests.get(location, stream=True)
print("Writing data to " + file_name)
with open(file_name, 'wb') as fh:
for r in res.iter_content(chunk_size=1024):
fh.write(r)
fh.close()
print('***样本%s 保存结束, 耗时: %.3f s / %.3f mins****************' % (file_name,(time.time() - t000), (time.time() - t000) / 60))
years = [ str(id1) for id1 in range(1950,2021) ]
months =[ '%02d' % id2 for id2 in range(1,13) ]
if __name__ == "__main__":
t0 = time.time()
# ===================================================================================
print('*****************程序开始*********************')
for yr in years:
for mn in months:
Download(yr, mn)
print('***********************程序结束, 耗时: %.3f s / %.3f mins****************' % (
(time.time() - t0), (time.time() - t0) / 60)
上記のコードは、ERA5 日次データの特定の変数のダウンロードを容易にするファイルです。必要なタイプに従ってデータセット タイプと変数名を変更するように注意してください (API 要件に準拠する必要があります。提供された変数名を使用できます) ERA5 Web サイトのデータセットによる選択)、グリッド解像度、緯度と経度の範囲、周波数など。
5. サーバーは download.py コードを実行します
サーバーに再起動し、download.py ファイルをコンピューターからサーバーの liuhw/data ディレクトリにドラッグします。
(download.py ファイルがどこに配置されても、ダウンロードされたデータは保存されることに注意してください)
lhw 仮想環境に入り、「python download.py」と入力し、Enter キーを押して実行してダウンロードします。
コードを書くのは簡単ではありません、それは花で終わります