批量EC数据下载
前言
包含氣象家園、個(gè)人博客的精華內(nèi)容
準(zhǔn)備&配置
正確地獲取腳本和參數(shù)
下載策略及注意事項(xiàng)
常見問題解答(FAQ)
這四部主要針對(duì)三類不同人群:
如果你完全沒有看過關(guān)于批量下載ECMWF數(shù)據(jù)的文章,那么我建議你從第1部分開始看。
如果你看了相關(guān)的文章并且已經(jīng)成功完成了配置工作,那么請(qǐng)從第2部分開始看。
如果你前兩部分都已經(jīng)實(shí)踐過了,但是遇到了一些麻煩,例如程序崩潰了不知道原因,找不到某個(gè)文件夾之類的,那么請(qǐng)直接從第4部分開始看。(沒錯(cuò)我說的就是氣象家園那篇帖子里各種提問以及聲稱“我遇到了相同問題”的朋友們)
一、準(zhǔn)備&配置
想要獲取ECMWF的公開數(shù)據(jù)首先需要在網(wǎng)站注冊(cè)一個(gè)賬號(hào),以前我注冊(cè)那會(huì)兒需要翻墻才能注冊(cè)成功,現(xiàn)在似乎不需要了。值得注意的是,你的EC賬戶是不能自定義密碼的,你的密碼是EC通過郵件的方式給你分配的,所以建議你在Chrome中自動(dòng)保存密碼。注冊(cè)完并且登錄賬戶以后,點(diǎn)開這個(gè)網(wǎng)址:https://api.ecmwf.int/v1/key/,然后瀏覽器會(huì)在新的標(biāo)簽頁上顯示如下的內(nèi)容。
API-Key信息頁面
配置
macOS和Linux系統(tǒng):你需要把灰色方框里面的內(nèi)容復(fù)制粘貼到一個(gè)名叫.ecmwfapirc的文本文件里(推薦使用Sublime Text文本編輯器),并且該文件要放在~目錄(Linux的~是/home/,macOS是~/Users//)下。
Windows:,你可以打開一個(gè)空白的記事本,把花括號(hào)的內(nèi)容復(fù)制粘貼過去,然后保存到你cmd命令行初始的路徑。
確保pip已安裝的情況下,我們開始安裝ecmwfapi。
在Windows系統(tǒng)中,cmd執(zhí)行
# have admin privilege
pip install ecmwf-api-client
# have not
pip install --user ecmwf-api-client
# or
conda install -c conda-forge ecmwf-api-client
在macOS/Linux系統(tǒng)中,如果
# 有root權(quán)限,則執(zhí)行
sudo pip install https://software.ecmwf.int/wiki/download/attachments/56664858/ecmwf-api-client-python.tgz
# 若無root權(quán)限,則執(zhí)行
pip install --user https://software.ecmwf.int/wiki/download/attachments/56664858/ecmwf-api-client-python.tgz
完成以后可以在終端檢驗(yàn)一下是否安裝成功。
- >>> from ecmwfapi import ECMWFDataServer
- >>>
二、批量下載
要下載ECMWF的數(shù)據(jù),就繞不開MARS,它是Meteorological Archival and Retrieval System的簡(jiǎn)稱,可以把它理解成一個(gè)類似于數(shù)據(jù)庫的數(shù)據(jù)管理系統(tǒng)。MARS有自己語法,純MARS用戶可以直接使用MARS命令去調(diào)取數(shù)據(jù),然而這只是內(nèi)部人員或者商業(yè)合作伙伴(花了錢的那種)才有的特權(quán),可能是出于安全和管理的考慮,公共用戶無權(quán)直接使用MARS命令,需要使用MARS的API去調(diào)用MARS。
這就好比是你想找某人幫你個(gè)忙,你提出面談,但是他覺得你倆不熟,只讓你用微信跟他聊。直接使用MARS語法就相當(dāng)于是面談,而使用MARS API就相當(dāng)于是微信聯(lián)系。
ECMWF的公開數(shù)據(jù)庫包含有多個(gè)數(shù)據(jù)集,這些數(shù)據(jù)集的開放政策是不一樣的,有些數(shù)據(jù)集的開放權(quán)限是沒有條款限制的,有些卻需要你接受他們的一些政策條款才能獲得下載許可權(quán),你可以在這里查看這些數(shù)據(jù)集的開放政策。其中除了Licence為general以外的數(shù)據(jù)集(general是完全公開,默認(rèn)為Accepted),都需要你手動(dòng)點(diǎn)開并點(diǎn)擊Accept的,否則你在使用腳本下載該數(shù)據(jù)集的數(shù)據(jù)的時(shí)候會(huì)報(bào)錯(cuò),所以我建議你上來就把它們一口氣全部Accept了,省得以后麻煩。
保證了數(shù)據(jù)集的可用性,下面就是要開始建立腳本了。建立腳本非常的簡(jiǎn)單,先到這里找到你想要檢索數(shù)據(jù)的數(shù)據(jù)集。
選擇數(shù)據(jù)集
以ERA-Interim為例,進(jìn)入MARS的Web-API,你可以在這里面根據(jù)需要選擇你關(guān)注的參數(shù),時(shí)間參數(shù)只能單選,就隨便選一個(gè)時(shí)間就行,后面在腳本里修改。選擇完成后把頁面拉到最下面,點(diǎn)View the MARS request
在之后彈出的頁面里,ECMWF就給我們把Python下載的腳本寫好了。
在此基礎(chǔ)上,批量下載的兩種方法
修改 "date": "1989-01-01/to/2017-12-31",
for iyear in range(1989, 2018): #
for imonth in range(1, 13):
st = '{:4}-{:0>2}-01/to/{:4}-{:0>2}-31'.format(iyear, imonth,iyear,imonth)
server.retrieve({
...
"date": st,
...
})
查看服務(wù)器隊(duì)列
這里(請(qǐng)先登錄)
關(guān)于參數(shù)的編碼問題
我們可以看到,腳本里有"param": "58.162"這么一個(gè)參數(shù),這就是變量名參數(shù),我在Web-API里選擇的是Vertical integral of ozone,但是到這里變成了58.162。看來ECMWF有一個(gè)編碼表,把每個(gè)變量都編為一個(gè)編碼,然后用編碼調(diào)用。那么這個(gè)編碼表去哪里找呢?
首先,進(jìn)入這個(gè)頁面。在右上角的搜索框里搜索你想要的找的變量名,例如前面我選的那個(gè)Vertical integral of ozone
找到以后點(diǎn)開會(huì)出現(xiàn)詳情頁面。
詳情頁面與編碼推算
在詳情頁面里的GRIB Edition1里面找到ECMWF(這個(gè)例子里只有ECWMF,其實(shí)有些變量還有很多其他的數(shù)據(jù)源,比如WMO),然后根據(jù)右側(cè)的Value可以推算出這個(gè)變量的編碼,具體如圖所示。
這樣你就可以找到任何變量的編碼的,但是其實(shí)你并沒有必要這樣做,因?yàn)榧词鼓阍谶@里找到了你想要的變量編碼,但是它的很多其他參數(shù)你是不知道的,比如說你不知道它在什么時(shí)間段里有值,它的數(shù)據(jù)層級(jí)是怎樣的等等。所以在實(shí)際使用的時(shí)候,你還是應(yīng)該使用前面提到的Web API的方法獲取腳本和參數(shù)。
但是這個(gè)參數(shù)檢索表也有它存在的意義,你可以在里面查看它的一些信息,比如Description(簡(jiǎn)介)、Short Name(存在nc文件中的變量名)、Units(單位),雖然有時(shí)候這個(gè)Description會(huì)缺失(比如當(dāng)前這個(gè)例子),但是還是有很多變量它會(huì)給你一些簡(jiǎn)短的介紹,讓你對(duì)這個(gè)變量有一個(gè)了解。
三、下載策略和注意事項(xiàng)
下載量比較大的情況,在遠(yuǎn)程服務(wù)器上掛后臺(tái)運(yùn)行。具體命令是
nohup python example_download.py &
關(guān)于如何提高檢索效率的問題,根據(jù)官方給出的建議
關(guān)于程序中途退出的處理
有時(shí)候我們可能數(shù)據(jù)請(qǐng)求已經(jīng)提交了,結(jié)果因?yàn)榫W(wǎng)絡(luò)問題、關(guān)閉終端或者其他什么原因?qū)е卤镜爻绦蛑袛嗔恕_@時(shí)候不要慌,因?yàn)槟惚镜氐某绦螂m然中斷了,但是ECMWF服務(wù)器上MARS的程序還在跑(pai)著(dui)呢。你不要重復(fù)提交,否則可能會(huì)被增加延遲權(quán)重,增加等待時(shí)間。
這個(gè)時(shí)候正確的處理姿勢(shì)是到這里(請(qǐng)先登錄)來查看自己joblist,對(duì)于你的每一次成功提交,ECMWF都會(huì)處理到最終結(jié)果,除非是失敗提交(如權(quán)限不夠,參數(shù)不存在等)會(huì)顯示aborted。你可以在這里下載之前提交請(qǐng)求后處理出來(未成功下載過)的結(jié)果,就像下圖中所示。一旦你成功下載過一次,ECMWF就會(huì)從服務(wù)器中把該下載鏈接移除,并在download下面寫上expired。
注意,這里說的是成功下載,也就是說假如你點(diǎn)擊那個(gè)download鏈接下載到一半突然電腦的WiFi斷了,下載失敗,在你重新連上WiFi以后這個(gè)download依然可用,直到你確確實(shí)實(shí)把文件完整下載到本地以后,這個(gè)鏈接才會(huì)失效。
其實(shí)如果你只用Python進(jìn)行submit,然后每次都到j(luò)oblist里點(diǎn)擊鏈接下載也未嘗不可,畢竟對(duì)有些人來說可能看網(wǎng)頁會(huì)更親切一些。
四、常見問題解答(FAQ)
總結(jié)了以下幾個(gè)案例:
案例一:找不到ecmwf-api-client-python文件夾
這位同學(xué)之所以遇到這個(gè)問題,是因?yàn)門A不太了解Python的包管理機(jī)制。樓主的方法是直接下載源碼,然后在源碼的同級(jí)目錄下進(jìn)行操作,而這位同學(xué)是用pip安裝的模塊包,這種情況下包的源碼路徑是由pip進(jìn)行管理的,你根本不需要知道它在哪。用pip安裝是不需要受同級(jí)目錄限制的,因此這位同學(xué)其實(shí)根本不需要也不應(yīng)該完全按照樓主的步驟找到這個(gè)文件夾,把腳本放在任何目錄下都可以順利運(yùn)行。
案例二:提交不具備數(shù)據(jù)集權(quán)限的請(qǐng)求
這位同學(xué)問這個(gè)問題顯然是沒有看錯(cuò)誤提示,錯(cuò)誤提示里寫了你沒有獲取tigge數(shù)據(jù)集的權(quán)限,需要你去Accept一下條款。所以請(qǐng)到這里Accept一下。同時(shí)建議到這里把所有數(shù)據(jù)集全部Accept一下,省去不必要的麻煩。
案例三:為什么一直在排隊(duì)?是不是有什么問題?
排隊(duì)是因?yàn)檎?qǐng)求的人多,如果提示Request is queued,那說明它確實(shí)在排隊(duì)。其實(shí)如果你等不及把程序關(guān)了,MARS后臺(tái)還是會(huì)完成你的請(qǐng)求的,可以在joblist上查看,如果完成了可以直接從網(wǎng)站下載。
延伸閱讀:
Access ECMWF Public Datasets
MARS user documentation
MARS Intro
Retrieval efficiency
Reference
http://www.clarmy.net/2018/09/16/how-to-download-data-from-ecmwf-in-batch/
總結(jié)
- 上一篇: linux weblogic10 安装,
- 下一篇: PG,PL,SE,PM都是什么意思,职责