張秀萍,李 君,袁 林,李 楊,周 輝
(中國地震局第二監(jiān)測中心,陜西 西安 710054)
地震目錄是地震活動(dòng)構(gòu)造和震害分析研究等科學(xué)研究[1-3]和震情信息服務(wù)的重要資料[4-6],及時(shí)有效地獲取地震目錄資料對開展相關(guān)地震科學(xué)研究和數(shù)據(jù)服務(wù)具有重要的研究意義和應(yīng)用價(jià)值。國家地震臺(tái)網(wǎng)中心作為全國地震編目最終產(chǎn)出單位,擁有豐富的數(shù)據(jù)資源[6-7],其統(tǒng)一編目系統(tǒng)是各科研單位和臺(tái)站獲取國家地震目錄資料的主要來源之一。
國家地震臺(tái)網(wǎng)中心統(tǒng)一編目網(wǎng)站提供多種常用格式的地震目錄下載接口,在一定程度上滿足了研究人員的下載格式需求。但由于不同的地震目錄格式對應(yīng)不同的下載接口,當(dāng)按年月下載不同格式的目錄并分別保存時(shí),會(huì)重復(fù)操作下載過程,耗費(fèi)時(shí)間。此外,下載的地震目錄因?yàn)楦袷焦潭?,?shù)據(jù)以文本形式或其他文件形式進(jìn)行保存,使得其應(yīng)用范圍比較受限[8]。
為了提高信息獲取效率,利用Python編程訪問下載網(wǎng)址并將腳本代碼放在數(shù)據(jù)專家Datist(多源數(shù)據(jù)融合專家應(yīng)用軟件,簡稱數(shù)據(jù)專家)中,設(shè)置定時(shí)運(yùn)行流程,即可自動(dòng)獲取地震目錄資料。為了更加靈活的對外界提供地震目錄數(shù)據(jù),同時(shí)保證數(shù)據(jù)的安全性,利用Datist將數(shù)據(jù)存入MySQL數(shù)據(jù)庫,并提供對外的數(shù)據(jù)接口,實(shí)現(xiàn)地震目錄資料的按字段存儲(chǔ)、管理與服務(wù),具有效率高、使用方便、數(shù)據(jù)獲取靈活等特點(diǎn)。
地震目錄資料自動(dòng)下載與數(shù)據(jù)存儲(chǔ)的原理總框圖如圖1所示,包括三部分:下載文本數(shù)據(jù)、文本數(shù)據(jù)拆分入庫和獲取數(shù)據(jù)信息。下載文本數(shù)據(jù)通過程序訪問下載地址得到地震目錄文本,并將其保存在固定目錄下。程序在訪問下載地址時(shí),通過更新下載地址鏈接中的時(shí)間、震級、經(jīng)緯度等參數(shù)性,可下載不同時(shí)間段、震級以及經(jīng)緯度的地震目錄。本文使用Python語言訪問下載地址,該腳本語言擁有強(qiáng)大的支撐庫,能夠?qū)崿F(xiàn)跨平臺(tái)移植且節(jié)省運(yùn)算資源,可集成在數(shù)據(jù)專家Datist中使用。
文本數(shù)據(jù)拆分入庫和獲取數(shù)據(jù)信息這兩部分主要利用數(shù)據(jù)專家Datist實(shí)現(xiàn)數(shù)據(jù)處理過程。首先讀取地震目錄文本保存目錄,之后對文本數(shù)據(jù)拆分處理得到字段數(shù)據(jù),最后將字段數(shù)據(jù)過濾篩選后寫入數(shù)據(jù)庫。為了保證數(shù)據(jù)安全,最大程度的對外提供數(shù)據(jù)共享服務(wù),選擇MySQL數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù)。地震目錄數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫后,使用“接入數(shù)據(jù)庫”節(jié)點(diǎn)連接到對應(yīng)的數(shù)據(jù)庫,通過Datist數(shù)據(jù)專家提供的各類報(bào)告與軟件接口來獲取需要的數(shù)據(jù)信息。
基于Datist的地震目錄資料自動(dòng)下載與數(shù)據(jù)存儲(chǔ)通過可視化的節(jié)點(diǎn)組合完成數(shù)據(jù)處理的有形化表達(dá),不需要掌握復(fù)雜的編程技術(shù)即可實(shí)現(xiàn)對海量多源數(shù)據(jù)的整合、查詢以及報(bào)告生成等批量化處理過程[9],方法簡單,可操作性高,有效地提高了數(shù)據(jù)處理效率。
圖1地震目錄資料自動(dòng)下載與數(shù)據(jù)存儲(chǔ)原理框圖Fig.1 The principle diagram of automatic downloading and data storage of seismic catalogue data
中國地震臺(tái)網(wǎng)中心統(tǒng)一編目系統(tǒng)提供了統(tǒng)一快報(bào)目錄、統(tǒng)一正式報(bào)目錄等地震目錄的下載接口,下載格式包括txt、wkf和xls等格式。使用Python腳本登錄網(wǎng)站后調(diào)用下載地址接口,然后將下載的文本(.txt)保存在固定的目錄下。腳本主要代碼如下所示,下載鏈接地址參數(shù)比較多,介于文章篇幅,此處省略了一些其他參數(shù),只保留了時(shí)間參數(shù)。
from urllib import request #加載request模塊,用來訪問網(wǎng)址地址
from http import cookiejar #加載cookiejar模塊,保存cookie
url =‘http://10.5.160.18/export/download.action?type=PHASE_WK_TXT&type1=
UniteWeek&type2=UniteWeekTxt&catalogw.t2Start=2018/01/01%2000:00:00&catalogw.t2
End=2018/02/01%2000:00:00’ #下載鏈接地址(省略了請求頭的部分參數(shù))
startdate=[‘2018/01/01’]#地震目錄開始時(shí)間
enddate=[‘2018/02/01’]#地震目錄結(jié)束時(shí)間
response=opener.open('url')
filename=startdate.replace("/","")+"_"+enddate.replace("/","") #保存下載的地震目錄
uniteWeekCatalogDatafile = open('E: /Data/+filename+'.txt','w')
uniteWeekCatalogDatafile.write( response.read().decode('gbk'))
uniteWeekCatalogDatafile.close()
上面的腳本代碼實(shí)現(xiàn)登錄地震編目系統(tǒng)獲取下載地址的功能。腳本中沒有循環(huán)更新地址參數(shù)的代碼塊,因此腳本運(yùn)行結(jié)果只能得到固定參數(shù)(如地震目錄時(shí)間是2018/01/01-2018/02/01)的地震目錄文本。下面將結(jié)合Datist流程更新地址參數(shù),動(dòng)態(tài)更新地址鏈接,靈活獲取地震目錄。
數(shù)據(jù)專家處理文本數(shù)據(jù)并將處理數(shù)據(jù)寫入數(shù)據(jù)庫的流程如圖2所示,首先更新Python腳本中的日期變量,將更新后的變量傳入到鏈接地址對應(yīng)的變量中并保存地震目錄文本到固定的目錄(前兩行流程),掃描該目錄并對文本進(jìn)行處理然后存到數(shù)據(jù)庫(第三行流程),最后從數(shù)據(jù)庫獲取字段數(shù)據(jù)(最后一行)。
圖2地震目錄資料自動(dòng)下載與數(shù)據(jù)存儲(chǔ)流程圖Fig.2 The flow chart of automatic downloading and data storage of seismic catalogue data
地震目錄文本處理的關(guān)鍵在于文本數(shù)據(jù)拆分,數(shù)據(jù)專家的“列辟分”節(jié)點(diǎn)通過設(shè)置錨點(diǎn),可以快速地對文本進(jìn)行辟分操作,如圖3所示。與利用程序代碼實(shí)現(xiàn)數(shù)據(jù)辟分與合并操作相比較,節(jié)點(diǎn)辟分過程簡單、效率高,圖形用戶界面操作實(shí)現(xiàn)數(shù)據(jù)處理過程可視化,便于及時(shí)快速地更改需求。辟分完成后,數(shù)據(jù)將會(huì)根據(jù)設(shè)置的錨點(diǎn)拆分成一列列的數(shù)據(jù),過濾節(jié)點(diǎn)可以設(shè)置新列的名稱。在對數(shù)據(jù)存入數(shù)據(jù)庫之前插入了一個(gè)初始化時(shí)間節(jié)點(diǎn),用來給數(shù)據(jù)庫插入初始化時(shí)間字段,記錄數(shù)據(jù)變更時(shí)間。利用數(shù)據(jù)專家“寫入數(shù)據(jù)庫”節(jié)點(diǎn)將數(shù)據(jù)存入MySQL時(shí),流程會(huì)根據(jù)過濾條件自動(dòng)建立數(shù)據(jù)表和表字段。
圖3文本數(shù)據(jù)辟分示意圖Fig.3 The dividing diagram of text data
運(yùn)行數(shù)據(jù)專家地震目錄資料自動(dòng)下載與數(shù)據(jù)存儲(chǔ)流程,獲取2018.01.01至2019.01.01的統(tǒng)一正式報(bào)目錄,并按月份保存數(shù)據(jù)的流程下載結(jié)果如圖4所示,顯示的是2018.01.01到2019.01.01按月保存的全部事件文本目錄。從下載地址鏈接獲取地震目錄時(shí),可以按年、月分別保存數(shù)據(jù),同時(shí)可以通過Python腳本自定義下載的文件名稱,便于識(shí)別保存的文本數(shù)據(jù)。
圖4運(yùn)行數(shù)據(jù)專家流程自動(dòng)獲取文本目錄結(jié)果Fig.4 The dividing diagram of text data
圖5是對下載的地震目錄文本數(shù)據(jù)進(jìn)行數(shù)據(jù)處理后,存入到MySQL數(shù)據(jù)庫的結(jié)果。由圖5看出MySQL按字段存儲(chǔ)數(shù)據(jù),使得數(shù)據(jù)的使用更為靈活和安全。利用數(shù)據(jù)專家流程下載12個(gè)月的統(tǒng)一正式報(bào)目錄全部事件文本,并按月保存文本數(shù)據(jù)以及處理數(shù)據(jù)寫入數(shù)據(jù)庫,整個(gè)過程共耗時(shí)4分鐘,實(shí)現(xiàn)了高效高質(zhì)量的完成地震目錄的下載和存儲(chǔ)過程。
圖5地震目錄數(shù)據(jù)存入MySQL條目Fig.5 The results of running datist process to automatically obtain text catalog
地震目錄資料數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫后,可以根據(jù)需求獲取數(shù)據(jù)庫字段數(shù)據(jù),“接入數(shù)據(jù)庫”節(jié)點(diǎn)支持MySQL語句,能夠直接對數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行增刪改查操作;然后使用“瀏覽報(bào)告”節(jié)點(diǎn)查看具體的數(shù)據(jù)信息。例如需要獲取2018.12.01至2019.01.01發(fā)生的地震值大于5級的數(shù)據(jù)信息,從數(shù)據(jù)庫得到的數(shù)據(jù)如圖6所示,包括發(fā)生地震的具體時(shí)間、地震的經(jīng)緯度、震級深度以及參考地名等信息。
Datist提供了很多接口,除了各種數(shù)據(jù)庫接口,還有文本接口如PDF、word、Excell等以及可視化接口,不需要單獨(dú)定義接口,利用數(shù)據(jù)專家提供的接口即可方便快捷的對數(shù)據(jù)進(jìn)行查看和使用,實(shí)現(xiàn)對外提供數(shù)據(jù)服務(wù)的功能。
圖6地震值大于5級的數(shù)據(jù)(2018.12.01—2019.01.01)Fig.6 The data with an earthquake value greater than 5(2018.12.01—2019.01.01)
利用Datist節(jié)點(diǎn)流程能夠方便快捷地實(shí)現(xiàn)自動(dòng)下載地震目錄和數(shù)據(jù)存儲(chǔ)功能,具有高效性和便捷性,同時(shí)以MySQL數(shù)據(jù)庫的方式保存地震目錄數(shù)據(jù),具有一定的靈活性和安全性等,極大地提高了地震目錄資料的獲取效率,為進(jìn)一步的地震數(shù)據(jù)共享應(yīng)用奠定基礎(chǔ)。此外數(shù)據(jù)專家節(jié)點(diǎn)流程支持多種數(shù)據(jù)庫(MySQL、Access、Oracle)的寫入和接入,也支持文件如Word和Excell操作及數(shù)據(jù)可視化應(yīng)用,可根據(jù)實(shí)際需求提供地震目錄資料的數(shù)據(jù)接口,能夠?yàn)榈卣鹂蒲泻蜆I(yè)務(wù)監(jiān)測應(yīng)用提供方便快捷的地震目錄數(shù)據(jù)服務(wù),給地震數(shù)據(jù)自動(dòng)化獲取服務(wù)提供參考方法,對促進(jìn)地震科研信息化服務(wù)的發(fā)展具有一定的應(yīng)用的價(jià)值。