仇東山,趙 濤,岳瀟靜
(濟(jì)南市水文局,山東 濟(jì)南 250002)
水文資料整編是對原始的水文資料按科學(xué)方法和統(tǒng)一規(guī)格,分析、統(tǒng)計、審核、匯編、刊印或儲存等工作的總稱,為國家的水利決策提供可靠的信息數(shù)據(jù)[1],降水量是水文資料整編中重要的組成部分,特別是在降水原始數(shù)據(jù)的收集、前期處理階段工作量較大,濟(jì)南是全國最早系統(tǒng)開展城市水文年鑒整編城市,本文主要是針對濟(jì)南市城市水文年鑒在降雨資料整編過程中出現(xiàn)的問題進(jìn)行研究分析,目前,濟(jì)南市城市水文年鑒的數(shù)據(jù)主要使用北方片區(qū)資料整編軟件(BFZLZB),整編后的降水資料主要包括:逐日降水量表、降水量摘錄表、各時段最大降水量表等數(shù)據(jù)表格,自2007年“7.18”以來,濟(jì)南市水文局整合了氣象、水利、高校等不同建設(shè)管理單位的降水觀測站,并由濟(jì)南市水文局統(tǒng)一發(fā)布,由于前期各單位降水觀測站數(shù)據(jù)采集規(guī)范不統(tǒng)一,數(shù)據(jù)存儲的格式也不相同,這就造成了在使用整編軟件處理降水?dāng)?shù)據(jù)時必須采用人工處理的方法對不規(guī)范的降雨采集資料進(jìn)行前期處理,但每年需要處理的非水文部門建設(shè)的降水站點(diǎn)達(dá)幾十個、每站每年的數(shù)據(jù)也有幾千條之多,人工處理起來費(fèi)時費(fèi)力,而且極易出現(xiàn)人為誤差,極大降低了整編效率和準(zhǔn)確率,由于降水量數(shù)據(jù)大部分為數(shù)據(jù)表格形勢,數(shù)據(jù)文件都可用Excel表打開,雖然傳統(tǒng)的Excel內(nèi)置函數(shù)也能處理大部分?jǐn)?shù)據(jù),但涉及到數(shù)據(jù)的插值處理就無法解決了,本文通過Excel自帶的VBA功能,通過VBA的編程對降水?dāng)?shù)據(jù)進(jìn)行整理、篩選、插值,極大提高了整編效率和準(zhǔn)確度,VBA編程技術(shù)是基于Microsoft Office的一種內(nèi)置式編程語言[2],VBA不需要另外的編程環(huán)境,只需在Excel的開發(fā)環(huán)境中就可使用,而且通過VBA可以利用Microsoft的大部分的API接口編程,特別是對Excel表格更加方便快捷。
按照資料整編的規(guī)范要求,雨量數(shù)據(jù)需要符合三個條件:數(shù)據(jù)的完整性、數(shù)據(jù)的唯一性、數(shù)據(jù)的準(zhǔn)確性[3],從實時雨量數(shù)據(jù)導(dǎo)出的數(shù)據(jù)必須符合整編軟件的格式、數(shù)據(jù)特性要求,標(biāo)準(zhǔn)的數(shù)據(jù)文件一般采用Excel格式,擴(kuò)展名“.P0G”的文件,數(shù)據(jù)在從數(shù)據(jù)庫導(dǎo)出時就篩選出了可使用數(shù)據(jù),如:濟(jì)南城市年鑒基本使用6月~9月的雨量數(shù)據(jù),遙測實時數(shù)據(jù)只使用日期(時間)、遙測(5 min或1 min)雨量,其它的數(shù)據(jù)列必須被屏蔽掉,數(shù)據(jù)格式見圖1、圖2(文本格式打開)。
圖1 標(biāo)準(zhǔn)的雨量表原始數(shù)據(jù)表
圖2 需要插值處理數(shù)據(jù)表
在濟(jì)南城市水文年鑒整編過程中,大部分由濟(jì)南市水文局建設(shè)、管轄的降水觀測站點(diǎn)導(dǎo)出的遙測雨量原始數(shù)據(jù)基本都符合年鑒整編數(shù)據(jù)格式要求,但從氣象局、水利局導(dǎo)出的降水?dāng)?shù)據(jù)格式不符合整編格式要求,主要包括以下幾個問題:
1)數(shù)據(jù)文件為文本方式,每條遙測記錄不是日期時間格式,無法按時間序列進(jìn)行數(shù)據(jù)處理和分析,而且存在文件頭尾和無用的數(shù)據(jù)列,需要人工進(jìn)行特殊的處理才能進(jìn)行下一步的整編工作。
2)跨小時段數(shù)據(jù)沒有進(jìn)行插0,由于整編軟件的特殊要求,標(biāo)準(zhǔn)的數(shù)據(jù)文件應(yīng)該是每跨小時、天的遙測數(shù)據(jù)如果不是正小時點(diǎn)時,必須在正小時點(diǎn)插入0降水量值,否則在整編過程中就會產(chǎn)生摘錄表錯誤。
如果對跨時段降水量不進(jìn)行插值處理,BFZLZB整編軟件在進(jìn)行數(shù)據(jù)整編時,會出現(xiàn)無效的數(shù)據(jù)報表,見圖3、圖4。
圖3插值前產(chǎn)生錯誤降水摘錄表
圖4插值后產(chǎn)生錯誤降水摘錄表
程序基于VBA編程,由于各單位產(chǎn)生的雨量原始文件都不盡相同,數(shù)據(jù)處理過程需要對不同的文件分別處理,所以在編程過程中采用模塊化處理,主程序界面見圖5。
圖5 主程序入口截圖
由于部分原始數(shù)據(jù)文件是P0G格式,雨量數(shù)據(jù)采集日期是文本類型,這樣導(dǎo)入到EXCEL表中就無法進(jìn)行跨時段雨量插值處理,需對文本字符類型進(jìn)行日期類型轉(zhuǎn)換,如:“050319.40”轉(zhuǎn)換成日期類型“2017-05-03 19:40”,主要代碼如下:
原始雨量文件包括很多無效的數(shù)據(jù)列、文件頭尾說明、以及非汛期的雨量(0~5月、10月~12月),需在整編前對這些無效數(shù)據(jù)進(jìn)行刪除,代碼如下:
VBA編程原理,依次遍歷所有的雨量數(shù)據(jù),先把所有降雨量為0的數(shù)據(jù)刪除,形成有效降雨值,再遍歷所有數(shù)據(jù),判斷每個數(shù)據(jù)的采集日期之間的時間間隔,如果在一個小時段內(nèi),跳過,否則,在每一個需要插值得數(shù)據(jù)行前插入上一個時間點(diǎn)的0降雨值,目前,濟(jì)南大部分雨量點(diǎn)都為5分鐘一傳、個別采用1分鐘一傳,時間插值根據(jù)原文件時間間隔分別設(shè)置時間插值數(shù)值,代碼如下:
處理完成的Excel文件,需保存為P0G文件格式,就可直接進(jìn)行雨量整編程序處理,如需要處理大批量文件,可增加代碼,遍歷一個目錄中所有的文件,對每個文件進(jìn)行上述程序處理,最后保存為“.P0G”文件,代碼如下:
濟(jì)南城市水文年鑒自2010年開始編輯刊印,在之前,類似這樣的原始數(shù)據(jù)大部分都是通過人工處理,處理一個汛期雨量數(shù)據(jù)需要耗費(fèi)大量的人力物力,而且雨量處理的準(zhǔn)確性得不到保障,自使用本程序以來,一次性處理幾十個原始雨量文件,每個文件大約5000余條的雨量數(shù)據(jù)也僅僅需要不到一分鐘時間,極大的減少了人工成本,提高整編效率和數(shù)據(jù)的準(zhǔn)確性,但在使用過程,本程序還存在一些弊端,如:一旦出現(xiàn)原始數(shù)據(jù)文件格式特殊,就可能報錯,容錯能力較差,其次,該程序還必須依靠Office Excel應(yīng)用系統(tǒng)的支撐,不能獨(dú)立使用,爭取在下一步工作中繼續(xù)完善和提升。