meteva

提供气象产品检验相关python程序


日变化检验

<p>[TOC]</p> <pre><code class="language-python">import meteva.base as meb import meteva.method as mem import meteva.product as mpd import numpy as np import datetime import copy import matplotlib.pyplot as plt import pandas as pd</code></pre> <h1>日变化曲线峰值时间</h1> <p><strong><font face="黑体" color=blue size = 3>diunal_max_hour(sta_ob_and_fos0,method,s = None,g = None,gll = None,group_name_list = None,plot = None, vmax = 24,vmin = 0,bar_width = None,save_path = None,show = False,dpi = 300,title = &quot;&quot;,excel_path = None,</strong>kwargs)</font>**<br /> 根据输入的站点数据和检验方法,选择部分数据,将选择的数据进行进行分组检验,计算各种数值型检验指标(不包括检验中间量)</p> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;"><strong><font face="黑体" color=blue size = 5>sta_ob_and_fos </font></strong></td> <td style="text-align: left;">实况和预报合并对齐后的数据,形式为站点数据格式如上述例子中的sta_all</td> </tr> <tr> <td style="text-align: left;"><strong><font face="黑体" color=blue size = 5>method </font></strong></td> <td style="text-align: left;">method中的各类数值型检验指标的函数名称,例如在本页面中已经import meteva.method as mem ,则ts评分的函数名称可以写为mem.ts ,均方根误差计算函数的名称可以写为 mem.rmse。这些函数选项包括<a href="https://www.showdoc.cc/nmc?page_id=2858658548509727">连续型预报</a>,<a href="https://www.showdoc.cc/nmc?page_id=2860336958932349">二分类预报</a>,<a href="https://www.showdoc.cc/nmc?page_id=2859693269266585">多分类预报</a>,<a href="https://www.showdoc.cc/nmc?page_id=3651805946039771">概率预报</a>,<a href="https://www.showdoc.cc/nmc?page_id=3629735872716279">集合预报</a>等类别中的评分函数</td> </tr> <tr> <td style="text-align: left;"><strong>s</strong></td> <td style="text-align: left;">用于选择数据样本的字典参数,具体的参数说明可参见meb.sele_by_dict中的<a href="https://www.showdoc.cc/meteva?page_id=3975604785954540"><font face="黑体" color=red size=5>s</font></a>参数</td> </tr> <tr> <td style="text-align: left;"><strong>g</strong></td> <td style="text-align: left;">用于分组检验的参数,具体用法可参见meb.group中的<a href="https://www.showdoc.cc/meteva?page_id=4071849185300418"><font face="黑体" color=red size=5>g</font></a>参数</td> </tr> <tr> <td style="text-align: left;"><strong>gll</strong></td> <td style="text-align: left;">用于分组检验的参数,具体用法可参见meb.group中的<a href="https://www.showdoc.cc/meteva?page_id=4071849185300418"><font face="黑体" color=red size=5>gll</font></a>参数</td> </tr> <tr> <td style="text-align: left;"><strong>group_name_list</strong></td> <td style="text-align: left;">分组名称的列表</td> </tr> <tr> <td style="text-align: left;"><strong>plot</strong></td> <td style="text-align: left;">是否需要直接将检验结果绘制图片,该参数为None时不绘制,当参数为&quot;bar&quot;时绘制柱状图,当参数为&quot;plot&quot;时绘制线条图</td> </tr> <tr> <td style="text-align: left;"><strong>vmax</strong></td> <td style="text-align: left;">绘制的检验指标图片中y轴坐标的范围的最大值,如果只有一个子图,vmax 应该为一个实数;当有多个子图时,如果vmax为实数,则每个子图y轴的最大值相同,如果vmax为一个实数列表,则每个子图中y轴最大值根据列表中对应值进行设置</td> </tr> <tr> <td style="text-align: left;"><strong>vmin</strong></td> <td style="text-align: left;">绘制的检验指标图片中y轴坐标的范围的最小值,如果只有一个子图,vmin 应该为一个实数;当有多个子图时,如果vmin为实数,则每个子图y轴的最小值相同,如果vmin为一个实数列表,则每个子图中y轴最小值根据列表中对应值进行设置</td> </tr> <tr> <td style="text-align: left;"><strong>bar_width</strong></td> <td style="text-align: left;">如果plot =&quot;bar&quot;时,通过bar_width可以调节 bar的宽度</td> </tr> <tr> <td style="text-align: left;"><strong>save_path</strong></td> <td style="text-align: left;">该参数不为None时将图片结果输出值save_path</td> </tr> <tr> <td style="text-align: left;"><strong>show</strong></td> <td style="text-align: left;">该参数不为None时在屏幕显示图片,如果生成了图片save_path又为None,则该参数会自动切换为True</td> </tr> <tr> <td style="text-align: left;"><strong>dpi</strong></td> <td style="text-align: left;">绘图的dpi参数,用法同matplotlib中dpi参数</td> </tr> <tr> <td style="text-align: left;"><strong>title</strong></td> <td style="text-align: left;">图片标题的确定分为1、全自动,2、半自动,3手动三种方式。<br>1、全自动:不设置title参数,系统自动采用title的缺省值+自动补齐的其它信息来确定每一幅图的标题;<br> 2、半自动:title 为字符串类型,系统会采用title + 自动补齐的其它信息来确定每一幅图的标题;<br>3、手动:title为一个包含多个字符串的列表,且列表的长度必须和要绘制的图的数量一致,每一幅图会依次采用列表中的字符串作为标题</td> </tr> <tr> <td style="text-align: left;"><strong>excel_path</strong></td> <td style="text-align: left;">该参数不为None时将数值结果输出至路径为excel_path的excel文件</td> </tr> <tr> <td style="text-align: left;">**kwargs</td> <td style="text-align: left;">检验方法 meteva.method 和meteva.base.bar或meteva.base.plot 中的可选参数,具体用法参见下面的示例</td> </tr> <tr> <td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td> <td style="text-align: left;">返回一个元组,其包含2个元素,分别是包含数值检验指标的numpy数组和group_list_list,如果group_by不为None。检验指标数组的shape = (分组数目 , 预报(模式)数目 , 参数列表长度) 的数组经删除size= 1的维度后的结果。其中集合预报情况相对特殊,在sta_ob_and_fos中后面几列数据为不同集合成员的结果,而返回的评分则只返回集合预报整体的评分,而不区分各成员的评分,因此集合预报评分时预报(模式)数目相当于等于1.</td> </tr> </tbody> </table> <p><strong>调用示例:</strong></p> <pre><code class="language-python">sta_all = pd.read_hdf(r"H:\test_data\input\mpd\temp_data.h5") #加载一周的预报数据, result = mpd.score(sta_all,mem.ob_fo_mean,g="ob_hour",plot = "line")</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=a7dcbc3b014b104e4488fd91e1871658" alt="" /></p> <p>通过上述温度日变化曲线可以看出,观测的峰值时间是17时,两个模式预报的峰值时间是14时。若需通过程序从上面的曲线中提取峰值时间,则可以采用如下方式:</p> <pre><code class="language-python">result = mpd.diunal_max_hour(sta_all,mem.ob_fo_mean,plot = "bar",tag = 0)</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=b6fbcb87a1f308c9dec2560d7bb04259" alt="" /></p> <p>在上述统计中,峰值时间的统计时根据7天的温度序列绘制了平均的日变化曲线,再提取其中的峰值,若更详细的峰值时间统计,可以采用分组参数,进行分类统计,如下面的示例中,按观测数据的日期进行分组,可以得到关于每一个观测日期的平均日变化曲线(不同起报时间的平均),再从中统计出各日的峰值时间</p> <pre><code class="language-python">result = mpd.diunal_max_hour(sta_all,mem.ob_fo_mean,plot = "bar",tag = 0,g = "ob_day")</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=19a0a2ad2590a95222edd973e2f1ee36" alt="" /></p> <p>除了可以统计数据值本身的峰值之外,也可以统计检验指标的日变化曲线峰值</p> <pre><code class="language-python">result = mpd.score(sta_all,mem.wrong_rate,grade_list = [2],g="ob_hour",plot = "line") #温度预报错误率(2°阈值)的日变化曲线</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=2830d80687c4463e231e8b2e0a83eaeb" alt="" /></p> <pre><code class="language-python">result = mpd.diunal_max_hour(sta_all,mem.wrong_rate,grade_list = [2],plot = "bar",tag = 0)</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=0cf7362f46677b70b55749f92e65518c" alt="" /></p> <h1>日变化曲线峰值时间的空间分布</h1> <p><strong><font face="黑体" color=blue size = 3>diunal_max_hour_id(sta_ob_and_fos0,method,s = None,plot = &quot;scatter&quot;,save_dir = None,save_path = None,show = False,add_county_line = False,map_extend= None,print_max=0,print_min=0,dpi = 300,title = None,sort_by = None, </strong>kwargs)</font>**<br /> 根据输入的站点数据和检验方法,选择部分数据,将选择的数据进行进行分组检验,计算各种数值型检验指标(不包括检验中间量)</p> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;"><strong><font face="黑体" color=blue size = 5>sta_ob_and_fos </font></strong></td> <td style="text-align: left;">实况和预报合并对齐后的数据,形式为站点数据格式如上述例子中的sta_all</td> </tr> <tr> <td style="text-align: left;"><strong><font face="黑体" color=blue size = 5>method </font></strong></td> <td style="text-align: left;">method中的各类数值型检验指标的函数名称,例如在本页面中已经import meteva.method as mem ,则ts评分的函数名称可以写为mem.ts ,均方根误差计算函数的名称可以写为 mem.rmse。这些函数选项包括<a href="https://www.showdoc.cc/nmc?page_id=2858658548509727">连续型预报</a>,<a href="https://www.showdoc.cc/nmc?page_id=2860336958932349">二分类预报</a>,<a href="https://www.showdoc.cc/nmc?page_id=2859693269266585">多分类预报</a>,<a href="https://www.showdoc.cc/nmc?page_id=3651805946039771">概率预报</a>,<a href="https://www.showdoc.cc/nmc?page_id=3629735872716279">集合预报</a>等类别中的评分函数</td> </tr> <tr> <td style="text-align: left;"><strong>s</strong></td> <td style="text-align: left;">用于选择数据样本的字典参数,具体的参数说明可参见meb.sele_by_dict中的<a href="https://www.showdoc.cc/meteva?page_id=3975604785954540"><font face="黑体" color=red size=5>s</font></a>参数</td> </tr> <tr> <td style="text-align: left;"><strong>g</strong></td> <td style="text-align: left;">用于分组检验的参数,具体用法可参见meb.group中的<a href="https://www.showdoc.cc/meteva?page_id=4071849185300418"><font face="黑体" color=red size=5>g</font></a>参数</td> </tr> <tr> <td style="text-align: left;"><strong>gll</strong></td> <td style="text-align: left;">用于分组检验的参数,具体用法可参见meb.group中的<a href="https://www.showdoc.cc/meteva?page_id=4071849185300418"><font face="黑体" color=red size=5>gll</font></a>参数</td> </tr> <tr> <td style="text-align: left;"><strong>group_name_list</strong></td> <td style="text-align: left;">分组名称的列表</td> </tr> <tr> <td style="text-align: left;"><strong>plot</strong></td> <td style="text-align: left;">是否需要直接将检验结果绘制图片,该参数为None时不绘制,当参数为&quot;scatter&quot;时绘制散点图,当参数为&quot;micaps&quot;时,结果将会被推送到micaps中显示(需相应版本的micaps软件支持,且需要安装Mpython包)</td> </tr> <tr> <td style="text-align: left;"><strong>save_dir</strong></td> <td style="text-align: left;">图片输出文件夹,文件的路径将据此自动生成</td> </tr> <tr> <td style="text-align: left;"><strong>save_path</strong></td> <td style="text-align: left;">指定图片输出的文件路径,当批量生成多张图片时save_path为包含所有图片的输出路径的列表</td> </tr> <tr> <td style="text-align: left;"><strong>show</strong></td> <td style="text-align: left;">该参数不为None时在屏幕显示图片,如果plot不为None,但save_dir和save_path又都为None,则该参数会自动切换为True</td> </tr> <tr> <td style="text-align: left;"><strong>add_county_line</strong></td> <td style="text-align: left;">是否在图中添加县界</td> </tr> <tr> <td style="text-align: left;"><strong>map_extend</strong></td> <td style="text-align: left;">底图的范围,缺省时自动根据站点数据的范围确定底图范围,不缺省时采用[slon,elon,slat,elat] 列表作为参数,也可也接受<a href="https://www.showdoc.cc/meteva?page_id=3975600815874861">网格信息类变量</a>作为地图范围的参数</td> </tr> <tr> <td style="text-align: left;"><strong>print_max</strong></td> <td style="text-align: left;">在屏幕上打印评分指标最大的print_max的站点的信息</td> </tr> <tr> <td style="text-align: left;"><strong>print_min</strong></td> <td style="text-align: left;">在屏幕上打印评分指标最小的print_min的站点的信息</td> </tr> <tr> <td style="text-align: left;"><strong>dpi</strong></td> <td style="text-align: left;">绘图的dpi参数,用法同matplotlib中dpi参数</td> </tr> <tr> <td style="text-align: left;"><strong>title</strong></td> <td style="text-align: left;">图片标题的确定分为1、全自动,2、半自动,3手动三种方式。<br>1、全自动:不设置title参数,系统自动采用title的缺省值+自动补齐的其它信息来确定每一幅图的标题; <br>2、半自动:title 为字符串类型,系统会采用title + 自动补齐的其它信息来确定每一幅图的标题;<br>3、手动:title为一个包含多个字符串的列表,且列表的长度必须和要绘制的图的数量一致,每一幅图会依次采用列表中的字符串作为标题</td> </tr> <tr> <td style="text-align: left;">**kwargs</td> <td style="text-align: left;">检验方法 meteva.method 和meteva.base.scatter_sta中的可选参数,具体用法参见下面的示例</td> </tr> <tr> <td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td> <td style="text-align: left;">返回一个元组,其包含2个元素,result[0]是包含数值检验指标结果。如没有分组检验,也没有分多种等级检验,则result[0]是一个<a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a>形式的数据,其中数据列中包含了检验的结果,不同预报成员(或观测)的检验(或统计)属性位于不同的列;如果有分组检验,或者有多种等级的检验,则result[0]是一个列表,其中包含不同等级或分组的结果,每个结果是一个<a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a>形式的数据;如果既包含分组,又包含多个等级,则result[0]是一个双层列表,外层代表多个分组的集合,内层代表多个等级的集合。result[1]是实际的分组方式</td> </tr> </tbody> </table> <p><strong>调用示例:</strong></p> <pre><code class="language-python">result = mpd.diunal_max_hour_id(sta_all,mem.me,subplot = "member",ncol = 2,sup_title = "模式预报偏差ME峰值时间的分布") </code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=6fa0df38d5cc3c21f9b36828282c57c9" alt="" /></p> <p>在该示例中,湖北东部地区傍晚的偏差(ME)最大,而湖北西部清晨的偏差(ME)最大</p>

页面列表

ITEM_HTML