基于VBA对城市水文年鉴雨量前期数据处理的研究
2020-08-17仇东山岳潇静
仇东山,赵 涛,岳潇静
(济南市水文局,山东 济南 250002)
0 引言
水文资料整编是对原始的水文资料按科学方法和统一规格,分析、统计、审核、汇编、刊印或储存等工作的总称,为国家的水利决策提供可靠的信息数据[1],降水量是水文资料整编中重要的组成部分,特别是在降水原始数据的收集、前期处理阶段工作量较大,济南是全国最早系统开展城市水文年鉴整编城市,本文主要是针对济南市城市水文年鉴在降雨资料整编过程中出现的问题进行研究分析,目前,济南市城市水文年鉴的数据主要使用北方片区资料整编软件(BFZLZB),整编后的降水资料主要包括:逐日降水量表、降水量摘录表、各时段最大降水量表等数据表格,自2007年“7.18”以来,济南市水文局整合了气象、水利、高校等不同建设管理单位的降水观测站,并由济南市水文局统一发布,由于前期各单位降水观测站数据采集规范不统一,数据存储的格式也不相同,这就造成了在使用整编软件处理降水数据时必须采用人工处理的方法对不规范的降雨采集资料进行前期处理,但每年需要处理的非水文部门建设的降水站点达几十个、每站每年的数据也有几千条之多,人工处理起来费时费力,而且极易出现人为误差,极大降低了整编效率和准确率,由于降水量数据大部分为数据表格形势,数据文件都可用Excel表打开,虽然传统的Excel内置函数也能处理大部分数据,但涉及到数据的插值处理就无法解决了,本文通过Excel自带的VBA功能,通过VBA的编程对降水数据进行整理、筛选、插值,极大提高了整编效率和准确度,VBA编程技术是基于Microsoft Office的一种内置式编程语言[2],VBA不需要另外的编程环境,只需在Excel的开发环境中就可使用,而且通过VBA可以利用Microsoft的大部分的API接口编程,特别是对Excel表格更加方便快捷。
1 城市水文年鉴雨量整编过程中出现的问题
按照资料整编的规范要求,雨量数据需要符合三个条件:数据的完整性、数据的唯一性、数据的准确性[3],从实时雨量数据导出的数据必须符合整编软件的格式、数据特性要求,标准的数据文件一般采用Excel格式,扩展名“.P0G”的文件,数据在从数据库导出时就筛选出了可使用数据,如:济南城市年鉴基本使用6月~9月的雨量数据,遥测实时数据只使用日期(时间)、遥测(5 min或1 min)雨量,其它的数据列必须被屏蔽掉,数据格式见图1、图2(文本格式打开)。
图1 标准的雨量表原始数据表
图2 需要插值处理数据表
在济南城市水文年鉴整编过程中,大部分由济南市水文局建设、管辖的降水观测站点导出的遥测雨量原始数据基本都符合年鉴整编数据格式要求,但从气象局、水利局导出的降水数据格式不符合整编格式要求,主要包括以下几个问题:
1)数据文件为文本方式,每条遥测记录不是日期时间格式,无法按时间序列进行数据处理和分析,而且存在文件头尾和无用的数据列,需要人工进行特殊的处理才能进行下一步的整编工作。
2)跨小时段数据没有进行插0,由于整编软件的特殊要求,标准的数据文件应该是每跨小时、天的遥测数据如果不是正小时点时,必须在正小时点插入0降水量值,否则在整编过程中就会产生摘录表错误。
如果对跨时段降水量不进行插值处理,BFZLZB整编软件在进行数据整编时,会出现无效的数据报表,见图3、图4。
图3插值前产生错误降水摘录表
图4插值后产生错误降水摘录表
2 整编降水量数据VBA编程处理
2.1 主程序界面
程序基于VBA编程,由于各单位产生的雨量原始文件都不尽相同,数据处理过程需要对不同的文件分别处理,所以在编程过程中采用模块化处理,主程序界面见图5。
图5 主程序入口截图
2.2 日期类型数据处理
由于部分原始数据文件是P0G格式,雨量数据采集日期是文本类型,这样导入到EXCEL表中就无法进行跨时段雨量插值处理,需对文本字符类型进行日期类型转换,如:“050319.40”转换成日期类型“2017-05-03 19:40”,主要代码如下:
2.3 无效数据的处理
原始雨量文件包括很多无效的数据列、文件头尾说明、以及非汛期的雨量(0~5月、10月~12月),需在整编前对这些无效数据进行删除,代码如下:
2.4 跨时段插值处理
VBA编程原理,依次遍历所有的雨量数据,先把所有降雨量为0的数据删除,形成有效降雨值,再遍历所有数据,判断每个数据的采集日期之间的时间间隔,如果在一个小时段内,跳过,否则,在每一个需要插值得数据行前插入上一个时间点的0降雨值,目前,济南大部分雨量点都为5分钟一传、个别采用1分钟一传,时间插值根据原文件时间间隔分别设置时间插值数值,代码如下:
2.5 文件存入P0G格式处理
处理完成的Excel文件,需保存为P0G文件格式,就可直接进行雨量整编程序处理,如需要处理大批量文件,可增加代码,遍历一个目录中所有的文件,对每个文件进行上述程序处理,最后保存为“.P0G”文件,代码如下:
3 结语
济南城市水文年鉴自2010年开始编辑刊印,在之前,类似这样的原始数据大部分都是通过人工处理,处理一个汛期雨量数据需要耗费大量的人力物力,而且雨量处理的准确性得不到保障,自使用本程序以来,一次性处理几十个原始雨量文件,每个文件大约5000余条的雨量数据也仅仅需要不到一分钟时间,极大的减少了人工成本,提高整编效率和数据的准确性,但在使用过程,本程序还存在一些弊端,如:一旦出现原始数据文件格式特殊,就可能报错,容错能力较差,其次,该程序还必须依靠Office Excel应用系统的支撑,不能独立使用,争取在下一步工作中继续完善和提升。