综合评分卡
<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><font face="黑体" color=blue size = 5>rmse_skill_seaborn(rmse_z ,rmse_t ,rmse_q ,rmse_ws ,rmse_t2m ,dtime_list,member_list,save_path= None,show = False)</font></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><font face="黑体" color=blue size = 5>rmse_z</font></strong></td>
<td style="text-align: left;">500hPa位势预报均方根误差,二维数组,第一维是模式,第二维是时效</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=blue size = 5>rmse_t</font></strong></td>
<td style="text-align: left;">850hPa温度预报均方根误差,二维数组,第一维是模式,第二维是时效</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=blue size = 5>rmse_t</font></strong></td>
<td style="text-align: left;">850hPa温度预报均方根误差,二维数组,第一维是模式,第二维是时效</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=blue size = 5>rmse_t</font></strong></td>
<td style="text-align: left;">850hPa温度预报均方根误差,二维数组,第一维是模式,第二维是时效</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=blue size = 5>rmse_t</font></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;"><font face="黑体" color=blue size=5>return</font></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&quot;H:\task\other\202308-AImodel\png\comprehensive.png&quot;,show = True)</code></pre>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=e44dfb5204a78c69614ece444bdcf46b&amp;file=file.png" alt="" /></p>
<p>如果以及收集了技术rmse所需的中间量tase,则这用如下方式可以获得和member_list\dtime_list 相匹配的rmse数组</p>
<pre><code class="language-python">middle_result_path = r&quot;H:\task\other\202308-AImodel\mid\z_tase_cli.h5&quot;
df_tase_z_cli = pd.read_hdf(middle_result_path)
rmse_z500, gdict = mps.score_df(df_tase_z_cli, mem.rmse,
s={&quot;time_range&quot;: [&quot;2022040108&quot;, &quot;2023040108&quot;], &quot;level&quot;: 500,
&quot;dtime&quot;: dtime_list},
g=[&quot;member&quot;, &quot;dtime&quot;],
gll_dict={&quot;member&quot;: member_list})
middle_result_path = r&quot;H:\task\other\202308-AImodel\mid\t_tase_cli.h5&quot;
df_tase_t_cli = pd.read_hdf(middle_result_path)
rmse_t850, gdict = mps.score_df(df_tase_t_cli, mem.rmse,
s={&quot;time_range&quot;: [&quot;2022040108&quot;, &quot;2023040108&quot;], &quot;level&quot;: 850,
&quot;dtime&quot;: dtime_list},
g=[&quot;member&quot;, &quot;dtime&quot;],
gll_dict={&quot;member&quot;: member_list})
middle_result_path = r&quot;H:\task\other\202308-AImodel\mid\speed_tase_cli.h5&quot;
df_tase_speed_cli = pd.read_hdf(middle_result_path)
rmse_speed850, gdict = mps.score_df(df_tase_speed_cli, mem.rmse,
s={&quot;time_range&quot;: [&quot;2022040108&quot;, &quot;2023040108&quot;], &quot;level&quot;: 850
, &quot;dtime&quot;: dtime_list}, g=[&quot;member&quot;, &quot;dtime&quot;]
, gll_dict={&quot;member&quot;:member_list})
middle_result_path = r&quot;H:\task\other\202308-AImodel\mid\q_tase_cli.h5&quot;
df_tase_q_cli = pd.read_hdf(middle_result_path)
rmse_q700, gdict = mps.score_df(df_tase_q_cli, mem.rmse, s={&quot;time_range&quot;: [&quot;2022040108&quot;, &quot;2023040108&quot;], &quot;level&quot;: 850
, &quot;dtime&quot;: [24, 72, 120, 168, 240]}, g=[&quot;member&quot;, &quot;dtime&quot;]
, gll_dict={&quot;member&quot;: member_list})
middle_result_path = r&quot;H:\task\other\202308-AImodel\mid\t2m_tase_cli.h5&quot;
df_tase_t2m_cli = pd.read_hdf(middle_result_path)
rmse_t2m, gdict = mps.score_df(df_tase_t2m_cli, mem.rmse, s={&quot;time_range&quot;: [&quot;2022040108&quot;, &quot;2023040108&quot;], &quot;level&quot;: 2,
&quot;dtime&quot;:dtime_list},
g=[&quot;member&quot;, &quot;dtime&quot;],
gll_dict={&quot;member&quot;:member_list})
rmse_skill_seaborn(rmse_z500, rmse_t850, rmse_q700, rmse_speed850, rmse_t2m, gdict[&quot;member&quot;],gdict[&quot;dtime&quot;])</code></pre>