MICAPS第四类数据格式Python处理库的实现和应用

2018-01-08 02:52:08袁鹏艳段中夏
河南科技 2017年23期
关键词:预报员数据格式格点

朱 枫 袁鹏艳 段中夏

(1.新乡市气象局,河南 新乡 453003;2.延津县气象局,河南 延津 453200)

MICAPS第四类数据格式Python处理库的实现和应用

朱 枫1袁鹏艳2段中夏1

(1.新乡市气象局,河南 新乡 453003;2.延津县气象局,河南 延津 453200)

本文基于Python语言设计和实现了MICAPS第四类数据格式的通用接口库Diamond4,包含数据读写,格点到站点的插值,数据格式转换等功能。Diamond4库简洁高效,可有效支持对MICAPS数据的本地开发。最后展示了Diamond4库结合其他Python第三方库在新乡市气象台本地业务应用的两个实例:结合Bokeh库的多模式站点两米温度的自动提取和结合Arcpy库的多模式降水对比邮票图的自动生成。

MICAPS;第四类数据;Diamond4库

分气象信息综合分析和处理系统MICAPS(Meteo⁃rology Information Comprehensive Analysis Process Sys⁃tem)是我国气象业务的基础软件[1],其中第四类数据是MICAPS系统自定义的格点数据格式。国家气象信息中心通过CMACast卫星系统下发的多种气象实况数据和数值预报模式结果通常最终被解码成第四类格式,供MICAPS系统可视化呈现或处理。因此,基层预报员接触最多的气象数据通常以MICAPS第四类格式呈现。这种格式都是单个的文本文件,相对于Grib1、Grib2、HDF或者NetCDF等高级格式要简单明了许多。鉴于MICAPS第四类数据使用的简单性和普遍性,如何开发一个通用的、简洁高效的针对MICAPS第四类数据格式的程序接口库,以便基层预报员在这类格式的数据基础上定制开发本地化应用,是本文要解决的主要问题。

1 设计背景和思路

Python是一门简洁且功能强大的开源编程语言,因其活跃的社区支持,涌现了大量优秀的第三方库,涵盖了网络编程、数据库、嵌入式、游戏等多个领域[2],尤其在科学计算和机器学习领域,Python变得越来越受欢迎。此外,Python语言还被应用于气象领域,主要用于开发、绘图[3]。Python简明易学,且易快速上手。考虑到需要开发的程序接口库主要供基层预报员使用,因此,选择Python作为开发语言不仅可以减少开发成本,也能减少学习和使用的难度。本文设计开发的库是纯Python库,除Py⁃thon内置的库外,不依赖其他第三方库,包括在科学计算领域使用较多的Numpy、Pandas等,以保证其简洁易用。因为MICAPS数据格式的头文件大都以英文Diamond开头,因此将处理MICAPS第四类数据格式的库命名为Dia⁃mond4。

MICAPS第四类数据具有统一的定义方式(具体定义说明请参见官方论坛网站或MICAPS自带的帮助文档),每个第四类数据文件的文件头都对特定的属性进行了明确规定,各个属性以空格分割,只是具体数据不一样。因此,可以将MICAPS第四类数据看做一个类,将一个MI⁃CAPS第四类文件视为一个对象。很自然地,采用面向对象的设计方式,更容易保障代码的结构性和逻辑性。Dia⁃mond4类根据MICAPS第四类数据的格式,定义了相应属性,每个属性作为对象的一个字段,实际格点数据也是对象的一个字段,以一维列表的方式保存数据部分。格点数据是二维数据,用一维列表保存,是为了减少内存消耗,为了更容易获取格点值,可以定义取值方法Value,根据行列号直接获取对应值,从而在逻辑上屏蔽数据实际存储的组织方式。在此基础上,可以很方便地再设计定义其他方法。

2 Diamond4库的主要实现

下面的代码给出了Diamond4实现的主要部分,即初始化方法和取值方法。Diamond4类库的具体实现代码托管在GitHub上,网址为https://github.com/LuckyBoy314/MeteoPlot/blob/master/pyMicaps.py。

class Diamond4(object):

diamond=4

#构造函数

def__init__(self,file_path):

with open(file_path,'r')as f:

