基于Python 语言的“天擎”数据应用可视化与历史数据调用

2024-01-08 11:50王昆鹏陈长胜
气象灾害防御 2023年4期
关键词:参数信息松原市历史数据

王昆鹏 吕 雪 陈长胜 林 涛

(1.松原市气象局,吉林松原 138000;2.前郭县气象局,吉林松原 138000;3.吉林省气象台,吉林长春 130062;4.长白山气象与气候变化吉林省重点实验室,吉林长春 130062;5.长白山池北区气象局,吉林安图 133613)

1 引言

2020 年以来,中国气象局明确要求构建以气象大数据云平台为“云”、气象业务系统为“端”的“云+端” 气象业务技术体制。 气象大数据云平台(CMADaas,以下简称天擎平台)是全国气象综合信息共享系统(CIMISS)的功能升级和服务扩充版本,不仅全面继承了CIMISS 的数据种类和接口服务标准,还在数据质量、资料存储时间序列、数据处理时效等方面有显著的提升[1]。天擎平台广泛汇聚国内外气象数据、行业数据、经济社会数据、社会观测数据等,数据更加完整、权威。

服务接口(Service Interface)是一个自动化系统与另一个自动化系统或人之间的共享边界[2-4],天擎平台数据服务沿用并优化了CIMISS 气象服务数据统一服务接口, 为本地应用开发提供了多样化的可能。 丰富的服务接口使得天擎平台变得更加灵活、 安全, 体现出以下几个方面的突出特点:增加了安全认证模块,提高了数据服务的安全性;采用负载均衡集群和分布式缓存技术,服务性能显著提升; 提供了更丰富的数据序列化输出格式与多种可选数据返回格式; 实时业务具有优先执行的权限,强化系统接口服务资源占用管控;接口种类全面丰富, 目前平台包含气象业务数据共计14 类505 种, 发布398 种接口资料, 提供了309 个接口,其中基础资料接口308 个。

本文基于Python3(3.7 版本)编程语言环境,探讨天擎平台在松原市的气象信息监测、 服务中的应用,供其他业务和研究人员参考。

2 天擎平台数据服务接口调用

天擎平台数据服务提供了丰富的服务接口,进而为本地应用开发提供了多样化的可能。 按照不同的编码形式与不用的服务接口, 可以为不同需求的用户提供更加具有针对性的气象特色服务。

目前天擎默认提供的签名认证为调用基于一系列SDK 开发包,在编写调用代码时需首先引用(import)cma.music.DataQueryClient 类、生成client客户端对象,并根据需要初始化各种客户端参数,然后再使用该对象的特定方法、 指明方法需要调用的接口名称,最后执行方法获取返回结果数据。其过程较为复杂繁琐, 对于缺乏编程能力的基层业务人员来说,在使用过程中存在一定的困难。

使用Python3 部分函数的接口调用方案,可以较为轻松地解决天擎平台接口调用问题。 其调用过程主要分为2 步: 第一步需要完成天擎平台服务器所需要的加密数字签名(getSign)和组装加密检索URL(createApiUrl);第二步则需要完成用户认证和调用数据的具体参数信息。

2.1 调用过程第一步

Python3 不需要安装其他第三方模块, 引用(import)uuid、hashlib 和time 三个内置的标准模块便可以完成天擎平台服务器所需要的加密数字签名(getSign)和组装加密检索URL(createApiUrl),部分关键代码如下:

timestamp = str(int(round(time.time() * 1000)))#生成查询时刻的时间戳

nonce = str(uuid.uuid1()) # 生成本次查询对应的本机随机数

sign = hashlib.md5(paramString.encode(encoding='UTF-8')).hexdigest().upper() # 调用数字签名函数,生成查询对应的AK/SK 加密认证数字

TqUrl += ('×tamp =' + timestamp +'&nonce=' + nonce + '&sign=' + sign) # 将接口基本查询信息(TqUrl)拼接上时间戳、随机数、加密认证签名后形成完整的查询链接

