气象数据可视化诊断分析平台设计与应用开发
Design and Application Development of Meteorological Data Visualization Diagnosis and Analysis Platform
DOI: 10.12677/csa.2024.145110, PDF, HTML, XML, 下载: 97  浏览: 209 
作者: 胡 超:眉山市气象局,四川 眉山
关键词: 气象Streamlit数据可视化MetDigMeteorology Streamlit Data Visualization MetDig
摘要: 为了提高预报员对重大天气过程的预报分析能力,减少重复劳动浪费的时间,使重大天气过程复盘分析变得更加高效。研究将面向国内天气预报业务和科研应用的通用型天气学诊断分析的Python工具包MetDig开发为可共享的Web应用程序,实现多模式预报数据及再分析实况数据可定制的、可视化的诊断分析功能(包括热力诊断、动力诊断、水汽诊断、天气学诊断、降水诊断、要素诊断等共六大类28种综合图),为重大天气过程预报、复盘、机理研究等应用场景提供诊断分析技术支持。
Abstract: In order to improve the ability of forecasters to forecast and analyze major weather processes, reduce the time wasted by repetitive labor, and make the multi-disk analysis of major weather processes more efficient, in this paper, MetDig, a Python toolkit for general synoptic diagnostic analysis for domestic weather forecasting business and scientific research applications, is developed into a shareable Web application. It can realize customized and visual diagnostic analysis functions of multi-model forecast data and reanalysis of live data (including thermal diagnosis, dynamic diagnosis, water vapor diagnosis, weather diagnosis, precipitation diagnosis, factor diagnosis, etc., a total of six categories and 28 kinds of comprehensive maps), and provide diagnostic analysis technical support for application scenarios such as major weather process prediction, review and mechanism research.
文章引用:胡超. 气象数据可视化诊断分析平台设计与应用开发[J]. 计算机科学与应用, 2024, 14(5): 14-22. https://doi.org/10.12677/csa.2024.145110

1. 引言

近年来,气候变化带来的极端天气现象频频发生,对社会生产生活造成了严重影响。气象预报预警工作的重要性愈发凸显,对此,预报员需要进行大量的气象预报预警复盘工作总结,以期提高工作效率和预报准确性 [1] 。此前,每次重要天气过程过后,预报员想要复盘分析研究时,就会各自去编写代码、搜集数据,这种分散劳动很大程度上造成了重复,浪费了宝贵的时间和精力,这是困扰预报员多年的业务问题。为解决这一痛点,国家气象中心推出了面向国内天气预报业务和科研应用的通用型天气学诊断分析工具包Meteorological Diagnostic Tools (简称:MetDig,原名NMDT),提供了常用的天气诊断分析的Python算法函数 [2] ,模式产品定制图形绘制函数,以及可以实用的诊断分析系统代码示例。但是,对于大多数预报员,特别是基层业务人员没有Python语言基础,不会利用MetDig工具包,因此,急需一个有可视化界面的气象数据诊断分析平台,降低预报员复盘、科研的门槛,减轻预报员的工作量,提高工作效率。

本平台基于国家气象中心天气预报技术研发室开发的MetDig工具包和Streamlit数据可视化的Python框架 [3] ,搭建一个眉山市气象数据可视化诊断分析在线app应用,实现多模式预报数据及再分析实况数据可定制的、可视化的诊断分析功能(包括热力诊断、动力诊断、水汽诊断、天气学诊断、降水诊断、要素诊断等共六大类28种综合图),以期为我市重大天气过程预报、复盘、机理研究等应用场景提供诊断分析技术支持。

2. 平台设计

本系统采用Streamlit数据可视化框架、B/S架构方式进行设计开发 [4] ,系统采用组件化的方式,遵循可扩展、可重用、可维护、高效敏捷开发的原则,自左向右按照统一的标准规范建立安全保障服务,确保系统开发规范和运行安全 [5] 。整个架构从下到上分为4个层次,从左往右按照规范标准建立安全保障机制,具体如图1所示。

本系统采用数据层、数据控制层、应用层3层结构体系。

Figure 1. Overall architecture

图1. 总体架构

2.1. 数据层

基于python编程,利用MetDig工具包的io数据资源访问模板读取绘制从MICAPS CASSANDRA (MICAPS分布式数据库大数据)、CMADaaS (气象大数据云平台•天擎)、ERA5 (欧洲中期天气预报中心对1950年1月至今全球气候的第五代大气再分析数据集)等在线数据API中,获取模式预报、实况再分析资料、站点观测、卫星云图、天气雷达等气象数据。

2.2. 数据控制层

1、利用utl通用工具库,对所有数据进行格式转换为stda标准格式数据,包括numpy数据转网格stda标准格式数据函数、网格stda标准格式数据转站点stda标准格式数据函数等。2、利用的cal诊断分析计算模块对数据进行气象诊断分析计算,包括动力、热力、水汽、天气特征和统计分析等计算。3、利用products产品可视化模块对动力、热力、水汽、天气特征和统计分析等诊断分析产品进行绘图处理,并调用graphics绘图模块进行产品制作。