#读入原始数据

data_raw= [word for line in f.readlines()if line[:-1].strip()for word in

line.split()]

#定义相关属性

self.doc=data_raw[2].decode('gbk') # 说明字符串

(self.size_lon, #经度(x方向)格距,一般为正

self.size_lat,#纬度(y方向)格距,有正负号

self.lon_start,#起始经度

self.lon_end, #终止经度

self.lat_start,#起始纬度

self.lat_end)=(float(i)for i in data_raw[9:15]) #终止纬度

(self.cols,#纬向格点数目,即列数

self.rows)=(int(i)for i in data_raw[15:17]) # 经向格点数目,即行数

#日期时间处理

(month,day,hour,interval)=data_raw[4:8]

year=data_raw[3]

if len(year)==2:

year=('20'+year)if int(year)<49 else('19'+year)

elif len(year)==4:

pass

else:

raise Exception('year parameter error!')

#注意start_time和valid_time没有统一规定,要看具体情况

self.start_time=datetime.datetime(int(year),int(month),int(day),int(hour))

self.valid_time=self.start_time+datetime.timedelta(hours=int(interval))

#数据部分,以一维数组表示

self.data= [float(i)for i in data_raw[22:]]

del data_raw

def value(self,row,col):

'''根据行列号获取格点值,将格点数据看成self.cols*self.nums_lat的二维数组,返回第row行,第col列的值,row和col必须为整数,从0开始计数,坐标原点在左上角'''

if row <0 or row >=self.rows or col<0 or col>=self.cols:

raise Exception('out of data spatial range')

return self.data[row*self.cols+col]

3 Diamond4库在本地业务中的应用

开发Diamond4的主要目的就是方便有开发经验的基层预报员直接在MICAPS数据基础上进行开发。现在将展示两个应用了Diamond4库的两个实例,分别是多模式2m站点温度的提取和多模式降水对比邮票图绘制,这两个应用每天定期自动化运行,已经在新乡市气象台的实际业务中使用,并显著提升了预报员的工作效率。

3.1 多模式2m站点温度的自动提取

Diamond4在多模式2m站点温度的自动提取中的应用主要是利用Diamond4类的IDW方法,将格点数据插值到特定站点。IDW的以站点位置经纬度为输入参数,可以是多个站点,且必须以[(lon1,lat1),(lon2,lat2),…(lonN,latN)]形式的一系列站点位置,经纬度必须是弧度形式,返回值是对应各个站点值的列表。具体是利用反距离加权的方法,根据站点距离周围四个格点值的距离进行加权计算,各个点的权重与距离的平方成反比(平方是IDW方法的默认值,也可以用其他幂次)。

