李建明, 韩永清, 冀玉超
(1.山东省气象防灾减灾重点实验室, 山东 济南 250031; 2.东营市气象局, 山东 东营 257091;3.山东省气象台, 山东 济南 250031)
短时临近预报主要针对0~12h 内的高影响天气的进行预报预警,对人民生产生活有较大影响,是防灾减灾的重要组成部分,各级气象台都十分重视这项业务。山东省气象台为做好此项工作,专门设立了短临业务岗位,完善了相关制度与工作流程,并将该岗位与智能网格预报业务互相衔接,设计开发了短临业务模块,制作发布短时临近格点预报并为市、县级气象台提供业务指导[1]。 为客观及时的评价短临预报产品的业务质量和服务效果, 开发检验平台,实现对短临预报产品的检验成为业务急需。
气象大数据云平台(CMADaaS,以下简称天擎)是全国气象信息化“数算一体”的核心平台,具有海量存储、全业务贯通、高效数据应用的能力。 《气象信息系统集约化管理办法》(气发〔2018〕117 号文件)提出,已有的信息系统要积极进行云化改造后融入天擎,对于新开发的系统,要求实现“云原生”。 福建、湖南、云南、广西等省陆续开展了已有气象业务系统云化改造并融入天擎的研究与探索[2-8],但是基于天擎的“云原生”建设的信息系统较少,尚处在起步阶段。
本文分析了短临预报产品及检验办法, 阐述了短临预报检验平台的功能定位、架构及各功能模块的实现方法,完成了基于天擎的“云原生”建设,为其它信息系统的“云原生”建设提供借鉴。
对短临岗的强对流落区预报进行检验, 检验内容为每天08、14、20 时起报,至次日08 时以内逐3 h 的强对流落区网格预报,要素为雷暴、短时强降水和和雷暴大风。实况参考站点为全省122 个国家级台站和298 个骨干区域站。当观测站30km 内有闪电数据时定义为该站产生雷暴天气;当观测站点预报时效内出现≥20mm/h 的降水时定义为该站产生短时强降水; 当站点有雷暴天气且极大风速≥17m/s 时定义该站产生雷暴大风。 按雷暴、短时强降水、 雷暴大风评分各占三分之一的规则计算强对流落区预报的TS 评分,命中率、空报率的算法分别见式(1)与式(2)。 按命中率从高到低,空报率从低到高的顺序给预报员赋排序分,将排序分汇总生成短临业务检验质量结果。
命中率POD 计算方法:
空报率FAR 计算方法为:
其中NA 为预报正确站数,NB 为空报站数、NC 为漏报站数。
短临岗预报员制作完成的强对流网格预报以GRIB2格式报文形式保存在天擎的NAS 中,实况数据通过天擎数据接口获取,基于预报和实况数据,检验平台采取B/S方式,客户端通过浏览器进行各种查询与统计,服务端部署在天擎,通过算法加工流水线后台定时运行,主要包括预报读取与处理模块、实况获取模块、检验模块。 功能结构图如图1 所示。
图1 功能结构图
短临预报检验平台伴随短临预报业务同步运行,功能定位为省级应用的业务化平台, 要求各功能模块运行稳定,数据处理准确可靠,计算要科学严谨,查询统计要方便快捷。针对异常情况如实况数据缺失、预报报文修改等情况要有自动应对机制,便于运行维护。
短临预报检验平台完全基于天擎设计和部署, 采用前后端分离架构,前端部署在天擎的资源池云主机,通过WEB 框架进行综合查询、各单项质量查询、值班和管理、GIS 方式查询等功能。 后端依赖天擎的数据、基础设施服务及算法加工流水线等资源,承担各类预报与实况处理、定时检验、回算校验及产品加工等功能。 前后端通过API进行数据交互,业务应用和数据服务都在天擎内完成,算法靠近数据,实现了“数算一体”。 功能架构如图2 所示。
图2 功能架构图
短临预报检验平台使用Microsoft Visual Studio 作为综合开发工具, 使用Python3.8 语言开发。 运行时使用Django 作为WEB 框架,docker 使用Redhat7.5 操作系统,数据库为虚谷云数据库,内存数据库使用Redis。
天擎能提供各类专题库和云库, 气象常用的结构化数据的存储适合使用专题库存储, 其它数据适合使用云库存储。天擎上的云库由用户申请,通过后可自主新建模式及数据表,使用方式上更加灵活方便。天擎提供的云库为虚谷数据库,这是一种关系模型数据库[9],支持SQL92语法,兼容oracle 语法,完全自动的分库分表策略,机制成熟、可靠,读写时效较高。
根据短临预报检验平台的数据情况, 在虚谷数据库新建模式DUANLIN,在此模式下新建预报、实况、站号信息、检验结果、汇总结果等数据表。 在对数据表进行结构设计时, 充分利用json 格式数据紧凑的优势, 将相同要素、相同时次对应的站号、时效的数据以json 格式存储,相较于传统的“站号,要素,时间,数据”类型的单站单记录的表结构,不但读写速度更快,而且读取的数据能直接赋值给Python 的字典类型变量, 提高了开发效率。Python3.8 连接虚谷数据库相关代码如图3 所示。
图3 虚谷数据库连接代码
短临预报文件为GRIB2 格式[10],这是一种包含多要素、 能描述不同时间和空间的多维网格的二进制数据格式,读取比较复杂。 本文使用pygrib 函数库进行解码,筛选出考核站点对应的预报值,处理流程为:①下载GRB2 格式预报文件,用pygrib 进行解码后转换为专用格式data;②读取data 中的头部描述信息message, 分离出起报时间和时效,筛选出24h 内逐3h 的数据集set;③读取set 中经纬度数据生成矩阵array;④根据实况参考站点的经纬度,用“邻近距离法” 计算出实况站点对应的矩阵array 的位置position;⑤从set 中读取position 对应的数据,即得到预报值。
短临预报检验平台的预报与实况读取、 检验计算及结果汇总等功能均通过容器生成算法, 通过加工流水线调度执行。容器[11-12]使用Redhat7.5+Python3.8 的轻量级开发与运行环境,按照“一项任务为一个算法、相同的数据源及输出方式为一个算法”的原则,将平台功能剥离为多个算法,分别为:①“天擎数据读取并入库算法”:从天擎数据接口[13-14]读取闪电、短时强降水、大风的实况,处理后输出至虚谷数据库;②“NAS 读取并入库算法”:从NAS 读取短临岗的网格预报报文,解码后输出至虚谷数据库;③“检验算法”:从虚谷数据库分别读取预报和实况,按检验办法计算后,将检验结果输出至虚谷数据库;④“汇总统计算法”:从虚谷数据库读取检验结果,按人员、要素、日期等对检验结果进行多种分组汇总,结果输出至虚谷数据库。
天擎能对各个算法任务进行统一管理, 按设定的策略调度并运行, 各算法之间没有任何接口, 完全独立运行,具有较高的稳定性。 业务用户能对算法进行修改、删除、人工触发等操作,能查询运行日志,便于对任务进行监控和维护。
短临预报使用二分类的检验规则, 即预报和实况分别以“事件发生、事件未发生”进行组合检验[15]。 传统的检验方法采用时间、站点循环的串行计算方法,运算效率非常低。 本文对检验算法的计算流程进行了改进, 利用Python 语言中的set(集合)类型,通过集合运算批量生成结果,不但代码量变少,而且提高了运行效率,缩短了运行时间。 集合检验法流程如图4 所示。
图4 集合检验流程图
短临检验平台将检验结果以WEB 方式显示,主要功能有单项质量查询、 综合质量及排名、GIS[16]对比显示及管理功能。WEB 部署在天擎云主机,使用Django 框架,采用前后端分离技术,前后端之间通过数据API 进行通信。 GIS 地图交互使用leaflet 函数库, 能对站点、 预报要素、时效、值班表等进行选择查询, 方便预报员实时查看检验结果。GIS显示如图5 所示。
图5 短临预报检验平台GIS 显示图
山东短临预报检验平台依托天擎的基础设施和服务资源,采取“云原生”方式建设,提高了开发与部署效率,增强了稳定性。 自2022年4 月投入业务运行以来,一直稳定运行,实现了对短临预报网格产品的实时检验, 检验结果作为主要依据用于预报质量业务考核,同时,有利于预报员根据实时检验结果及时调整预报思路和预报方法,从而提升预报准确率。