2.3. 应用层

为用户提供各种模式预报及再分析的诊断分析产品包括热力诊断、动力诊断、水汽诊断、天气学诊断、降水诊断、要素诊断等共六大类28种综合图。

3. 平台的主要内容

平台前端主界面上右侧边栏为操作区,左侧为图片及数值显示区,如图2所示。用户可以定制的内容包括:数据源、预报模式种类、数据日期和时次、图片所显示的区域、物理量要素的高度层次、需要显示具体数值的点的经纬度、诊断分析的类别等。

Figure 2. System interface

图2. 系统界面

3.1. 数据源

操作区首先选择的是数据源,“cassandra”为micpas4的数据源,该数据源的优势就是直观,里面有什么数据,数据起始日期及数据时次是否有缺都可以直接在micaps4软件的数据源检索里面看到;“CMADaaS”为气象大数据云平台•天擎的数据源,优势是数据的起始日期更长;“cds”为欧洲中心ERA5再分析数据集,它的起始时间为1950年1月,数据覆盖范围为全球,空间分辨率为0.1˚ × 0.1˚,时间分辨率为1小时。预报员若是利用本平台做重大天气过程预报,则数据源需要选择为“cassandra”或者“CMADaaS”,若是用于复盘和机理研究则可以选择模式预报的数据源“cassandra”或者“CMADaaS”,也可以选择再分析资料数据源“cds”。

3.2. 预报模式及时间

当数据源选择为“cassandra”或者“CMADaaS”,下一步就要确定数据的起报日期、起报时次、预报时效,以及确定数值模式,目前有“ecmwf”、“cma_gfs”、“ncep_gfs”、“cma_meso_3km”四个模式可选。若选择数据源为“cds”则接下来要选择是数据日期及时次(因为ERA5是欧洲中心的再分析数据所以不需要选择预报时效和模式名)。

3.3. 绘图区域

接下来是选择绘图区域,可以选择“中国及周边”、“全国”,“西南”,“四川”,“眉山”,“华南”,“华北”等区域,也可以自定义区域。

3.4. 要素层次

然后是要素的层次,分为默认层次和自定义层次,若选择自定义层次则需要分别选择高度场层次、风场层次及物理量层次,但是有些综合图里面包含了特定的层次是无法自定义的,比如“海平面气压场”、“6小时降水”等。

3.5. 经纬度

接下来是选择任意一个点的经度和纬度用于显示其所对应的各种物理量数值(默认位置在眉山本站),用于写论文时查看具体数值。

3.6. 运行

最后就是热力诊断、动力诊断、水汽诊断、天气学诊断、降水诊断、要素诊断等共六大类诊断分析的运行按钮,单击其中一个稍等一会儿即可绘制出相应类别的几张综合图。

4. 关键物理量计算及部分代码

要想绘制诊断分析综合图首先要对数据进行计算,部分物理量是模式自带的,另外一部分需要用现有物理量提前计算所得,下面介绍部分物理量的计算方法及本平台所出部分综合图展示。

4.1. 位温

图3所示,为本平台所出的含有位温物理量的综合图。位温定义为空气干绝热过程变化到气压p = 1000 hPa时的温度 [6] 。未饱和空气的位温的表达式为:

代码实现:

def potential_temperature (pres, tmp):

pres_p = utl.stda_to_quantity (pres)# hPa

tmp_p = utl.stda_to_quantity (tmp)# degC

thta_p = mpcalc.potential_temperature (pres_p, tmp_p)# Kelvin

thta = utl.quantity_to_stda_byreference (‘that’, thta_p, tmp)# degC

return thta

thta = mdgcal.potential_temperature (pres, tmp)

Figure 3. Comprehensive diagram containing potential temperature

图3. 含位温的综合图

4.2. 相当位温

Figure 4. Comprehensive diagram with equivalent potential temperature

图4. 含相当位温的综合图

图4所示,为本平台所出的含有相当温度物理量的综合图。相当位温是某一高度的气团下降(或上升)至参照气压值的位置时,经过绝热膨胀(或收缩)以及所含的水汽全部凝结为水滴释出潜热后,所具有的温度 [6] 。从相当温度而言,相当位温也就是指某一高度的气团绝对移动至参照气压值位置时所具有的相当温度。相当位温公式:

θ e = θ exp ( L q c p d T c )

代码实现:

def equivalent_potential_temperature(pressure, temperature, dewpoint):

t = temperature.to(‘kelvin’).magnitude

td = dewpoint.to(‘kelvin’).magnitude

r = saturation_mixing_ratio(pressure, dewpoint).magnitude

e = saturation_vapor_pressure(dewpoint)