Bokeh库[4]是基于网页绘图的Python第三方库,其绘制的图形具有可交互的特征,不仅美观,而且具有很大的灵活性。Bokeh的具体使用不在本文的讨论范围内,总之Bokeh绘图使用的数据是通过Diamond4库提取。具体绘图代码托管在GitHub上(参见https://github.com/Lucky⁃Boy314/MeteoPlot/blob/master/TempPlot.py)。

图1展示了2017年8月28日08:00起报的多家数值模式2m温度在新乡各个国家站点上的提取结果,可以直观地显示温度预报的时间变化特征。每个标签显示一种模式,切换标签可以在不同模式间作对比分析。图中显示的是欧洲数值预报中心240h的预报结果,每一个MI⁃CAPS第四类文件对应一个时次,即一个Diamond4对象,利用Diamond4类的IDW方法提取站点值交由Bokeh库绘制到网页上。绘制结果是可交互的动态网页,可自用放大缩小,鼠标悬停在圆圈点上即会显示其代表的温度、站点名和时间。

图1 2017年8月28日08:00起报的多模式站点2m温度提取在新乡的应用

3.2 多模式降水对比邮票图的绘制

Diamond4在多模式降水对比邮票图的绘制中的应用主要是利用Diamond4的convert_to_EsriAscii方法简洁高效地将MICAPS第四类的格点数据转换为ArcGIS可以识别的栅格数据,然后交由ArcGIS绘制成图。邮票图的框架和色标通过ArcGIS的ArcMap软件预先设定好,产生新的模式结果后,先由Diamond4转换数据格式,然后通过ESRI公司提供的Arcpy库,刷新绘图并自动导出图片。具体绘图代码也托管在GitHub上(参见https://github.com/LuckyBoy314/MeteoPlot/blob/master/modelRainPlot.py)。

图2展示了2017年8月23日20:00起报的多家数值模式120h内新乡周边地区的降水预报结果,每行表示一种数值模式,每列表示12小时内的分段降水量。通常情况下,预报员参考数值模式要通过MICAPS平台或者中央台、省局的网络预报平台来查阅,需要逐一模式逐时次翻阅,耗时、繁琐,且不利于直观地对比各家模式的结果,此外这些平台以全国或全省为关注点,本地的分辨率反而不清晰。该应用可以帮助预报员以新乡本地为中心,一目了然地对比参考多家模式的预报结果,从而显著增强参考数值模式结果的针对性和直观性,大大提高工作效率。

图2 2017年8月23日20:00起报的多模式降水预报对比邮票图在新乡的应用(突出显示的区域为新乡)

4 结语

本文介绍了一个基于Python语言编写的处理MI⁃CAPS第四类数据的通用库Diamond4,MICAPS第四类数据除了直接在MICAPS平台中使用外,还可以基于Dia⁃mond4库进行更加灵活的自主开发,这对在MICAPS数据基础上开发本地应用的基层预报员尤其重要。本文简要分析了使用Diamond4库结合其他第三方python库开发的两个本地应用:新乡市气象台的多模式2m站点温度自动提取和多模式降水对比邮票图的自动生成。通过分析可知,Diamond4库简洁易用,可以有效地结合第三方库开发本地应用。Diamond4库的功能还有待进一步扩展和完善,如增加计算、数据剪裁、统计分析、直接绘图等功能。今后将继续维护开发Diamond4库,使之更加完善。

[1]李月安,曹莉,高嵩,等.MICAPS预报业务平台现状与发展[J].气象,2010(7):50-55.

[2]Chun Wesley J.Python核心编程[M].宋广吉,译.北京:人民邮电出版社,2008.

[3]Lin J W.A Hands-On Introduction to Using Python in the Atmospheric and Oceanic Sciences[EB/OL].[2017-11-01].http://www.johnny-lin.com/pyintro/ed01/free_pdfs/ch10.pdf.

[4]Bokeh Development Team.Bokeh,a Python library for interactive visualization[EB/OL].[2017-11-01].http://flow⁃ingdata.com/2013/11/22/bokeh-a-python-library-for-interactivevisualization/.

The Implementation and Application of a Python Library for MICAPS Fourth Format Data

Zhu Feng1Yuan Pengyan2Duan Zhongxia1
(1.Xinxiang Meteorological Bureau,Xinxiang Henan 453003;2.Yanjin Meteorological Bureau,Yanjin Henan 453200)

We designed and implemented a Python library named Diamond4 for processing the MICAPS fourth format data.The library consists the utilities of data writing and reading,grid-to-station data extrac⁃tion,format conversion et al.which will efficiently support the native development on the MICAPS data.The last showed Diamond4 library combined with other Python third party libraries in two instances of lo⁃cal meteorological station business application in Xinxiang city:Combining site of multi mode Bokeh base two meters temperature automatic extraction and combination of Arcpy library multi mode contrast stamp for automatic generation of precipitation.

MICAPS;fourth format data;Diamod4 library

P451

A

1003-5168(2017)12-0152-03

2017-11-01

朱枫(1988-),男,硕士,助理工程师,研究方向:短期短时天气预报预警。

猜你喜欢
预报员数据格式格点
带有超二次位势无限格点上的基态行波解
江西省天气预报员现状调查分析与对策建议
一种电离层TEC格点预测模型
预报员培训的“复盘”方法
带可加噪声的非自治随机Boussinesq格点方程的随机吸引子
在智能交通系统中PLC数据格式转换方法的研究
电子测试(2018年1期)2018-04-18 11:52:49
航空气象预报人为因素的分析初探
科技与创新(2017年3期)2017-03-17 23:53:02
格点和面积
黔东南州预报员队伍建设的实践与思考
论子函数在C语言数据格式输出中的应用