meteva

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


置信度检验

<p>[TOC]</p> <pre><code class="language-python">%matplotlib inline %load_ext autoreload %autoreload 2 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> <pre><code class="language-python">sta_all = pd.read_hdf(r&amp;quot;H:\test_data\input\mpd\Example_data\sta_all.h5&amp;quot;) print(sta_all)</code></pre> <pre><code> level time dtime id lon lat OBS ECMWF \ 0 0.0 2019-07-01 08:00:00 0 54398 116.6 40.1 25.8 24.724 1 0.0 2019-07-01 08:00:00 0 54410 116.1 40.6 18.9 20.284 5 0.0 2019-07-01 08:00:00 0 54412 116.6 40.7 19.7 19.820 2 0.0 2019-07-01 08:00:00 0 54416 116.9 40.4 25.1 22.864 3 0.0 2019-07-01 08:00:00 0 54419 116.6 40.4 27.5 21.796 ... ... ... ... ... ... ... ... ... 9187 0.0 2019-07-31 20:00:00 72 54410 116.1 40.6 18.8 21.556 9191 0.0 2019-07-31 20:00:00 72 54412 116.6 40.7 25.4 21.640 9188 0.0 2019-07-31 20:00:00 72 54416 116.9 40.4 26.7 24.960 9189 0.0 2019-07-31 20:00:00 72 54419 116.6 40.4 27.0 22.920 9190 0.0 2019-07-31 20:00:00 72 54499 116.2 40.2 29.3 23.056 GRAPES 0 23.844 1 21.740 5 21.900 2 22.704 3 23.136 ... ... 9187 19.968 9191 21.232 9188 23.404 9189 23.056 9190 22.568 [9192 rows x 9 columns]</code></pre> <h1>相对技巧置信度</h1> <p>&lt;font face=&quot;黑体&quot; color=blue size = 3&gt;score_compare(sta_ob_and_fos0,method,grade_list = None,compare = &quot;&gt;=&quot;,s = None, B = 10000 ,c = 0.95 ,ncol = 1 ,title_list = None ,vmax = None ,vmin = None ,vmax_delta = None, sparsify_xticks = 1, sup_fontsize = 12 ,xlabel =None ,ylabel = &quot;Score&quot; , ylabel_delta = &quot;Score Delta&quot; ,width = 10,height = 6, dpi=300 ,legend_loc = &quot;upper center&quot; ,wspace = None, hspace = None,save_path = None,show =False)&lt;/font&gt; </p> <p>采用如下方法绘制相对技巧置信图: </p> <ol> <li>根据输入的站点数据和检验方法,选择部分数据,将选择的数据进行按照时效进行分组,计算的不同时效的评分。</li> <li>选取1个时效的数据,计算不同起报时刻(例如365天)的评分,得到2×365个评分</li> <li>用第2个模式的评分减第1个模式的平方,得到365个相当技巧</li> <li>采用又放回重采样方法从365个相当技巧值选取365个值(部分重复),取平均值</li> <li>重复B次(例如10000)步骤4,得到B个平均相当技巧</li> <li>将步骤5的结果从大到小排序,选取排序在前a%和后a%的位置的两个取值lower 和higher, c = 1-2*a</li> <li>取(higher - lower) 作为置信区间宽度。</li> <li>遍历不同时效,重复步骤2-7</li> <li>绘图检验中间量)</li> </ol> <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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;sta_ob_a0nd_fos &lt;/font&gt;</strong></td> <td style="text-align: left;">实况和预报合并对齐后的数据,形式为站点数据格式如上述例子中的sta_all</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;method &lt;/font&gt;</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>grade_list</strong></td> <td style="text-align: left;">该参数用于对连续变量做多种等级阈值的二分类检验,其中包含多个事件是否记录为发生的判断阈值,记其中一个阈值为g,则判断为事件发生的条件是要素值 &gt;= g。该参数缺省时列表中只包含一个取值为1e-30的阈值,由于气象要素精度通常比该缺省值大,因此它相当于将 &gt;0 作为事件发生的判据</td> </tr> <tr> <td style="text-align: left;"><strong>compare</strong></td> <td style="text-align: left;">比较方法,可选项包括&quot;&gt;=&quot;,&quot;&gt;&quot;,&quot;&lt;=&quot;,&quot;&lt;&quot;, 是要素原始值和阈值对比的方法,默认方法为&quot;&gt;=&quot;,即原始值大于等于阈值记为1,否则记为0,compare 为&quot;&lt;=&quot;时,原始值小于等于阈值的站点记为1, 这在基于能见度标记大雾事件、低温事件或降温事件等场景中可以用到</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">&lt;font face=&quot;黑体&quot; color=red size=5&gt;s&lt;/font&gt;</a>参数</td> </tr> <tr> <td style="text-align: left;"><strong>B</strong></td> <td style="text-align: left;">bootstrap算法重采样的次数线</td> </tr> <tr> <td style="text-align: left;"><strong>c</strong></td> <td style="text-align: left;">置信度阈值</td> </tr> <tr> <td style="text-align: left;"><strong>ncol</strong></td> <td style="text-align: left;">当包含多个等级时,子图的列数</td> </tr> <tr> <td style="text-align: left;"><strong>title_list</strong></td> <td style="text-align: left;">每个子图的标题</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>vmax_delta</strong></td> <td style="text-align: left;">相对技巧的取值范围为 -vmax_delta 至vmax_delta</td> </tr> <tr> <td style="text-align: left;"><strong>spasify_xticks</strong></td> <td style="text-align: left;">x轴坐标刻度的稀疏倍数,缺省时会不进行稀疏化</td> </tr> <tr> <td style="text-align: left;"><strong>sup_fontsize</strong></td> <td style="text-align: left;">图片标题的字体大小,其它字体将根据标题字体大小自动设置,其中坐标轴字体大小 = sup_fontsize <em> 0.9, 坐标刻度的字体大小 = sup_fontsize </em> 0.8</td> </tr> <tr> <td style="text-align: left;"><strong>xlabel</strong></td> <td style="text-align: left;">子图的横坐标名称</td> </tr> <tr> <td style="text-align: left;"><strong>ylabel</strong></td> <td style="text-align: left;">评分子图的纵坐标名称</td> </tr> <tr> <td style="text-align: left;"><strong>ylabel_delta</strong></td> <td style="text-align: left;">技巧子图的纵坐标名称</td> </tr> <tr> <td style="text-align: left;"><strong>width</strong></td> <td style="text-align: left;">图片的宽度,缺省时程序自动设置</td> </tr> <tr> <td style="text-align: left;"><strong>height</strong></td> <td style="text-align: left;">图片的高度,缺省时程序自动设置</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>legend_loc</strong></td> <td style="text-align: left;">legend的位置</td> </tr> <tr> <td style="text-align: left;"><strong>wspace</strong></td> <td style="text-align: left;">子图之间的横向间隔</td> </tr> <tr> <td style="text-align: left;"><strong>hspace</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;">该参数不为None时将图片结果输出值save_path</td> </tr> <tr> <td style="text-align: left;"><strong>show</strong></td> <td style="text-align: left;">该参数不为None时在屏幕显示图片,如果生成了图片save_path又为None,则该参数会自动切换为T于1.</td> </tr> </tbody> </table> <p><strong>调用示例:</strong></p> <pre><code class="language-python">mpd.score_compare(sta_all,mem.rmse,title_list = [&amp;quot;温度预报RMSE评分和相对大小的置信度检验&amp;quot;],xlabel = &amp;quot;时效(单位:小时)&amp;quot;)</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=0d57d669c06fe19c07518878d9e312d6&amp;amp;file=file.png" alt="" /></p> <p>上面的图中下半部分子图中黑边白面柱子的上下跨度就是根据bootstrap获得置信区间大小。</p> <pre><code class="language-python">mpd.score_compare(sta_all,mem.ts,grade_list = [20,25],title_list = [&amp;quot;温度预报TS评分(&amp;gt;=20℃)&amp;quot;,&amp;quot;温度预报TS评分(&amp;gt;=25℃)&amp;quot;],ncol =2,xlabel = &amp;quot;时效(单位:小时)&amp;quot;)</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=787888210aa4420dda04ab3e140e03b2&amp;amp;file=file.png" alt="" /></p> <h1>评分叠加置信区间</h1> <p>&lt;font face=&quot;黑体&quot; color=blue size = 3&gt;score_confidence(sta_ob_and_fos0,method,grade_list = None,compare = &quot;&gt;=&quot;,s = None,B = 1000 ,c = 0.95, plot = &quot;bar&quot;,**kwargs)&lt;/font&gt; </p> <p>采用如下方法绘制相对技巧置信图: </p> <ol> <li>根据输入的站点数据和检验方法,选择部分数据,将选择的数据进行按照时效进行分组,计算的不同时效的评score分。</li> <li>选1个模式取1个时效的数据,计算不同起报时刻(例如365天)的评分,得×365个评巧</li> <li>采用又放回重采样方法从365个相当技巧值选取365个值(部分重复),计算得到1个平均值</li> <li>对步骤3重复B次,得到B个平均值</li> <li>将步骤4的结果从大到小排序,选取排序在前((1-c)/2)%和后((1-c)/2)%的位置的两个取值lower 和higher</li> <li>取(higher - lower2 作为置信区间宽。</li> <li>遍历不同时效,重复步骤2-5</li> <li>绘图时将置信区间的中心点设置在步骤1计算的到的单时效总体评分score的位置*</li> </ol> <p>&lt;font face=&quot;黑体&quot; color=red size = 3&gt;注意:对于ME\MAE这样的检验指标来说,采用有放回采样取平均值的方法获取的置信区间是合理的。但rmse、ts等指标采用有放回采样取平均值的方法获取的置信区间不太严格,但考虑到非常严格的置信统计较为复杂、计算量也会大增,因此暂时统一采用上面的方案&lt;/font&gt; </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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;sta_ob_and_fos0 &lt;/font&gt;</strong></td> <td style="text-align: left;">实况和预报合并对齐后的数据,形式为站点数据格式如上述例子中的sta_all</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;method &lt;/font&gt;</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>grade_list</strong></td> <td style="text-align: left;">该参数用于对连续变量做多种等级阈值的二分类检验,其中包含多个事件是否记录为发生的判断阈值,记其中一个阈值为g,则判断为事件发生的条件是要素值 &gt;= g。该参数缺省时列表中只包含一个取值为1e-30的阈值,由于气象要素精度通常比该缺省值大,因此它相当于将 &gt;0 作为事件发生的判据</td> </tr> <tr> <td style="text-align: left;"><strong>compare</strong></td> <td style="text-align: left;">比较方法,可选项包括&quot;&gt;=&quot;,&quot;&gt;&quot;,&quot;&lt;=&quot;,&quot;&lt;&quot;, 是要素原始值和阈值对比的方法,默认方法为&quot;&gt;=&quot;,即原始值大于等于阈值记为1,否则记为0,compare 为&quot;&lt;=&quot;时,原始值小于等于阈值的站点记为1, 这在基于能见度标记大雾事件、低温事件或降温事件等场景中可以用到</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">&lt;font face=&quot;黑体&quot; color=red size=5&gt;s&lt;/font&gt;</a>参数</td> </tr> <tr> <td style="text-align: left;"><strong>B</strong></td> <td style="text-align: left;">bootstrap算法重采样的次数</td> </tr> <tr> <td style="text-align: left;"><strong>c</strong></td> <td style="text-align: left;">置信度阈值</td> </tr> <tr> <td style="text-align: left;"><strong>plot</strong></td> <td style="text-align: left;">取bar或line,对应bar图和折线图</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> </tbody> </table> <pre><code class="language-python">mpd.score_confidence(sta_all,mem.rmse,c = 0.8,vmin = 0,plot = &amp;quot;line&amp;quot;)</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=20fc43ec3ba58b75f8523d40c7b846a6&amp;amp;file=file.png" alt="" /></p> <pre><code class="language-python">mpd.score_confidence(sta_all,mem.rmse,c = 0.8,vmin = 0,plot = &amp;quot;bar&amp;quot;)</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=f976cba2cd368e6c734b92ae17e487a4&amp;amp;file=file.png" alt="" /></p> <pre><code class="language-python">mpd.score_confidence(sta_all,mem.ts,grade_list = [20,25],vmin = 0,plot = &amp;quot;line&amp;quot;)</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=3ba3c62b5c1c3c59e0aa6a09f3976032&amp;amp;file=file.png" alt="" /></p> <pre><code class="language-python">mpd.score_confidence(sta_all,mem.ts,grade_list = [20,25],bar_width = 0.3,vmin = 0)</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=0ff728454e7b44d5300291a8f8e9f4ac&amp;amp;file=file.png" alt="" /></p>

页面列表

ITEM_HTML