コンピュータを研究に使うための私的メモ。Python、Fortran、Ubuntu、etc...

ECMWFのサイトからデータを取得する際のpythonスクリプトのメモ
(2013.4.23 追記) ECMWFのデータサーバが更新され、新しいサーバーに移行中とのこと。
ECMWFバッチアクセスについてのWiki

Pythonスクリプトでのアクセス

セットアップ

モジュールをインストールする。
$  sudo pip install https://software.ecmwf.int/wiki/download/attachments/23694554/ecmwf-api-client-python.tgz
ECMWF データポータルにログインした状態で、https://api.ecmwf.int/v1/key/にアクセスして表示されたユーザー情報をコピーして、~/.ecmwfapircに保存する。

データの取得

TIGGEデータのアクセスを例にとる。
from ecmwfapi import ECMWFDataServer
 
server = ECMWFDataServer()
 
server.retrieve({
    'dataset' :  "tigge",                                            # データセット名 (tigge: TIGGE、 interim: ERA-interim、 yotc: Year of Tropical Convection など)
    'step'       :  "24/to/120/by/24",                    # 予報データの場合に指定する。この場合、予報時刻24h〜120hまで24hごと。解析データの場合は0にする。
    'step'       :  "24/40/120",                                # toとbyによる指定がなぜかrejectされるので全て区切って指定(2013,4,16) 
    'number' : "all",                                                 # アンサンブルメンバーを指定する。すべてのメンバーを取得する場合はall。
    'levtype' : "sl",                                                   # データの種類。(pl: 等圧面データ、sfc: 地表面データ、ml:モデル面データなど)
    'date'       : "20071001/to/20071003",    # 期間(予報データの場合は初期日)。toで開始・終了を指定するか、/で区切って並べる。
    'time'       : "00/12",                                          # (初期)時刻。
    'origin'    : "all",                                                 # TIGGEの場合に指定。予報センターの略称。
    'type'       : "pf",                                                  # 予報データの場合。(cf: コントロールラン、pf: パータベーション)
    'param'   : "tp",                                                  # 取得したい要素のパラメータ。略称もしくは変数IDで指定。
    'area'       : "70/-130/30/-60",                      # 取得するデータの範囲。北sてい端/西端/南端/東端で指定し、gridに合わせて自動調整される。
    'grid'        : "2/2",                                               # 格子間隔。この場合は、2度x2度グリッド。データによって取得可能な解像度は異なる。
    'target'   : "data.grib"                                      # 出力ファイルパス。
    })
u東西風v南北風ghジオポテンシャル高度t気温q比湿
msl海面気圧tp積算降水量skt地表気温
10u10m東西風10v10m南北風2t2m気温
など。
  • areaは指定した範囲が含まれるようにgridに応じて変更される。例えば、gridが1.5/1.5で、20/0/-20/360を指定すると、21/0/360/-21に変更される。

基本(古い情報)

#!/usr/bin/python
from ecmwf import ECMWFDataServer

server = ECMWFDataServer(
       'http://data-portal.ecmwf.int/data/d/dataserver/',
       'ユーザー情報',
       'ユーザー情報'
    )

server.retrieve({
    'dataset' : "interim_daily",
    'date'    : "20090101/to/20090110",
    'time'    : "12",
    'step'    : "0",
    'levtype' : "pl",
    'type'    : "an",
    'param'   : "130.128",
    'levelist' : "500/1000",
    'area'    : "60/-120/30/-60",
    'target'  : "data.grib"
    })
MARS言語

データ情報

datasetデータセット名
dateデータの初期時刻の日付
timeデータの初期時刻の時刻
step予報期間
levtype鉛直座標
type??
param要素名
levelist取得する鉛直レベル
area取得するデータの範囲
target出力ファイル
これらのパラメータはMARS言語に従ってかけばよいとのこと。まずは画面上でクリックしたのちバッチリクエストを作成するのが手軽。あとで細かい点を修正や変数にしていけばよい。

期間の指定

dateとtimeで与える。
  • 例:1979/1/1から1979/1/5までの00,12UTC
...
    'dataset' : "interim_daily",
    'date'    : "19790101/to/19790105",
    'time'    : "00/12",
    'step'    : "0",
...

要素名の指定

取得したい要素はparamで与える。

emoslibのコンパイル

sharedlib.c の #include <sys/stat/h> の前に、#define __USE_LARGEFILE64 を追加する。
×

この広告は60日間更新がないwikiに表示されております。

情報

管理人のみ編集できます