Tuesday, 12 November 2024

氷河合宿その4d:ERA5月平均データ連続ダウンロード

単発のデータダウンロードができたら、次は複数年の自動ダウンロードをやります。

研究室サイトにスクリプトを置いたので、右クリックから「名前を付けて保存」で入手し、テキストエディタで開いてください。(若干修正)

三行目の

for iyr in range(2010,2021,1):

は、Pythonの「繰り返し」コマンドで、iyrというパラメータに、2010から2020まで、1ずつ増やして、という意味です。ん?2021までじゃないの?って思いますよね、Pythonはn個の行列があった場合、0から始まってn-1で終わる、というルールになってます。なので、2021と書いてある場合、2020まで、ということになります。

で、さらに重要なのが、このfor文で繰り返すコマンドは、以降の段落(インデント)が一つ下がっているコマンド全てになります。試しに、テキストエディタ上でfor文最後の:の後ろでリターンキーを押してみると、自動的にインデントが一つ下がったところにカーソルがあることがわかります。

yr=str(iyr)

print(yr)

 iyrは整数なので、次のstr(iyr)でテキストとして割り当て、画面上にその年を表示させています。(いつのデータを待機中なのかがわかるように)

以降しばらくはお試しダウンロードで作ったスクリプトと同じはずです。(ただし、年の指定が置き換わっているのと、インデントが下がってる)

ちゃんと動くスクリプトが用意できたら(今回のはまさにそうなのですが)、最後の"area"と保存ファイル名を変更するだけで、他の領域のダウンロードが可能になります。(欲しいパラメータが違ってくるなら作り直す必要ありですが)

ちなみに領域指定は

"area": [80, -80, 70, -60]

"area": [北, 西, 南, 東] ですからね。

最後のtargetで、保存ファイル名を指定していますが、

target = 'nc/arctic' + yr + 'mon.nc'

「nc/」が保存先のフォルダで、その中にarcticYYYYmon.ncというファイル(YYYYが年)が保存されるようにしています。

あとは、作業フォルダの中にncフォルダを作成した上で、ipythonを起動し、

run get_srf5mon.py

を実行すればダウンロードできるはずです。お試しあれ。

なお、全球をダウンロードすると、一年あたり約250MBになります(10年で2.5GB、40年で10GB)。許容範囲の大きさですが、先の記事に書いた通り、範囲指定と全球では、西経の扱いが違うので、以降の演習で提供する抽出スクリプトが使えないのと、ダウンロードの待機に時間がかかるので、推奨しません。

なお、Sublime Textでは、インデントを変更したい行を選択し、「Edit(編集)」→「Line(行の操作)」→「Reindent(インデント最適化)」で一括でインデントを下げることができるので便利。

合宿参加者への課題:hourly dataのダウンロードスクリプト作成

質量収支モデルに使用する、hourly dataを連続ダウンロードするスクリプトを作成しましょう。monthly data(範囲×要素×12ヶ月)に対して、hourly dataは、「範囲×要素×24時間×365日」と一気に730倍のデータ量になります。大量のデータリクエストでCDSサイトの反応がとても遅くなることもあり、月毎にダウンロードすることを推奨しています。(また、この後使う、ポイント抽出スクリプトは月毎にファイルが作成されていることを前提に作ってあります)

というわけで、月平均データのための上記のスクリプトに対し、datasetとrequestの中身をhourly dataに合わせることに加え、「月ループ」を作る必要があります。

注意点
参照サイトが違うので、APIスクリプトを用意してみて、どこが違っているか確認しておきましょう。
年ループの中に、更に月ループを用意すること
月を指定するとき、1, 2,,, 11, 12ではなく、01, 02,,, 11, 12とする必要があること

この二点を自分で調べて作成してみましょう。2日後(11/14木)にお手本スクリプトを解説付きで公開します。

なお、月の中の日数指定は、「select all」で31日分全選択すればいいです。31日に満たない月は、データがある分しかダウンロードされない。

No comments:

Post a Comment