return TqUrl

2.2 调用过程第二步

通过吉林省天擎平台(http://10.92.90.120:8088/cmadaas)资源共享中的接口页面(图1),可以获取接口ID、接口名称、接口分类、调用方式及方法以及接口参数等代码(表1),在“接口测试工具”页面可以进行调试。 需要特别注意的是:天擎平台服务器内部数据是按照世界时的时间格式进行编码的, 所以在设定时间段时需要考虑北京时与世界时的程序转换问题, 可以通过Datetime 函数进行转换。

图1 吉林省天擎平台资源共享中的接口页面信息

表1 吉林省天擎平台服务器相关参数信息与注释

填写好用户认证和调用数据的具体参数信息,定义好相关函数后,与第一步相结合,进而可以得到调用数据的完整地址。 然后可以通过Python3 内部函数DataFrame 模块将调用的数据保存至本地[5-8]。

3 天擎平台数据在松原市的应用

数据保存到本地以后,根据不同的需求,可以进行不同展示。下面以“松原市降水分布图”和“松原市历史气象数据统计和对比分析”2 个应用程序为例,介绍在Python 开发中天擎数据的数据可视化及数据展示的方式方法。

3.1 天擎平台数据的可视化功能

在前文工作基础上, 当前已经可以将天擎平台的某一时段数据保存到本地, 在对数据进行处理计算时, 主要使用Python 的Numpy 库,Numpy库可以完成数据的算数运算、 逻辑运算以及统计运算。 在进行数据可视化时,主要使用Python 的Matplotlib 库与Cartopy 包,Matplotlib 库是Python的一个2D 图形库,能够生成各种格式的图形(如折线图、 散点图、 直方图等);Cartopy 是一个Python 包,用于地理空间数据处理,以便生成地图和其他地理空间数据[9-12]。

下面以“松原市降水分布图” 应用软件绘制“松原市2022 年6 月27 日22—23 时降水分布图”来展示Python 语言的天擎平台数据可视化功能。 实现该部分功能所对应天擎平台的参数信息见表2。

表2 绘制降水分布图所需的天擎平台参数信息

调取2022 年6 月27 日22 时—28 日20 时松原市各观测站(包括区域站)24 h 降水数据,松原市内165 个观测站, 调用得到233 844 个数据行。 通过Numpy、Pandas 库,应用dict、max、len 等函数, 可以将这164 个观测站的233 844 个数据行按照一个站点一个数据行的处理格式, 归纳成164 个数据行。 最后,通过max()、mean()等函数计算出全市最大、 平均降水量, 利用range、len、argpartition 等函数完成对松原市下辖的三县一区一市的降水情况处理与计算。部分关键代码如下:

Cf=dict(Counter(station_ID)) # 统计重复次数

Xh=(max(Cf.values())) # 统计循环次数

station_ID_No=[key for key,value in Cf.items()if value > 1] #统计站号

lists=[[] for j in range(len(station_ID_No))] #结果保存到新列表

进而得出松原市全市及各县(市、区)2022 年6 月27 日20 时—28 日20 时的降水情况。最终通过Matplotlib、Cartopy 等库包, 完成松原市降水分布图的绘制(图2)。

图2 松原市2022 年6 月27 日20 时—28 日20 时降水分布

3.2 天擎平台数据的历史数据调用功能

通过前文的介绍, 当前已经可以将天擎平台的某一时段数据保存到本地, 并通过Numpy 库可以完成数据的算数运算、逻辑运算以及统计运算。下面通过“松原市历史气象数据统计和对比分析”应用软件对松原市2022 年5 月1—31 日累积降水、气温、极端大风、日照等气象常规要素进行历史比对,展示Python 语言的天擎平台数据功能。实现该部分功能所对应天擎平台的参数信息见表3。

表3 天擎平台数据的历史数据调用所需的参数信息

通过天擎平台可以获取到历史同期的相关数据, 其数据的基础处理方式与前面的处理逐分钟数据的方式基本一致, 只是在获取服务器信息配置上略有不同,需要将“timeRange”时间范围选项修改为:“起始年:‘minYear’”“结束年:‘maxYear’”“起始月份:‘minMD’”“结束月份:‘maxMD’”。 因为中国气象局下发的统计历史数据使用的标准为1991—2020 年的历史数据,为了控制账号的使用频率,在统计历史数据时,可以一次性获取1991年以来的全部数据,再通过isin 函数,去除掉不需要进行统计的年份数据,便可完成1991—2020 年30 a 的数据统计。通过灵活运用if 循环语句,完成本年度与历史数据的比对工作。 关键代码如下:

for i in range(2021,int(maxYear)+1): df_1991-2020=df_1991-2020 [-df_1991-2020 ['Year'].isin([format(i)])]# 对不需要进行计算统计的年份数据进行剔除

df_nj=df_1991-2020 [df_1991-2020 ['Station_Name'].isin([' 宁江'])].reset_index(drop=True)# 对各县区的数据进行单独提取, 用以计算各县区的信息

应用上述代码, 对松原市2022 年5 月的降水、平均气温、极端气温、日照、大风等要素进行统计分析,结果如表4 所示。

表4 2022 年5 月松原市气象数据统计及与历史同期对比分析结果

4 程序封装

为了便于程序在其他计算机中脱离Python环境独立运行, 可以使用PyInstaller 软件包完成对Python 脚本的封装工作。 它可以通过读取已经编写好的Python 脚本,分析代码执行需要的模块和库, 然后将其依赖库一同打包转成可以直接脱离于Python 环境独立运行的程序。

利用dos 命令进入需要打包的程序文件夹下,通过代码“pyinstaller -F(-D) -i ***.ico ***.py”语句完成python 脚本的封装。 其中“-F”为将Python 脚本及所依赖的各种环境生成一个exe 格式文件,“-D”为创建一个目录,exe 格式文件仅为Python 脚本执行文件, 运行依赖环境以应用程序扩展的文件格式存放在目录内;“-i” 为设置程序图标,需为ico 格式图片。

简单来说就是可以通过PyInstaller 软件包,将Python 脚本进行封装,进而获得一个可以在其他计算机中独立的、完整的、可执行的软件。

5 结语

Python 语言简洁、开源,具有强大数据处理及可视化功能。 本文基于气象大数据云平台天擎业务运行以来的读取、调用、使用经验,使用Python3部分函数的接口调用方案, 解决天擎平台接口调用问题,方便业务人员进行业务应用。

(1)利用Python 语言可以完成气象大数据云平台天擎数据的获取、处理、统计分析,提高运行速度,加快工作效率。

(2)以“松原市降水分布图”和“松原市历史气象数据统计和对比分析”2 个执行程序的开发、编译及应用为例,基于Python 语言,运用JSON 返回数据的方式提高云平台要素信息的提取与处理效率,完成天擎数据的可视化与历史数据调用等。

(3)基于Python 语言在气象业务工作中的应用,仍处于不断改进阶段,部分功能尚有待完善。

猜你喜欢
参数信息松原市历史数据
基于BIM技术的建筑构件参数信息交互研究
基于SolidWorks和Excel二次开发零部件参数化设计研究
基于设备PF性能曲线和设备历史数据实现CBM的一个应用模型探讨
基于故障历史数据和BP神经网络的接地选线方案研究
BIM参数信息在管网运维平台上的应用研究
模拟输注系统的设计与应用
基于Hadoop技术实现银行历史数据线上化研究
用好细节材料 提高课堂实效
松原市备春耕坚持高起点高标准
向大作家学写作秘诀
——读《曹文轩教你写作》有感