前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【meteva】如何优雅使用观测与预报绘制散点回归和RMSE

【meteva】如何优雅使用观测与预报绘制散点回归和RMSE

作者头像
用户11172986
发布2024-06-20 19:18:58
980
发布2024-06-20 19:18:58
举报
文章被收录于专栏:气python风雨气python风雨

前言

气象上如何去检验观测与预报的关系以及预报效果一直是难题 还好检验库meteva给出一套标准的流程,对于检验小白非常友好

以下内容会讲解

  1. 如何生成一个符合meteva格式的测试数据
  2. 如何合并观测与自行生成的测试数据
  3. 如何基于以上合并的数据绘制回归散点图
  4. 如何基于以上合并的数据绘制RMSE分布

温馨提示

由于可视化代码过长隐藏,可点击以下链接运行Fork查看

【meteva】如何优雅使用观测与预报绘制散点回归和RMSE

🔜🔜若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可

导入库与读取观测数据

In [1]:

代码语言:javascript
复制
代码语言:javascript
复制
import meteva.base as meb
import meteva.method as mem
import meteva.product as mpd
import pandas as pd
代码语言:javascript
复制
代码语言:javascript
复制

In [2]:

代码语言:javascript
复制
代码语言:javascript
复制
filename = "/home/mw/input/meteva7050/nmc_met_tutorial-master/nmc_met_tutorial-master/meteva/input/meb/m3.000"  # 替换为你的micaps文件路径
sta = meb.read_stadata_from_micaps3(filename)
meb.set_stadata_names(sta,["ob"])
sta.head()

In [37]:

代码语言:javascript
复制
代码语言:javascript
复制
sta.describe()
代码语言:javascript
复制

Out[37]:

存在异常值,进行排除 设置观测值大于100的站点数据为0

In [38]:

代码语言:javascript
复制
代码语言:javascript
复制
sta['ob'][sta['ob'] > 100] = 0
代码语言:javascript
复制

In [39]:

代码语言:javascript
复制
代码语言:javascript
复制
sta.describe()
代码语言:javascript
复制

Out[39]:

生成随机数据,命名为EC

In [45]:

代码语言:javascript
复制
代码语言:javascript
复制
import numpy as np
ec = sta.copy()
# 生成随机数据
ec['ob']=sta['ob']**2/25
# 设置数据名称
meb.set_stadata_names(ec,["ec"])
# meteva设置时间与高度的语句,因为是直接复制原数据所以注释了
#meb.set_stadata_coords(sta_ob,level = 0,time = datetime.datetime(2018,7,3,9,0),dtime = 0)
ec.head()
代码语言:javascript
复制
代码语言:javascript
复制

Out[45]:

这里为了方便直接随机生成,实际使用时候可以读取ec数据然后插值到站点,具体过程可以看meteva,这可能是气象萌新最需要的python库

合并观测数据和随机生成的EC数据

In [46]:

代码语言:javascript
复制
代码语言:javascript
复制
sta_merge = meb.combine_on_obTime_id(sta,ec)
sta_merge
代码语言:javascript
复制

Out[46]:

散点回归图

In [55]:

代码语言:javascript
复制
代码语言:javascript
复制
ob = sta_merge["ob"].values
fo = sta_merge["ec"].values
代码语言:javascript
复制

In [56]:

代码语言:javascript
复制
代码语言:javascript
复制
help(mem.scatter_regress)
代码语言:javascript
复制
代码语言:javascript
复制
Help on function scatter_regress in module meteva.method.continuous.plot:

scatter_regress(ob, fo, member_list=None, rtype='linear', vmax=None, vmin=None, ncol=None, save_path=None, show=False, dpi=300, title='散点回归图', sup_fontsize=10, width=None, height=None, ylabel='观测')
    绘制观测-预报散点图和线性回归曲线
    :param Ob: 实况数据  任意维numpy数组
    :param Fo: 预测数据 任意维numpy数组,Fo.shape 和Ob.shape一致
    :param save_path:图片保存路径,缺省时不输出图片,而是以默认绘图窗口形式展示
    :return:图片,包含散点图和线性回归图,横坐标为观测值,纵坐标为预报值,横坐标很纵轴标取值范围自动设为一致,在图形中间添加了完美预报的参考线。

In [57]:

代码语言:javascript
复制
代码语言:javascript
复制
mem.scatter_regress(ob,fo,show = True,dpi = 300)
代码语言:javascript
复制

In [63]:

代码语言:javascript
复制
代码语言:javascript
复制
help(mpd.plot)
代码语言:javascript
复制
代码语言:javascript
复制
Help on function plot in module meteva.product.program.plot:

plot(sta_ob_and_fos0, method, s=None, g=None, gll=None, save_dir=None, save_path=None, title=None, **kwargs)

In [58]:

代码语言:javascript
复制
代码语言:javascript
复制
mpd.plot(sta_merge,mem.scatter_regress,show = True,dpi = 600)
代码语言:javascript
复制

绘制OB和EC的RMSE分布

In [60]:

代码语言:javascript
复制
代码语言:javascript
复制
help(mpd.rmse_scatter)
代码语言:javascript
复制
代码语言:javascript
复制
Help on function rmse_scatter in module meteva.product.program.error_ana_scatter:

rmse_scatter(sta_ob_and_fos, s=None, g=None, gll=None, group_name_list=None, save_dir=None, save_path=None, show=False, print_max=1, threshold=0, add_county_line=False, map_extend=None, dpi=300, title='均方根误差站点分布', sup_fontsize=10, height=None, width=None)

In [62]:

代码语言:javascript
复制
代码语言:javascript
复制
map_extend=[110,120,20,30]
mpd.rmse_scatter(sta_merge,show = True,map_extend=map_extend)
代码语言:javascript
复制
代码语言:javascript
复制
取值最大的1个站点:
id:51573   lon:89.23  lat:42.95 value:11.72760000000001

Out[62]:

小结

可以看出meteva库无论是绘图还是计算都十分便利,代码量非常少

当然这套检验工具要使用起来还须对pandas库有小小的基础 作图和计算都十分便利,非常推荐大家用起来

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气python风雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档