Linux システムが ERA5 日分のデータをバッチダウンロードする

  • ERA5公式サイトには月次日次データをダウンロードするためのURLが用意されていますが、月ごとに手動でダウンロードするしかなく非常に面倒なので、サーバーを利用して自動一括ダウンロードを実現する方法を検討中です。

ログイン|  日次データURLは以下の通り

  • ERA5 ユーザーマニュアルの URL は次のとおりであり、多くの有用な情報が含まれており、情報を照会するための補助ツールとして使用できます。

https://datastore.copernicus-climate.eu/documents/app-c3s-daily-era5-statistics/C3S_Application-Documentation_ERA5-daily-statistics-v2.pdf

問題の背景:教師がサーバーを提供しました。サーバー内の 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 であることを証明しています。

APIを使用した日次データダウンロード

# -*- 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 キーを押して実行してダウンロードします。

コードを書くのは簡単ではありません、それは花で終わります

おすすめ

転載: blog.csdn.net/LHgwei/article/details/127807676
おすすめ