meteva

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


综合评分卡

<p>[TOC]</p> <pre><code class="language-python">%matplotlib inline %load_ext autoreload %autoreload 2 import meteva.perspact as mps import numpy as np</code></pre> <h1>RMSE技巧综合评分卡</h1> <p><strong>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;rmse_skill_seaborn(rmse_z ,rmse_t ,rmse_q ,rmse_ws ,rmse_t2m ,dtime_list,member_list,save_path= None,show = False)&lt;/font&gt;</strong> </p> <p>根据输入的多个模式多个时效的多个要素场的rmse,一其中第一个模式的rmse为基准,计算所有模式的预报技巧(技巧= (rmse - rmse_基准)/rmse_基准),再将rmse和技巧绘制成综合评分卡。</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;rmse_z&lt;/font&gt;</strong></td> <td style="text-align: left;">500hPa位势预报均方根误差,二维数组,第一维是模式,第二维是时效</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;rmse_t&lt;/font&gt;</strong></td> <td style="text-align: left;">850hPa温度预报均方根误差,二维数组,第一维是模式,第二维是时效</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;rmse_t&lt;/font&gt;</strong></td> <td style="text-align: left;">850hPa温度预报均方根误差,二维数组,第一维是模式,第二维是时效</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;rmse_t&lt;/font&gt;</strong></td> <td style="text-align: left;">850hPa温度预报均方根误差,二维数组,第一维是模式,第二维是时效</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;rmse_t&lt;/font&gt;</strong></td> <td style="text-align: left;">850hPa温度预报均方根误差,二维数组,第一维是模式,第二维是时效</td> </tr> <tr> <td style="text-align: left;"><strong>member_list</strong></td> <td style="text-align: left;">预报成员的名称列表,第一个模式是计算技巧的基准</td> </tr> <tr> <td style="text-align: left;"><strong>dtime_list</strong></td> <td style="text-align: left;">时效列表,单位:h</td> </tr> <tr> <td style="text-align: left;"><strong>save_path</strong></td> <td style="text-align: left;">图片保存路径,缺省时不输出图片,而是以默认绘图窗口形式展示</td> </tr> <tr> <td style="text-align: left;"><strong>show</strong></td> <td style="text-align: left;">是否在屏幕显示图片,如果save_path 和save_dir 为都None时,程序内部会自动将show设置True</td> </tr> <tr> <td style="text-align: left;">&lt;font face=&quot;黑体&quot; color=blue size=5&gt;return&lt;/font&gt;</td> <td style="text-align: left;">无返回结果</td> </tr> </tbody> </table> <p><strong>参考示例</strong></p> <pre><code class="language-python">rmse_z500 = np.array([[ 41.34208187, 104.42649822, 207.3049743 , 346.76197245, 539.82226292], [ 52.5447117 , 102.23454016, 211.08630751, 353.06675254, 544.8919886 ], [ 41.07874172, 99.13094048, 191.23422793, 311.11866583, 441.0315547 ], [ 38.0872649 , 93.86808399, 189.42944591, 305.16624515, 437.03190686], [573.19146159, 575.56456127, 574.25834247, 572.4059034 , 573.14679125]])</code></pre> <pre><code class="language-python">rmse_t850 = np.array([[0.64903011, 1.10026577, 1.65178052, 2.40099712, 3.51945675], [0.74328505, 1.06287034, 1.61646643, 2.41135237, 3.50688486], [0.68662723, 1.00919272, 1.47860963, 2.09805938, 2.91839409], [0.68664564, 0.98240345, 1.47700309, 2.04598598, 2.95157112], [3.68558006, 3.69178364, 3.68681699, 3.67781313, 3.67316397]])</code></pre> <pre><code class="language-python">rmse_q700 =np.array([[0.85606184, 1.26951396, 1.52651943, 1.75284189, 2.04848174], [0.83545491, 1.06412609, 1.28133772, 1.51299276, 1.83792206], [0.79418486, 1.01553513, 1.17487884, 1.32855355, 1.54312035], [1.55723564, 1.69043884, 1.81707042, 1.91223949, 2.11939662], [4.15301968, 4.15172045, 4.14953471, 4.14718946, 4.14433545]])</code></pre> <pre><code class="language-python">rmse_speed850 =np.array([[1.37959949, 2.16199051, 2.88461452, 3.55921404, 4.19537785], [1.57078829, 2.06169691, 2.70828268, 3.37256249, 4.0803228 ], [1.41506298, 1.97146108, 2.60189555, 3.25317148, 4.01598417], [1.41180883, 1.91386261, 2.52495786, 3.12241484, 3.8181158 ], [3.6487743 , 3.65252639, 3.65179832, 3.65018489, 3.6483144 ]])</code></pre> <pre><code class="language-python">rmse_t2m=np.array([[0.92798341, 1.33282139, 1.77329937, 2.3879724 , 3.31399886], [1.26719836, 1.65428892, 2.06918015, 2.66548943, 3.52923326], [1.65093082, 1.86980057, 2.11655954, 2.52512377, 3.09175655], [1.64413909, 1.92820977, 2.21874975, 2.51810857, 3.17287285], [3.81488257, 3.81855399, 3.81789708, 3.81571856, 3.81338429]])</code></pre> <pre><code class="language-python">member_list = ['FST_ref', 'MODEL1', 'MODEL1', 'MODEL1', 'Climatology'] dtime_list = [24, 72, 120, 168, 240]</code></pre> <pre><code class="language-python">mps.rmse_skill_seaborn(rmse_z500, rmse_t850, rmse_q700, rmse_speed850, rmse_t2m, member_list,dtime_list,save_path=r&amp;quot;H:\task\other\202308-AImodel\png\comprehensive.png&amp;quot;,show = True)</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=e44dfb5204a78c69614ece444bdcf46b&amp;amp;file=file.png" alt="" /></p> <p>如果以及收集了技术rmse所需的中间量tase,则这用如下方式可以获得和member_list\dtime_list 相匹配的rmse数组</p> <pre><code class="language-python">middle_result_path = r&amp;quot;H:\task\other\202308-AImodel\mid\z_tase_cli.h5&amp;quot; df_tase_z_cli = pd.read_hdf(middle_result_path) rmse_z500, gdict = mps.score_df(df_tase_z_cli, mem.rmse, s={&amp;quot;time_range&amp;quot;: [&amp;quot;2022040108&amp;quot;, &amp;quot;2023040108&amp;quot;], &amp;quot;level&amp;quot;: 500, &amp;quot;dtime&amp;quot;: dtime_list}, g=[&amp;quot;member&amp;quot;, &amp;quot;dtime&amp;quot;], gll_dict={&amp;quot;member&amp;quot;: member_list}) middle_result_path = r&amp;quot;H:\task\other\202308-AImodel\mid\t_tase_cli.h5&amp;quot; df_tase_t_cli = pd.read_hdf(middle_result_path) rmse_t850, gdict = mps.score_df(df_tase_t_cli, mem.rmse, s={&amp;quot;time_range&amp;quot;: [&amp;quot;2022040108&amp;quot;, &amp;quot;2023040108&amp;quot;], &amp;quot;level&amp;quot;: 850, &amp;quot;dtime&amp;quot;: dtime_list}, g=[&amp;quot;member&amp;quot;, &amp;quot;dtime&amp;quot;], gll_dict={&amp;quot;member&amp;quot;: member_list}) middle_result_path = r&amp;quot;H:\task\other\202308-AImodel\mid\speed_tase_cli.h5&amp;quot; df_tase_speed_cli = pd.read_hdf(middle_result_path) rmse_speed850, gdict = mps.score_df(df_tase_speed_cli, mem.rmse, s={&amp;quot;time_range&amp;quot;: [&amp;quot;2022040108&amp;quot;, &amp;quot;2023040108&amp;quot;], &amp;quot;level&amp;quot;: 850 , &amp;quot;dtime&amp;quot;: dtime_list}, g=[&amp;quot;member&amp;quot;, &amp;quot;dtime&amp;quot;] , gll_dict={&amp;quot;member&amp;quot;:member_list}) middle_result_path = r&amp;quot;H:\task\other\202308-AImodel\mid\q_tase_cli.h5&amp;quot; df_tase_q_cli = pd.read_hdf(middle_result_path) rmse_q700, gdict = mps.score_df(df_tase_q_cli, mem.rmse, s={&amp;quot;time_range&amp;quot;: [&amp;quot;2022040108&amp;quot;, &amp;quot;2023040108&amp;quot;], &amp;quot;level&amp;quot;: 850 , &amp;quot;dtime&amp;quot;: [24, 72, 120, 168, 240]}, g=[&amp;quot;member&amp;quot;, &amp;quot;dtime&amp;quot;] , gll_dict={&amp;quot;member&amp;quot;: member_list}) middle_result_path = r&amp;quot;H:\task\other\202308-AImodel\mid\t2m_tase_cli.h5&amp;quot; df_tase_t2m_cli = pd.read_hdf(middle_result_path) rmse_t2m, gdict = mps.score_df(df_tase_t2m_cli, mem.rmse, s={&amp;quot;time_range&amp;quot;: [&amp;quot;2022040108&amp;quot;, &amp;quot;2023040108&amp;quot;], &amp;quot;level&amp;quot;: 2, &amp;quot;dtime&amp;quot;:dtime_list}, g=[&amp;quot;member&amp;quot;, &amp;quot;dtime&amp;quot;], gll_dict={&amp;quot;member&amp;quot;:member_list}) rmse_skill_seaborn(rmse_z500, rmse_t850, rmse_q700, rmse_speed850, rmse_t2m, gdict[&amp;quot;member&amp;quot;],gdict[&amp;quot;dtime&amp;quot;])</code></pre>

页面列表

ITEM_HTML