1. 引言
随着社会经济的发展和人民生活水平的提高,人民对生活气象指数的关注度和需求越来越高,当周围环境的气象因素发生显著变化时,人民的生活活动和身体健康会受到明显的影响,人民需要了解和掌握与自己生活密切相关的各种气象要素的变化,采用对应的措施来合理安排生活和生产以及保护环境,因此,与人民生活息息相关的生活气象指数预报气象服务应运而生 [1] [2] [3]。目前,国内大多数省市气象局都已经开展了各种各样的气象生活指数预报服务,科学指导人们利用气象预报信息,合理地安排生产生活,为提高公众的生活质量和工作效率起到了不可替代的作用。
菏泽市位于山东省西南部,属暖温带季风大陆性季候,四季分明,光热资源丰富。降水多在夏季,水热同季,适合大多数作物生长,但同时也是气象灾害天气多发地区。原来的生活气象指数预报数据获取和制作由预报员主观输入,不能自动制作上传,耗时费力,时效性差。因此,对生活气象指数预报自动制作发布的需求尤为迫切。
Python作为一门解释性面向对象编程语言,开源免费,具有易学、可移植性、可扩展性及含有丰富的第三方库等多种优点,被国内外商业公司采用,在科研领域的应用也越来越广泛。特别是处理大数据时,具有成熟的数据挖掘、机器学习、深度学习等功能模块,使用者社区活跃 [4]。Python支持Matlab,IDL,Fortran等的矩阵数据处理,在气象气候研究领域有诸多应用,如建模、时间序列分析、空气质量分析、卫星数据处理、气象观测、GIS、数据可视化、格点数据处理、模式比较、工作流集成和大数据处理分析等 [5]。
目前,国内大多数地市利用Python,针对生活气象指数预报的研究较少。鉴于此,本文利用Python语言通过CIMISS平台,对指数预报的制作方式优化,实现指数预报的自动化制作。
2. 生活气象指数预报建模
对生活气象指数预报建模,如图1所示,该模型主要包括四部分:获取未来24小时气象要素预报数据模块,指数预报模型模块、各种气象指数计算模块和气象指数产品发布模块。获取未来24小时气象要素预报数据模块:利用Python语言,读取CIMISS的MUSIC接口的数据,主要是获取未来24小时内的最高最低气温、最大最小相对湿度、天气系统及四个时段(早晨、中午下班、下午上班、下午下班)的天空状况、气温、湿度、风向、风速、等预报内容。数据输入到气象指数预报模型,依据气象指数预报模型,计算出各种气象指数的等级,根据气象指数的等级,做出响应的生活提示和建议,最终把自动制作的指数预报产品自动上传到菏泽市气象监测平台,供科技服务中心人员发布至微信、微博、电视台,给公众出行、生活,提供科学的指导。
Figure 1. Modeling of weather index forecast
图1. 气象指数预报的建模
3. CIMISS数据服务接口
全国综合气象信息共享平台CIMISS (China Integrated Meteorological Information Service System)实现了国家级气象数据的整合集约,标志着国家级和省级首次建立了统一的数据环境,作为气象业务服务、管理的核心基础数据支撑平台,CIMISS提供多种实时的历史数据在线存储服务,能使资料入库的时间缩短20%,数据访问效率提高2~5倍 [6]。
MUSIC接口(Meteorological Unified Service Interface Community),基于国省统一数据环境(CIMISS),面向气象业务和科研,提供标准统一、功能丰富、调用高效的数据访问服务和应用编程接口(API),为国、省、地、县各级应用系统提供唯一权威的数据接入服务 [7]。具有强大的服务功能,访问接口可以提供全面的数据获取功能。针对气象应用系统,能提供多种不同的服务方式,主要包括客户端调用服务、web service、REST服务和脚本服务。其中,客户端调用主要面向大数据量的获取,提供高效的数据传输,如数值预报系统。Web Service和REST服务主要针对前台交互应用,提供便捷的编程体验,如气象业务内网。脚本调用主要服务于非编程人员,不用编程即可获取数据,如科研用户 [8]。
MUSIC接口支持跨平台、多语言的开发,web service、REST服务支持所有平台和语言的调用。客户端调用服务和脚本服务,支持主流的操作系统,包括Linux 32/64bit、AIX、HP-UX、Windows 32/64bit等,提供多种语言的客户端开发包,包括C#、Java、C/C++、Fortran、PHP、Python等 [9] [10]。
4. 指数预报优化技术路线
MUSIC接口提供各种各样的数据应用服务,服务方式主要包括客户端调用、web service、REST服务、调用脚本 [10]。针对这几种服务方式,共提供9中标准的调用方法,用户可以根据需求选择合适的接口、资料和返回格式,来获取气象数据。
Requests 是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库。Requests进行HTTP请求逻辑比较清晰,比urllib代码行数减少,更容易理解,能节省大量的时间和大量减轻编写代码人员的工作量,易于代码的测试和维护,下面是采用requests访问需要HTTP认证资源的代码:
import requests
r=requests.get(‘http://api.github.com’,auth=(‘user’,’pass’))
本文使用Python开发工具,通过全国综合气象信息共享平台(CIMISS)的气象数据统一访问接口(MUSIC接口),采用REST服务,按时间段、区站号检索精细化城镇预报要素数据,获取服务产品,依据预报模型和预报方程计算生活气象指数,核心代码如下:
s = requests.session()
#服务地址,将xx.xx.xx.xx替换为实际地址
url = ‘http://xx.xx.xx.xx/cimiss-web/api’
parameters ={
‘userid’:’xxx’,#用户名
‘pwd’:’xxx’,#密码
‘elements’:’,’join([‘Year’,’Mon’,’Day’,’Hour’,’Validtime’,’WIN_D’,’WIN_S’,PRS,’TEM’,’RHU’,’WEP’],#目标元素
‘datacode’=’SEVP_CHN_WEFC_RFFC’
‘TimeRange’ =’[20210701000000,20210702010000]’
‘staids’:’54906’ #站点
‘dataformat’=’text’
}
r = s.get(url,params=parameters)
ifr.json()[‘returncode’]==str(0):
with open(“result.txt”,”w+”) as f:
f.write(r.text)
5. 指数预报制作优化前后两种方式的对比
5.1. 优化前指数预报制作方式
指数预报的数据由预报员主观制作。图2是全省统一的气象指数预报业务系统,点击界面里面的指数计算进入到图3界面即指数预报制作系统,预报员在指数预报制作界面操作,根据实际情况输入未来24小时内最高最低气温、最大最小相对湿度、天气系统及四个时段(早晨、中午下班、下午上班、下午下班)的天空状况、气温、湿度、风向、风速、天气系统等预报内容,点击“计算”,依据预报模型和预报方程计算出各种环境气象指数的等级,并根据预报提出生活建议和提示,将指数预报结果显示在图3的右侧界面,实现生活指数预报产品的输出,最后点击“上网”将指数预报显示在菏泽市气象监测平台。整个过程比较繁琐,花费时间较多,大量的时间,工作量较大。
Figure 2. Meteorological index forecast business system
图2. 气象指数预报业务系统
Figure 3. The production interface of meteorological index forecasting system
图3. 气象指数预报系统制作界面
5.2. 优化后的指数预报制作方式
技术路线如4.2,使用Python的requests包,通过CIMISS平台的MUSIC接口,采用REST服务,从CIMISS系统中检索获取气象要素数据,依据预报模型和预报方程计算各种生活气象指数,指数包含上下班天气、穿衣指数、风寒指数、舒适度指数、晒衣指数、空气污染气象条件指数、疾病气象指数、感冒指数、中暑指数、晒粮指数、大棚蔬菜运输指数、高速公路行车指数和城市火险指数等,实现指数预报的自动制作并于每日16点之前将指数预报自动上传至气象监测平台。实现了指数预报的自动化制作,大量节省了预报员的制作预报时间,为业务工作提供了便捷。图4是指数预报自动制作上传的页面显示。目前,指数预报自动制作上传程序在菏泽市气象台稳定运行。
Figure 4. Index forecast automatic production upload page
图4. 指数预报自动制作上传页面
6. 结论
本文通过Python相对于其它计算机语言的优势,分析Python在气象行业的应用情况。利用Python在CIMISS的MUSIC接口的应用,对气象指数预报的制作进行优化,实现了指数预报的自动化制作及上网。结果表明,优化后的指数预报,在为预报员制作指数预报节省大量的时间和精力的同时,提高了预报的时效性。目前,指数预报自动制作及上传程序,已在菏泽市气象台进行业务运行,运行稳定。