t_l = 56 + 1. / (1. / (td - 56) + np.log(t / td) / 800.)

th_l = potential_temperature(pressure - e, temperature) * (t / t_l) ** (0.28 * r)

return th_l * np.exp(r * (1 + 0.448 * r) * (3036. / t_l - 1.78))

4.3. 水汽通量

Figure 5. Comprehensive diagram with water vapor flux

图5. 含水汽通量的综合图

图5所示,为本平台所出的含有水汽通量物理量的综合图。一般说的水汽通量,多指水平水汽通量,它是单位时间内流经与气流方向正交的单位截面积的水汽质量 [6] 。其表达式为:

| F h | = | V | q / g

代码实现:

def cal_ivt_singlelevel (spfh, wsp):

spfh_p = utl.stda_to_quantity (spfh)# g/kg

wsp_p = utl.stda_to_quantity (wsp)# m/s

iq = wsp_p * spfh_p/ (9.8*units(‘m/s**2’))

iq = utl.quantity_to_stda_byreference(‘wvfl’, iq, spfh) # g/(cm * hPa * s)

return iq

4.4. 温度平流

Figure 6. Comprehensive diagram with temperature advection

图6. 含温度平流的综合图

图6所示,为本平台所出的含有温度平流物理量的综合图。温度平流 V T 是指较暖空气向较冷空气方向或者较冷空气向较暖空气方向输送 [6] 。前者称为暖平流,后者称为冷平流。温度平流对我国各地天气变化影响很大,因为冷暖空气活动几天就交替一次,同时它对高空和地面的气温变化均有很大影响。尤其在高空,由于辐射引起的温度变化每天只有1℃左右,而水汽凝结只在有限地区进行,所以温度平流就显得特别重要。对于地面气温,它也是一个决定日平均气温的主要因子。温度平流可由水平温度梯度和风计算得到。其表达式为:

V T = ( u T x + v T y )

代码实现:

def var_advect (var, u, v):

dx, dy = mpcalc.lat_lon_grid_deltas (u[‘lon’].values, u [‘lat’].values)

adv = xr.zeros_like (u).copy ()

for ilvl in var [‘level’].values:

for it in var [‘time’].values:

for idt in var[‘dtime’].values:

for imdl in var[‘member’].values:

u2d = u.sel (level = ilvl, time = it, dtime = idt, member = imdl).squeeze()

v2d = v.sel (level = ilvl, time = it, dtime = idt, member = imdl).squeeze()

var2d = var.sel (level = ilvl, time = it, dtime = idt, member = imdl).squeeze()

u2d = utl.stda_to_quantity (u2d)

v2d = utl.stda_to_quantity (v2d)

var2d = utl.stda_to_quantity (var2d)

adv2d = mpcalc.advection (var2d, u=u2d, v = v2d, dx = dx, dy = dy) adv.loc [dict (level = ilvl, time = it, dtime = idt, member = imdl)] = np.array(adv2d) adv.attrs [‘var_units’] = str (adv2d.units) adv = utl.quantity_to_stda_byreference (var.attrs [‘var_name’] + ‘adv’, adv.values * units (adv.attrs [‘var_units’]), u) return adv

tmpadv = var_advect(tmp, _u, _v)

5. 结语

眉山气象数据可视化诊断分析平台将面向国内天气预报业务和科研应用的通用型天气学诊断分析的python工具包MetDig转换为可共享的Web应用程序,于2023年汛期在眉山市投入运行,目前,该平台已成为眉山市气象台重大天气过程预报必看平台及科研绘图利器,界面直观操作方便,大大提高了气象台的工作效率,深受预报员的好评。今后,根据业务和实际工作的需要,还将进一步的丰富平台内容,不断完善各项功能,为我市重大天气过程预报、复盘、机理研究等应用场景提供诊断分析有力的技术支撑。

参考文献

[1] 李社宏. 大数据时代气象数据分析应用的新趋势[J]. 陕西气象, 2014(2): 41-44.
https://doi.org/10.3969/j.issn.1006-4354.2014.02.016
[2] 唐晓文, 等, 编著. Python语言基础与气象应用[M]. 北京: 气象出版社, 2020.
[3] 王添男, 李新庆, 王艳萍, 等. 基于Python的气象数据可视化方法应用研究[J]. 信息技术与信息化, 2023(7): 32-35.
https://doi.org/10.3969/j.issn.1672-9528.2023.07.008
[4] 程宇轩. 基于Web服务的气象数据可视化研究[D]: [硕士学位论文]. 杭州: 浙江工业大学, 2022.
[5] 张玉芳, 游超, 杨德胜, 等. 四川省级农业气象综合业务平台开发与应用[J]. 现代农业科技, 2018(22): 206-210.
https://doi.org/10.3969/j.issn.1007-5739.2018.22.127
[6] 盛裴轩, 等, 编著. 大气物理学[M]. 北京: 北京大学出版社, 2013.