温度预报检验
<pre><code class="language-python">
import numpy as np
import pandas as pd
import meteva.base as meb
import meteva.product as mpd
import meteva.method as mem
import meteva.perspact as mps</code></pre>
<h1>温度预报技巧评分</h1>
<p><strong><font face="黑体" color=blue size = 5>temp_forecaster_score(ob, fo)</font></strong><br />
按照《第十六届全国气象行业职业技能竞赛暨第八届全国气象行业天气预报职业技能竞赛组织实施方案》,预报评定分为基础分(满分0.6分)和技巧分(满分1分)两部分。<br />
1.基础分<br />
│预报值-实况值│≤2℃为正确,否则为错误。正确得0.6分,错误得0分。 </p>
<p>2.技巧分<br />
评定预报员相对客观城市预报产品的预报技巧评分。根据预报员和模式产品的检验结果计算预报技巧得分<br />
模式正确,预报员错误,得0份<br />
模式错误,预报员错误,得0.3分<br />
模式正确,预报员正确,得0.6分<br />
模式错误,预报员正确,得1.0分 </p>
<p>3.总分<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>ob</font></strong></td>
<td style="text-align: left;">实况数据, 1维numpy数组,长度为N</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=blue size = 5>fo</font></strong></td>
<td style="text-align: left;">预报数据,2×N的数组</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">temp_all = pd.read_hdf(r&quot;H:\test_data\input\mpd\temp_data.h5&quot;) #加载一周的预报数据
meb.set_stadata_names(temp_all,data_name_list=[&quot;obs&quot;,&quot;model&quot;,&quot;forecaster&quot;])
print(temp_all)</code></pre>
<pre><code> level time dtime id lon lat obs \
1425 0.0 2020-06-29 08:00:00 3 57197 114.35 32.97 27.500000
1434 0.0 2020-06-29 08:00:00 3 57231 108.53 32.53 28.799999
1436 0.0 2020-06-29 08:00:00 3 57233 108.50 32.90 27.200001
1437 0.0 2020-06-29 08:00:00 3 57237 108.03 32.07 30.600000
1439 0.0 2020-06-29 08:00:00 3 57242 109.37 32.85 28.400000
... ... ... ... ... ... ... ...
742220 0.0 2020-06-23 08:00:00 156 58510 116.23 29.73 25.000000
742221 0.0 2020-06-23 08:00:00 156 58512 116.55 29.90 24.100000
742222 0.0 2020-06-23 08:00:00 156 58514 116.05 29.45 25.799999
742223 0.0 2020-06-23 08:00:00 156 58517 116.20 29.27 26.200001
742224 0.0 2020-06-23 08:00:00 156 58519 116.68 29.00 26.700001
model forecaster
1425 27.690479 25.520103
1434 25.489040 25.833244
1436 25.497000 25.108383
1437 25.887096 25.408495
1439 26.357519 26.479502
... ... ...
742220 23.838448 28.369730
742221 23.832800 28.175653
742222 23.332600 28.041468
742223 22.905279 29.219957
742224 22.700199 30.072720
[51880 rows x 9 columns]</code></pre>
<pre><code class="language-python">ob = temp_all[&quot;obs&quot;].values
fo = temp_all[[&quot;model&quot;,&quot;forecaster&quot;]].values.T
result = mpd.temp_forecaster_score(ob,fo)
print(result)</code></pre>
<pre><code>0.7829317656129529</code></pre>
<h1>温度预报技巧评分_中间量</h1>
<p><strong><font face="黑体" color=blue size = 5>tbask(ob, fo)</font></strong><br />
按照《第十六届全国气象行业职业技能竞赛暨第八届全国气象行业天气预报职业技能竞赛组织实施方案》,预报评定分为基础分(满分0.6分)和技巧分(满分1分)两部分。<br />
1.基础分<br />
│预报值-实况值│≤2℃为正确,否则为错误。正确得0.6分,错误得0分。 </p>
<p>2.技巧分<br />
评定预报员相对客观城市预报产品的预报技巧评分。根据预报员和模式产品的检验结果计算预报技巧得分<br />
模式正确,预报员错误,得0份<br />
模式错误,预报员错误,得0.3分<br />
模式正确,预报员正确,得0.6分<br />
模式错误,预报员正确,得1.0分 </p>
<p>3.总分<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>ob</font></strong></td>
<td style="text-align: left;">实况数据, 1维numpy数组,长度为N</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=blue size = 5>fo</font></strong></td>
<td style="text-align: left;">预报数据,2×N的数组</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">mpd.tbask(ob,fo)</code></pre>
<pre><code>array([51880. , 40618.5])</code></pre>
<h1>基于透视模块分类统计</h1>
<pre><code class="language-python">df_tbask = mps.middle_df_sta(temp_all,mpd.tbask)
print(df_tbask)</code></pre>
<pre><code> time dtime T BASK
0 2020-06-23 08:00:00 3 169.0 132.3
1 2020-06-23 08:00:00 6 169.0 124.5
2 2020-06-23 08:00:00 9 169.0 109.0
3 2020-06-23 08:00:00 12 88.0 77.1
4 2020-06-23 08:00:00 15 169.0 155.9
.. ... ... ... ...
303 2020-06-28 20:00:00 24 169.0 103.1
304 2020-06-29 08:00:00 3 168.0 142.5
305 2020-06-29 08:00:00 6 169.0 134.4
306 2020-06-29 08:00:00 9 169.0 148.4
307 2020-06-29 08:00:00 12 169.0 141.8
[308 rows x 4 columns]</code></pre>
<pre><code class="language-python">score,gll_dict = mps.score_df(df_tbask,mpd.temp_forecaster_score,g = &quot;dtime&quot;)
print(&quot;评分数值:&quot;)
print(score)
print(&quot;分组方式:&quot;)
print(gll_dict)</code></pre>
<pre><code>评分数值:
[0.81018265 0.7872835 0.84314351 0.89881685 0.86971796 0.85125926
0.85646594 0.82637037 0.81214903 0.75091595 0.76666667 0.75889009
0.75112827 0.74253555 0.74795737 0.75260664 0.77683168 0.78202765
0.83217105 0.7560237 0.74294205 0.76748148 0.78593634 0.76422222
0.72269263 0.78907705 0.8243083 0.74777887 0.69145907 0.72191943
0.76706231 0.59733333 0.61262327 0.59546351 0.50887574 0.78550296
0.57633136 0.88934911]
分组方式:
{'dtime': [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 78, 84, 90, 96, 102, 108, 114, 120, 126, 132, 138, 144, 150, 156]}</code></pre>