统计
<p>[TOC]</p>
<pre><code class="language-python">import meteva.base as meb
import numpy as np
import pandas as pd
import datetime</code></pre>
<pre><code class="language-python">data = {&quot;id&quot;:np.arange(54511,54515).tolist(),
&quot;lon&quot;:np.arange(100,104,1).tolist(),
&quot;lat&quot;:np.arange(30,34,1).tolist(),
&quot;ec&quot;:(np.random.rand(4)*100).astype(np.int16),
&quot;grapes&quot;:(np.random.rand(4)*100).astype(np.int16),
&quot;ncep&quot;:(np.random.rand(4)*100).astype(np.int16)}
df = pd.DataFrame(data)
sta_en = meb.sta_data(df)
meb.set_stadata_coords(sta_en,level = 0,time = datetime.datetime(2019,1,2,8,0),dtime = 0)
print(sta_en)</code></pre>
<pre><code> level time dtime id lon lat ec grapes ncep
0 0 2019-01-02 08:00:00 0 54511 100 30 63 68 91
1 0 2019-01-02 08:00:00 0 54512 101 31 23 52 89
2 0 2019-01-02 08:00:00 0 54513 102 32 16 39 84
3 0 2019-01-02 08:00:00 0 54514 103 33 84 69 32</code></pre>
<h1>计算站点数据某维度平均</h1>
<p><font face="黑体" color=blue size = 5><strong>mean_of_sta(sta,used_coords = ["member"],span = 24,equal_weight = False,keep_all = True)</strong></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</font></strong></td>
<td style="text-align: left;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600580125986">站点数据</a></td>
</tr>
<tr>
<td style="text-align: left;"><strong>used_coords</strong></td>
<td style="text-align: left;">计算统计的维度,目前仅能支持 used_coords = ["member"],used_coords = ["time"], used_coords = ["dtime"] 三种参数设置。</td>
</tr>
<tr>
<td style="text-align: left;"><strong>span</strong></td>
<td style="text-align: left;">累计时长,单位小时。当,used_coords = ["time"], used_coords = ["dtime"],该参数不能缺省,必须为大于0的实数或整数</td>
</tr>
<tr>
<td style="text-align: left;"><strong>equal_weight</strong></td>
<td style="text-align: left;">当,used_coords = ["time"],例如当时间序列 为 08,11,14,17,20, span = 12<br> 若equal_weight = True,则08时不参与平均, 参与平均计算的11,14,17,20时刻的数据,且它们权重都为1.<br> 若equal_weight = False, 则08,11,14,17,20都参与平均,但是 08和20时的权重为0.5,其它的都为1. <br> <br> 当used_coords = ["dtime"]时,例如时效序列为12,15,18,24, span = 12. <br> 如果 equal_weight = True,则参与平均的时效为15,18,24且它们的权重相同。 <br> 如果 equal_weight = False, 则 12,15,18,24时效的数据都参与平均,它们的权重规则为:第1时效的权重为它到第2个时效的时差,本例中为15-12 = 3, 最后时效的权重为它与倒数第2个时效的时差,本例中为24-18, 中间时效的权重为其前一个和后一个时效的时差,本例中分别为时效15对应权重=18-12 =6, 时效18对应权重=24-15 = 9。</td>
</tr>
<tr>
<td style="text-align: left;"><strong>keep_all</strong></td>
<td style="text-align: left;">选择keep_all = True时,返回结果的时间间隔或时效间隔和输入数据一样,否则会保留最后时间(或时效)以及和最后时间(或时效)相隔时长是range的整数倍的那累计时刻(时效)的结果。</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;"><a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a></td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code class="language-python">sta_mean = meb.mean_of_sta(sta_en)
print(sta_mean)</code></pre>
<pre><code> level time dtime id lon lat mean
0 0 2019-01-02 08:00:00 0 54511 100 30 74.000000
1 0 2019-01-02 08:00:00 0 54512 101 31 54.666667
2 0 2019-01-02 08:00:00 0 54513 102 32 46.333333
3 0 2019-01-02 08:00:00 0 54514 103 33 61.666667</code></pre>
<pre><code class="language-python"># 测试按时间求平均的功能, 先生成一个包含多个时间的站点数据
data = {&quot;id&quot;:[54511,54512],
&quot;lon&quot;:[100,101],
&quot;lat&quot;:[30,31]}
df = pd.DataFrame(data)
station = meb.sta_data(df)
time0 = datetime.datetime(2020,1,1,9,0)
sta_list = []
for dh in range(6):
time1 = time0 + datetime.timedelta(hours = dh)
sta = station.copy()
sta[&quot;data0&quot;] = dh
meb.set_stadata_coords(sta,time = time1,level = 0,dtime = 0)
sta_list.append(sta)
rain01= pd.concat(sta_list,axis =0)
print(rain01) #生成两个站点,逐小时的观测数据</code></pre>
<pre><code> level time dtime id lon lat data0
0 0 2020-01-01 09:00:00 0 54511 100 30 0
1 0 2020-01-01 09:00:00 0 54512 101 31 0
0 0 2020-01-01 10:00:00 0 54511 100 30 1
1 0 2020-01-01 10:00:00 0 54512 101 31 1
0 0 2020-01-01 11:00:00 0 54511 100 30 2
1 0 2020-01-01 11:00:00 0 54512 101 31 2
0 0 2020-01-01 12:00:00 0 54511 100 30 3
1 0 2020-01-01 12:00:00 0 54512 101 31 3
0 0 2020-01-01 13:00:00 0 54511 100 30 4
1 0 2020-01-01 13:00:00 0 54512 101 31 4
0 0 2020-01-01 14:00:00 0 54511 100 30 5
1 0 2020-01-01 14:00:00 0 54512 101 31 5</code></pre>
<pre><code class="language-python">sta_mean = meb.mean_of_sta(rain01,used_coords = [&quot;time&quot;],span = 3)
print(sta_mean)</code></pre>
<pre><code> level time dtime id lon lat data0
0 0 2020-01-01 09:00:00 0 54511 100.0 30.0 0.000000
1 0 2020-01-01 09:00:00 0 54512 101.0 31.0 0.000000
2 0 2020-01-01 10:00:00 0 54511 100.0 30.0 0.333333
3 0 2020-01-01 10:00:00 0 54512 101.0 31.0 0.333333
4 0 2020-01-01 11:00:00 0 54511 100.0 30.0 0.800000
5 0 2020-01-01 11:00:00 0 54512 101.0 31.0 0.800000
6 0 2020-01-01 12:00:00 0 54511 100.0 30.0 1.500000
7 0 2020-01-01 12:00:00 0 54512 101.0 31.0 1.500000
8 0 2020-01-01 13:00:00 0 54511 100.0 30.0 2.500000
9 0 2020-01-01 13:00:00 0 54512 101.0 31.0 2.500000
10 0 2020-01-01 14:00:00 0 54511 100.0 30.0 3.500000
11 0 2020-01-01 14:00:00 0 54512 101.0 31.0 3.500000</code></pre>
<pre><code class="language-python">sta_mean = meb.mean_of_sta(rain01,used_coords = [&quot;time&quot;],span = 3,keep_all= False)
print(sta_mean)</code></pre>
<pre><code> level time dtime id lon lat data0
4 0 2020-01-01 11:00:00 0 54511 100.0 30.0 0.8
5 0 2020-01-01 11:00:00 0 54512 101.0 31.0 0.8
10 0 2020-01-01 14:00:00 0 54511 100.0 30.0 3.5
11 0 2020-01-01 14:00:00 0 54512 101.0 31.0 3.5</code></pre>
<pre><code class="language-python"># 测试按时效累加的功能,先生成包含多个时效的站点数据
data = {&quot;id&quot;:[54511],
&quot;lon&quot;:[100],
&quot;lat&quot;:[30],
&quot;time&quot;:datetime.datetime(2020,1,1,9,0),
'level':0,
&quot;rain&quot;:1}
df = pd.DataFrame(data)
station = meb.sta_data(df)
# 以降水量预报为例,有的情况下时效可能是非等间距的, 每个时效的降水量代表前一个时效到该时效的累积量。
dtime_list = [3,6,9,12,18,24,30,36]
for dh in dtime_list:
sta = station.copy()
sta[&quot;rain&quot;] = dh
meb.set_stadata_coords(sta,dtime = dh)
sta_list.append(sta)
rain= meb.concat(sta_list)
print(rain) #</code></pre>
<pre><code> level time dtime id lon lat data0 rain
0 0 2020-01-01 09:00:00 0 54511 100 30 0.0 NaN
1 0 2020-01-01 09:00:00 0 54512 101 31 0.0 NaN
0 0 2020-01-01 10:00:00 0 54511 100 30 1.0 NaN
1 0 2020-01-01 10:00:00 0 54512 101 31 1.0 NaN
0 0 2020-01-01 11:00:00 0 54511 100 30 2.0 NaN
1 0 2020-01-01 11:00:00 0 54512 101 31 2.0 NaN
0 0 2020-01-01 12:00:00 0 54511 100 30 3.0 NaN
1 0 2020-01-01 12:00:00 0 54512 101 31 3.0 NaN
0 0 2020-01-01 13:00:00 0 54511 100 30 4.0 NaN
1 0 2020-01-01 13:00:00 0 54512 101 31 4.0 NaN
0 0 2020-01-01 14:00:00 0 54511 100 30 5.0 NaN
1 0 2020-01-01 14:00:00 0 54512 101 31 5.0 NaN
0 0 2020-01-01 09:00:00 3 54511 100 30 NaN 3.0
0 0 2020-01-01 09:00:00 6 54511 100 30 NaN 6.0
0 0 2020-01-01 09:00:00 9 54511 100 30 NaN 9.0
0 0 2020-01-01 09:00:00 12 54511 100 30 NaN 12.0
0 0 2020-01-01 09:00:00 18 54511 100 30 NaN 18.0
0 0 2020-01-01 09:00:00 24 54511 100 30 NaN 24.0
0 0 2020-01-01 09:00:00 30 54511 100 30 NaN 30.0
0 0 2020-01-01 09:00:00 36 54511 100 30 NaN 36.0</code></pre>
<pre><code class="language-python">sta_mean = meb.mean_of_sta(rain,used_coords = [&quot;dtime&quot;],span = 12,equal_weight=True)
print(sta_mean)</code></pre>
<pre><code> level time dtime id lon lat data0 rain
12 0 2020-01-01 09:00:00 3 54511 100.0 30.0 0.0 1.5
13 0 2020-01-01 09:00:00 6 54511 100.0 30.0 0.0 3.0
14 0 2020-01-01 09:00:00 9 54511 100.0 30.0 0.0 4.5
15 0 2020-01-01 09:00:00 12 54511 100.0 30.0 0.0 7.5
16 0 2020-01-01 09:00:00 18 54511 100.0 30.0 0.0 13.0
17 0 2020-01-01 09:00:00 24 54511 100.0 30.0 0.0 21.0
18 0 2020-01-01 09:00:00 30 54511 100.0 30.0 0.0 27.0
19 0 2020-01-01 09:00:00 36 54511 100.0 30.0 0.0 33.0
20 0 2020-01-01 09:00:00 3 54512 101.0 31.0 0.0 0.0
21 0 2020-01-01 10:00:00 3 54511 100.0 30.0 1.0 0.0
22 0 2020-01-01 10:00:00 3 54512 101.0 31.0 1.0 0.0
23 0 2020-01-01 11:00:00 3 54511 100.0 30.0 2.0 0.0
24 0 2020-01-01 11:00:00 3 54512 101.0 31.0 2.0 0.0
25 0 2020-01-01 12:00:00 3 54511 100.0 30.0 3.0 0.0
26 0 2020-01-01 12:00:00 3 54512 101.0 31.0 3.0 0.0
27 0 2020-01-01 13:00:00 3 54511 100.0 30.0 4.0 0.0
28 0 2020-01-01 13:00:00 3 54512 101.0 31.0 4.0 0.0
29 0 2020-01-01 14:00:00 3 54511 100.0 30.0 5.0 0.0
30 0 2020-01-01 14:00:00 3 54512 101.0 31.0 5.0 0.0
36 0 2020-01-01 09:00:00 6 54512 101.0 31.0 0.0 0.0
37 0 2020-01-01 10:00:00 6 54511 100.0 30.0 1.0 0.0
38 0 2020-01-01 10:00:00 6 54512 101.0 31.0 1.0 0.0
39 0 2020-01-01 11:00:00 6 54511 100.0 30.0 2.0 0.0
40 0 2020-01-01 11:00:00 6 54512 101.0 31.0 2.0 0.0
41 0 2020-01-01 12:00:00 6 54511 100.0 30.0 3.0 0.0
42 0 2020-01-01 12:00:00 6 54512 101.0 31.0 3.0 0.0
43 0 2020-01-01 13:00:00 6 54511 100.0 30.0 4.0 0.0
44 0 2020-01-01 13:00:00 6 54512 101.0 31.0 4.0 0.0
45 0 2020-01-01 14:00:00 6 54511 100.0 30.0 5.0 0.0
46 0 2020-01-01 14:00:00 6 54512 101.0 31.0 5.0 0.0
48 0 2020-01-01 09:00:00 9 54512 101.0 31.0 0.0 0.0
49 0 2020-01-01 10:00:00 9 54511 100.0 30.0 1.0 0.0
50 0 2020-01-01 10:00:00 9 54512 101.0 31.0 1.0 0.0
51 0 2020-01-01 11:00:00 9 54511 100.0 30.0 2.0 0.0
52 0 2020-01-01 11:00:00 9 54512 101.0 31.0 2.0 0.0
53 0 2020-01-01 12:00:00 9 54511 100.0 30.0 3.0 0.0
54 0 2020-01-01 12:00:00 9 54512 101.0 31.0 3.0 0.0
55 0 2020-01-01 13:00:00 9 54511 100.0 30.0 4.0 0.0
56 0 2020-01-01 13:00:00 9 54512 101.0 31.0 4.0 0.0
57 0 2020-01-01 14:00:00 9 54511 100.0 30.0 5.0 0.0
58 0 2020-01-01 14:00:00 9 54512 101.0 31.0 5.0 0.0</code></pre>
<h1>计算站点数据标准差</h1>
<p><font face="黑体" color=blue size = 5><strong>std_of_sta(sta,used_coords = ["member"])</strong></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</font></strong></td>
<td style="text-align: left;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600580125986">站点数据</a></td>
</tr>
<tr>
<td style="text-align: left;"><strong>used_coords</strong></td>
<td style="text-align: left;">计算统计的维度,默认参数是对member维度,目前还未支持其他维度上的操作</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;"><a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a></td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code class="language-python">sta_std = meb.std_of_sta(sta_en)
print(sta_std)</code></pre>
<pre><code> level time dtime id lon lat std
0 0 2019-01-02 08:00:00 0 54511 100 30 12.192894
1 0 2019-01-02 08:00:00 0 54512 101 31 27.010286
2 0 2019-01-02 08:00:00 0 54513 102 32 28.241024
3 0 2019-01-02 08:00:00 0 54514 103 33 21.853045</code></pre>
<h1>计算站点数据最小值</h1>
<p><font face="黑体" color=blue size = 5><strong>min_of_sta(sta,used_coords = ["member"],span = None,contain_start = False,keep_all = True,ignore_missing = False)</strong></font><br />
计算站点数据的最小值 </p>
<h1>计算站点数据最大值</h1>
<p><font face="黑体" color=blue size = 5><strong>max_of_sta(sta,used_coords = ["member"],span = None,contain_start = False,keep_all = True,ignore_missing = False)</strong></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</font></strong></td>
<td style="text-align: left;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600580125986">站点数据</a></td>
</tr>
<tr>
<td style="text-align: left;"><strong>used_coords</strong></td>
<td style="text-align: left;">计算统计的维度,目前仅能支持 used_coords = ["member"],used_coords = ["time"], used_coords = ["dtime"] 三种参数设置。</td>
</tr>
<tr>
<td style="text-align: left;"><strong>span</strong></td>
<td style="text-align: left;">累计时长,单位小时。当,used_coords = ["time"], used_coords = ["dtime"],该参数缺省则代表在所在维度上所对所有坐标(时间或时效)求1各最小值</td>
</tr>
<tr>
<td style="text-align: left;"><strong>ignore_missing</strong></td>
<td style="text-align: left;">在use_coords =["time"] 或["dtime"],且span = None时,若某些站点的时间或时效序列不完整时,是否返回改点的统计结果,默认是不返回</td>
</tr>
<tr>
<td style="text-align: left;"><strong>contain_start</strong></td>
<td style="text-align: left;">当,used_coords = ["time"] 或["dtime"] ,且span != None时,统计是否需包含时段起点值,例如当时间序列 为 08,11,14,17,20, span = 12<br> contain_start = True,则08时的值参与统计,否正不参与.<br></td>
</tr>
<tr>
<td style="text-align: left;"><strong>keep_all</strong></td>
<td style="text-align: left;">选择keep_all = True时,返回结果的时间间隔或时效间隔和输入数据一样,否则会保留最后时间(或时效)以及和最后时间(或时效)相隔时长是range的整数倍的那累计时刻(时效)的结果。</td>
</tr>
</tbody>
</table>
<p>|<font face="黑体" color=blue size=5>return</font>|<a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a>| </p>
<p><strong>调用示例</strong></p>
<pre><code class="language-python">sta_min = meb.min_of_sta(sta_en)
print(sta_min)</code></pre>
<pre><code> level time dtime id lon lat min
0 0 2019-01-02 08:00:00 0 54511 100 30 63
1 0 2019-01-02 08:00:00 0 54512 101 31 23
2 0 2019-01-02 08:00:00 0 54513 102 32 16
3 0 2019-01-02 08:00:00 0 54514 103 33 32</code></pre>
<pre><code class="language-python"># 测试按时效累加的功能,先生成包含多个时效的站点数据
data = {&quot;id&quot;:[54511,50000],
&quot;lon&quot;:[100,100],
&quot;lat&quot;:[30,30],
&quot;time&quot;:[datetime.datetime(2020,1,1,9,0),datetime.datetime(2020,1,1,9,0)],
'level':[0,0],
&quot;temp&quot;:[0,0]}
df = pd.DataFrame(data)
station = meb.sta_data(df)
# 以温度预报为例,
dtime_list = [3,6,9,12,18,24,30,36]
sta_list = []
for dh in dtime_list:
sta = station.copy()
sta.loc[:,&quot;temp&quot;] = np.ceil(np.random.randn(2)*10)
meb.set_stadata_coords(sta,dtime = dh)
sta_list.append(sta)
temp= pd.concat(sta_list,axis =0)
temp = temp.reset_index()
temp = temp.drop([13,15],axis = 0)
print(temp) #</code></pre>
<pre><code> index level time dtime id lon lat temp
0 0 0 2020-01-01 09:00:00 3 54511 100 30 -9.0
1 1 0 2020-01-01 09:00:00 3 50000 100 30 6.0
2 0 0 2020-01-01 09:00:00 6 54511 100 30 3.0
3 1 0 2020-01-01 09:00:00 6 50000 100 30 7.0
4 0 0 2020-01-01 09:00:00 9 54511 100 30 2.0
5 1 0 2020-01-01 09:00:00 9 50000 100 30 -5.0
6 0 0 2020-01-01 09:00:00 12 54511 100 30 14.0
7 1 0 2020-01-01 09:00:00 12 50000 100 30 -5.0
8 0 0 2020-01-01 09:00:00 18 54511 100 30 9.0
9 1 0 2020-01-01 09:00:00 18 50000 100 30 -3.0
10 0 0 2020-01-01 09:00:00 24 54511 100 30 8.0
11 1 0 2020-01-01 09:00:00 24 50000 100 30 -7.0
12 0 0 2020-01-01 09:00:00 30 54511 100 30 2.0
14 0 0 2020-01-01 09:00:00 36 54511 100 30 14.0</code></pre>
<pre><code class="language-python">t_min = meb.min_of_sta(temp,used_coords= [&quot;dtime&quot;]) #对所有时效进行统计
print(t_min)
#在结果中,由于id =50000站的30和36小时时效缺失,时效序列不完整,所以统计结果中就不包含</code></pre>
<pre><code> index level time dtime id lon lat temp
0 0 0 2020-01-01 09:00:00 36 54511 100 30 -9.0</code></pre>
<pre><code class="language-python">t_min = meb.min_of_sta(temp,used_coords= [&quot;dtime&quot;],ignore_missing = True) #对所有时效进行统计
print(t_min)
#在增加了参数ignore_missing 后,可以对包含缺失时效的站点也进行统计</code></pre>
<pre><code> index level time dtime id lon lat temp
0 0 0 2020-01-01 09:00:00 36 54511.0 100.0 30.0 -9.0
1 1 0 2020-01-01 09:00:00 36 50000.0 100.0 30.0 -7.0</code></pre>
<pre><code class="language-python">t_min = meb.min_of_sta(temp,used_coords= [&quot;dtime&quot;],span =24)
print(t_min)</code></pre>
<pre><code> index level time dtime id lon lat temp
10 0 0 2020-01-01 09:00:00 24 54511.0 100.0 30.0 -9.0
11 1 0 2020-01-01 09:00:00 24 50000.0 100.0 30.0 -7.0
12 0 0 2020-01-01 09:00:00 30 54511.0 100.0 30.0 2.0
13 0 0 2020-01-01 09:00:00 36 54511.0 100.0 30.0 2.0</code></pre>
<pre><code class="language-python">t_min = meb.min_of_sta(temp,used_coords= [&quot;dtime&quot;],span = 24,contain_start = True)
print(t_min) # 统计最小值时需考虑起点时效,因此计算时效=24的最小值时需要用到 0 到24小时时效,
#又因原始数据不包含dtime=0的样本,因此没有dtime = 24的返回结果</code></pre>
<pre><code> index level time dtime id lon lat temp
12 0 0 2020-01-01 09:00:00 30 54511.0 100.0 30.0 2.0
13 0 0 2020-01-01 09:00:00 36 54511.0 100.0 30.0 2.0</code></pre>
<h1>求站点数据在某维度上的和</h1>
<p><font face="黑体" color=blue size = 5><strong>sum_of_sta(sta,used_coords = ["member"],span = None,keep_all = True)</strong></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</font></strong></td>
<td style="text-align: left;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600580125986">站点数据</a></td>
</tr>
<tr>
<td style="text-align: left;"><strong>used_coords</strong></td>
<td style="text-align: left;">计算统计的维度,目前仅能支持 used_coords = ["member"],used_coords = ["time"], used_coords = ["dtime"] 三种参数设置。</td>
</tr>
<tr>
<td style="text-align: left;"><strong>span</strong></td>
<td style="text-align: left;">累计时长,单位小时。当,used_coords = ["time"], used_coords = ["dtime"],span = None时会将所选维度的所有样本进行累加得到一个累加值。当span为正整数时会滑动得到一序列累加值</td>
</tr>
<tr>
<td style="text-align: left;"><strong>keep_all</strong></td>
<td style="text-align: left;">当span为正整数时需设置该参数。选择keep_all = True时,返回结果的时间间隔或时效间隔和输入数据一样,否则会保留最后时间(或时效)以及和最后时间(或时效)相隔时长是range的整数倍的那累计时刻(时效)的结果。</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;"><a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a></td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code class="language-python">sta_sum = meb.sum_of_sta(sta_en) # used_coords 缺省时,对member维度进行去和。
print(sta_sum)</code></pre>
<pre><code> level time dtime id lon lat min
0 0 2019-01-02 08:00:00 0 54511 100 30 222
1 0 2019-01-02 08:00:00 0 54512 101 31 164
2 0 2019-01-02 08:00:00 0 54513 102 32 139
3 0 2019-01-02 08:00:00 0 54514 103 33 185</code></pre>
<pre><code class="language-python"># 测试按时间累加功能, 先生成一个包含多个时间的站点数据
data = {&quot;id&quot;:[54511,54512],
&quot;lon&quot;:[100,101],
&quot;lat&quot;:[30,31]}
df = pd.DataFrame(data)
station = meb.sta_data(df)
time0 = datetime.datetime(2020,1,1,9,0)
sta_list = []
for dh in range(6):
time1 = time0 + datetime.timedelta(hours = dh)
sta = station.copy()
sta[&quot;data0&quot;] = 1
meb.set_stadata_coords(sta,time = time1,level = 0,dtime = 0)
sta_list.append(sta)
rain01= pd.concat(sta_list,axis =0)
print(rain01) #生成两个站点,逐小时的观测数据
</code></pre>
<pre><code> level time dtime id lon lat data0
0 0 2020-01-01 09:00:00 0 54511 100 30 1
1 0 2020-01-01 09:00:00 0 54512 101 31 1
0 0 2020-01-01 10:00:00 0 54511 100 30 1
1 0 2020-01-01 10:00:00 0 54512 101 31 1
0 0 2020-01-01 11:00:00 0 54511 100 30 1
1 0 2020-01-01 11:00:00 0 54512 101 31 1
0 0 2020-01-01 12:00:00 0 54511 100 30 1
1 0 2020-01-01 12:00:00 0 54512 101 31 1
0 0 2020-01-01 13:00:00 0 54511 100 30 1
1 0 2020-01-01 13:00:00 0 54512 101 31 1
0 0 2020-01-01 14:00:00 0 54511 100 30 1
1 0 2020-01-01 14:00:00 0 54512 101 31 1</code></pre>
<pre><code class="language-python"># span 参数为None的情况下,对所有时间进行累加
rain_total = meb.sum_of_sta(rain01,used_coords=[&quot;time&quot;])
print(rain_total)</code></pre>
<pre><code> level time dtime id lon lat data0
0 0 2020-01-01 14:00:00 0 54511 100 30 6
1 0 2020-01-01 14:00:00 0 54512 101 31 6</code></pre>
<pre><code class="language-python">rain03 = meb.sum_of_sta(rain01,used_coords=[&quot;time&quot;],span = 3)
print(rain03)</code></pre>
<pre><code> level time dtime id lon lat data0
0 0 2020-01-01 11:00:00 0 54511 100 30 3
1 0 2020-01-01 11:00:00 0 54512 101 31 3
2 0 2020-01-01 12:00:00 0 54511 100 30 3
3 0 2020-01-01 12:00:00 0 54512 101 31 3
4 0 2020-01-01 13:00:00 0 54511 100 30 3
5 0 2020-01-01 13:00:00 0 54512 101 31 3
6 0 2020-01-01 14:00:00 0 54511 100 30 3
7 0 2020-01-01 14:00:00 0 54512 101 31 3</code></pre>
<pre><code class="language-python">rain03 = meb.sum_of_sta(rain01,used_coords=[&quot;time&quot;],span = 3,keep_all = False)
print(rain03)</code></pre>
<pre><code> level time dtime id lon lat data0
0 0 2020-01-01 11:00:00 0 54511 100 30 3
1 0 2020-01-01 11:00:00 0 54512 101 31 3
6 0 2020-01-01 14:00:00 0 54511 100 30 3
7 0 2020-01-01 14:00:00 0 54512 101 31 3</code></pre>
<pre><code class="language-python"># 测试按时效累加的功能,先生成包含多个时效的站点数据
data = {&quot;id&quot;:[54511],
&quot;lon&quot;:[100],
&quot;lat&quot;:[30],
&quot;time&quot;:datetime.datetime(2020,1,1,9,0),
'level':0,
&quot;rain&quot;:1}
df = pd.DataFrame(data)
station = meb.sta_data(df)
# 以降水量预报为例,有的情况下时效可能是非等间距的, 每个时效的降水量代表前一个时效到该时效的累积量。
dtime_list = [3,6,9,12,18,24,36,48]
sta_list = []
for dh in dtime_list:
sta = station.copy()
meb.set_stadata_coords(sta,dtime = dh)
sta_list.append(sta)
rain= pd.concat(sta_list,axis =0)
print(rain) #</code></pre>
<pre><code> level time dtime id lon lat rain
0 0 2020-01-01 09:00:00 3 54511 100 30 1
0 0 2020-01-01 09:00:00 6 54511 100 30 1
0 0 2020-01-01 09:00:00 9 54511 100 30 1
0 0 2020-01-01 09:00:00 12 54511 100 30 1
0 0 2020-01-01 09:00:00 18 54511 100 30 1
0 0 2020-01-01 09:00:00 24 54511 100 30 1
0 0 2020-01-01 09:00:00 36 54511 100 30 1
0 0 2020-01-01 09:00:00 48 54511 100 30 1</code></pre>
<pre><code class="language-python">rain12 = meb.sum_of_sta(rain,used_coords=[&quot;dtime&quot;],span = 12) #逐12小时进行累加
print(rain12)</code></pre>
<pre><code> level time dtime id lon lat rain
3 0 2020-01-01 09:00:00 12 54511 100.0 30.0 4.0
4 0 2020-01-01 09:00:00 18 54511 100.0 30.0 3.0
5 0 2020-01-01 09:00:00 24 54511 100.0 30.0 2.0
6 0 2020-01-01 09:00:00 36 54511 100.0 30.0 1.0
7 0 2020-01-01 09:00:00 48 54511 100.0 30.0 1.0</code></pre>
<pre><code class="language-python">rain12 = meb.sum_of_sta(rain,used_coords=[&quot;dtime&quot;],span = 12,keep_all = False)
print(rain12) #和上面的例子相比, 第18小时时效由于最后一个时效相隔30小时,不是12的整数倍,因此被删除</code></pre>
<pre><code> level time dtime id lon lat rain
3 0 2020-01-01 09:00:00 12 54511 100.0 30.0 4.0
5 0 2020-01-01 09:00:00 24 54511 100.0 30.0 2.0
6 0 2020-01-01 09:00:00 36 54511 100.0 30.0 1.0
7 0 2020-01-01 09:00:00 48 54511 100.0 30.0 1.0</code></pre>
<pre><code class="language-python">rain24 = meb.sum_of_sta(rain,used_coords=[&quot;dtime&quot;],span = 24) # 逐24小时进行累加
print(rain24)</code></pre>
<pre><code> level time dtime id lon lat rain
5 0 2020-01-01 09:00:00 24 54511 100.0 30.0 6.0
6 0 2020-01-01 09:00:00 36 54511 100.0 30.0 3.0
7 0 2020-01-01 09:00:00 48 54511 100.0 30.0 2.0</code></pre>
<pre><code class="language-python"># span设置为6,将进行逐6小时累加,由于24-&gt;36, 36-&gt;48的间隔是12小时,
#此时对于36和48小时时效也能有相应技术结果,但是可能和实际的物理意义不匹配,
#因此建议span最好要设置成时效间距最大值的倍数。
rain06 = meb.sum_of_sta(rain,used_coords=[&quot;dtime&quot;],span = 6,keep_all = False)
print(rain06) </code></pre>
<pre><code> level time dtime id lon lat rain
1 0 2020-01-01 09:00:00 6 54511 100.0 30.0 2.0
3 0 2020-01-01 09:00:00 12 54511 100.0 30.0 2.0
4 0 2020-01-01 09:00:00 18 54511 100.0 30.0 1.0
5 0 2020-01-01 09:00:00 24 54511 100.0 30.0 1.0
6 0 2020-01-01 09:00:00 36 54511 100.0 30.0 1.0
7 0 2020-01-01 09:00:00 48 54511 100.0 30.0 1.0</code></pre>
<h1>计算网格数据平均值</h1>
<p><font face="黑体" color=blue size = 5><strong>mean_of_grd(grd,used_coords = ["member"])</strong></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>grd</font></strong></td>
<td style="text-align: left;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600815874861">网格数据</a></td>
</tr>
<tr>
<td style="text-align: left;"><strong>used_coords</strong></td>
<td style="text-align: left;">计算统计的维度,默认参数是对member维度,该参还可以设置为"dtime"和"time",目前还未支持其他维度上的平均</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600815874861">网格数据</a></td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code class="language-python">grid0 = meb.grid([100,105,1],[20,22,1],member_list = [&quot;GRAPES&quot;,&quot;EC&quot;,&quot;NCEP&quot;])
grd = meb.grid_data(grid0)
grd.values[0,...] = 1
grd.values[1,...] = 2
grd.values[2,...] = 3
print(grd)</code></pre>
<pre><code>&lt;xarray.DataArray 'data0' (member: 3, level: 1, time: 1, dtime: 1, lat: 3, lon: 6)&gt;
array([[[[[[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.]]]]],
[[[[[2., 2., 2., 2., 2., 2.],
[2., 2., 2., 2., 2., 2.],
[2., 2., 2., 2., 2., 2.]]]]],
[[[[[3., 3., 3., 3., 3., 3.],
[3., 3., 3., 3., 3., 3.],
[3., 3., 3., 3., 3., 3.]]]]]])
Coordinates:
* member (member) &lt;U6 'GRAPES' 'EC' 'NCEP'
* level (level) int32 0
* time (time) datetime64[ns] 2099-01-01
* dtime (dtime) int32 0
* lat (lat) int32 20 21 22
* lon (lon) int32 100 101 102 103 104 105</code></pre>
<pre><code class="language-python">grd_mean = meb.mean_of_grd(grd)
print(grd_mean)</code></pre>
<pre><code>&lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 3, lon: 6)&gt;
array([[[[[[2., 2., 2., 2., 2., 2.],
[2., 2., 2., 2., 2., 2.],
[2., 2., 2., 2., 2., 2.]]]]]])
Coordinates:
* member (member) &lt;U4 'mean'
* level (level) int32 0
* time (time) datetime64[ns] 2099-01-01
* dtime (dtime) int32 0
* lat (lat) int32 20 21 22
* lon (lon) int32 100 101 102 103 104 105</code></pre>
<pre><code class="language-python">grid0 = meb.grid([100,105,1],[20,21,1],gtime = [&quot;2022050108&quot;,&quot;2022050208&quot;,&quot;6h&quot;])
grd = meb.grid_data(grid0)
a = np.arange(5).reshape(1,1,5,1,1,1)
grd.values += a
print(grd)</code></pre>
<pre><code>&lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 5, dtime: 1, lat: 2, lon: 6)&gt;
array([[[[[[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]]],
[[[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.]]],
[[[2., 2., 2., 2., 2., 2.],
[2., 2., 2., 2., 2., 2.]]],
[[[3., 3., 3., 3., 3., 3.],
[3., 3., 3., 3., 3., 3.]]],
[[[4., 4., 4., 4., 4., 4.],
[4., 4., 4., 4., 4., 4.]]]]]])
Coordinates:
* member (member) &lt;U5 'data0'
* level (level) int32 0
* time (time) datetime64[ns] 2022-05-01T08:00:00 ... 2022-05-02T08:00:00
* dtime (dtime) int32 0
* lat (lat) int32 20 21
* lon (lon) int32 100 101 102 103 104 105</code></pre>
<pre><code class="language-python">grd_mean = meb.mean_of_grd(grd,used_coords=[&quot;time&quot;],span = 12)
print(grd_mean)</code></pre>
<pre><code>&lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 5, dtime: 1, lat: 2, lon: 6)&gt;
array([[[[[[0.33333333, 0.33333333, 0.33333333, 0.33333333,
0.33333333, 0.33333333],
[0.33333333, 0.33333333, 0.33333333, 0.33333333,
0.33333333, 0.33333333]]],
[[[1. , 1. , 1. , 1. ,
1. , 1. ],
[1. , 1. , 1. , 1. ,
1. , 1. ]]],
[[[2. , 2. , 2. , 2. ,
2. , 2. ],
[2. , 2. , 2. , 2. ,
2. , 2. ]]],
[[[3. , 3. , 3. , 3. ,
3. , 3. ],
[3. , 3. , 3. , 3. ,
3. , 3. ]]],
[[[3.66666667, 3.66666667, 3.66666667, 3.66666667,
3.66666667, 3.66666667],
[3.66666667, 3.66666667, 3.66666667, 3.66666667,
3.66666667, 3.66666667]]]]]])
Coordinates:
* member (member) &lt;U5 'data0'
* level (level) int32 0
* time (time) datetime64[ns] 2022-05-01T08:00:00 ... 2022-05-02T08:00:00
* dtime (dtime) int32 0
* lat (lat) int32 20 21
* lon (lon) int32 100 101 102 103 104 105</code></pre>
<h1>计算网格数据方差</h1>
<p><font face="黑体" color=blue size = 5><strong>var_of_grd(grd,used_coords = ["member"])</strong></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>grd</font></strong></td>
<td style="text-align: left;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600815874861">网格数据</a></td>
</tr>
<tr>
<td style="text-align: left;"><strong>used_coords</strong></td>
<td style="text-align: left;">计算统计的维度,默认参数是对member维度,目前还未支持其他维度上的操作</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600815874861">网格数据</a></td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong> </p>
<pre><code class="language-python">grid0 = meb.grid([100,105,1],[20,22,1],member_list = [&quot;GRAPES&quot;,&quot;EC&quot;,&quot;NCEP&quot;])
grd = meb.grid_data(grid0)
grd.values[0,...] = 1
grd.values[1,...] = 2
grd.values[2,...] = 3
grd_var = meb.var_of_grd(grd)
print(grd_var)</code></pre>
<pre><code>&lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 3, lon: 6)&gt;
array([[[[[[0.66666667, 0.66666667, 0.66666667, 0.66666667,
0.66666667, 0.66666667],
[0.66666667, 0.66666667, 0.66666667, 0.66666667,
0.66666667, 0.66666667],
[0.66666667, 0.66666667, 0.66666667, 0.66666667,
0.66666667, 0.66666667]]]]]])
Coordinates:
* member (member) &lt;U3 'var'
* level (level) int32 0
* time (time) datetime64[ns] 2099-01-01
* dtime (dtime) int32 0
* lat (lat) int32 20 21 22
* lon (lon) int32 100 101 102 103 104 105</code></pre>
<h1>计算网格数据标准差</h1>
<p><font face="黑体" color=blue size = 5><strong>std_of_grd(grd,used_coords = ["member"])</strong></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>grd</font></strong></td>
<td style="text-align: left;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600815874861">网格数据</a></td>
</tr>
<tr>
<td style="text-align: left;"><strong>used_coords</strong></td>
<td style="text-align: left;">计算统计的维度,默认参数是对member维度,目前还未支持其他维度上的操作</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600815874861">网格数据</a></td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong> </p>
<pre><code class="language-python">grd_std = meb.std_of_grd(grd)
print(grd_std)</code></pre>
<pre><code>&lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 3, lon: 6)&gt;
array([[[[[[0.81649658, 0.81649658, 0.81649658, 0.81649658,
0.81649658, 0.81649658],
[0.81649658, 0.81649658, 0.81649658, 0.81649658,
0.81649658, 0.81649658],
[0.81649658, 0.81649658, 0.81649658, 0.81649658,
0.81649658, 0.81649658]]]]]])
Coordinates:
* member (member) &lt;U3 'std'
* level (level) int32 0
* time (time) datetime64[ns] 2099-01-01
* dtime (dtime) int32 0
* lat (lat) int32 20 21 22
* lon (lon) int32 100 101 102 103 104 105</code></pre>
<h1>计算网格数据最大值</h1>
<p><font face="黑体" color=blue size = 5><strong>max_of_grd(grd,used_coords = ["member"])</strong></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>grd</font></strong></td>
<td style="text-align: left;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600815874861">网格数据</a></td>
</tr>
<tr>
<td style="text-align: left;"><strong>used_coords</strong></td>
<td style="text-align: left;">计算统计的维度,默认参数是对member维度,该参还可以设置为"dtime"和"time",目前还未支持其他维度上的平均</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600815874861">网格数据</a></td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong> </p>
<pre><code class="language-python">grd_max = meb.max_of_grd(grd)
print(grd_max)</code></pre>
<pre><code>&lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 3, lon: 6)&gt;
array([[[[[[3., 3., 3., 3., 3., 3.],
[3., 3., 3., 3., 3., 3.],
[3., 3., 3., 3., 3., 3.]]]]]])
Coordinates:
* member (member) &lt;U3 'max'
* level (level) int32 0
* time (time) datetime64[ns] 2099-01-01
* dtime (dtime) int32 0
* lat (lat) int32 20 21 22
* lon (lon) int32 100 101 102 103 104 105</code></pre>
<h1>计算网格数据最小值</h1>
<p><font face="黑体" color=blue size = 5><strong>min_of_grd(grd,used_coords = ["member"])</strong></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>grd</font></strong></td>
<td style="text-align: left;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600815874861">网格数据</a></td>
</tr>
<tr>
<td style="text-align: left;"><strong>used_coords</strong></td>
<td style="text-align: left;">计算统计的维度,默认参数是对member维度,该参还可以设置为"dtime"和"time",目前还未支持其他维度上的平均</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600815874861">网格数据</a></td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong> </p>
<pre><code class="language-python">grd_min = meb.min_of_grd(grd)
print(grd_min)</code></pre>
<pre><code>&lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 3, lon: 6)&gt;
array([[[[[[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.]]]]]])
Coordinates:
* member (member) &lt;U3 'min'
* level (level) int32 0
* time (time) datetime64[ns] 2099-01-01
* dtime (dtime) int32 0
* lat (lat) int32 20 21 22
* lon (lon) int32 100 101 102 103 104 105</code></pre>
<h1>求网格数据在某维度上的和</h1>
<p><font face="黑体" color=blue size = 5><strong>sum_of_grd(grd,used_coords = ["member"])</strong></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>grd</font></strong></td>
<td style="text-align: left;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600815874861">网格数据</a></td>
</tr>
<tr>
<td style="text-align: left;"><strong>used_coords</strong></td>
<td style="text-align: left;">计算统计的维度,默认参数是对member维度,该参数也可以设置为"dtime"和"time",其他维度上的操作还不支持</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600815874861">网格数据</a>,当used_coords = ["dtime"]时,是滚动求和</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong> </p>
<pre><code class="language-python">grd_sum = meb.sum_of_grd(grd)
print(grd_sum)</code></pre>
<pre><code>&lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 3, lon: 6)&gt;
array([[[[[[6., 6., 6., 6., 6., 6.],
[6., 6., 6., 6., 6., 6.],
[6., 6., 6., 6., 6., 6.]]]]]])
Coordinates:
* member (member) &lt;U3 'max'
* level (level) int32 0
* time (time) datetime64[ns] 2099-01-01
* dtime (dtime) int32 0
* lat (lat) int32 20 21 22
* lon (lon) int32 100 101 102 103 104 105</code></pre>
<pre><code class="language-python">time_s = datetime.datetime(2022,6,15,8,0)
time_e = datetime.datetime(2022,6,20,8,0)
grid0 = meb.grid([108,118,0.1],[30,38,0.1])
time1 = time_s
dir1 = r&quot;O:\data\grid\NWFD_SMERGE\RAIN03\YYYYMMDD\YYMMDDHH.TTT.nc&quot;
grd_list = []
while time1 &lt;= time_e:
for dh in range(3,169,3):
path = meb.get_path(dir1,time1,dh)
grd = meb.read_griddata_from_nc(path,grid = grid0,time = time1,dtime = dh,data_name =&quot;国省融合预报&quot;)
if grd is not None:
grd_list.append(grd)
time1 = time1 + datetime.timedelta(hours = 12)
grd_smerge = meb.concat(grd_list)
grid_rain03 = meb.get_grid_of_data(grd_smerge)
print(grid_rain03)</code></pre>
<pre><code>members:['国省融合预报']
levels:[0.]
gtime:['20220615080000', '20220620080000', '12h']
dtimes:[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99, 102, 105, 108, 111, 114, 117, 120, 123, 126, 129, 132, 135, 138, 141, 144, 147, 150, 153, 156, 159, 162, 165, 168]
glon:[108.0, 118.0, 0.1]
glat:[30.0, 38.0, 0.1]</code></pre>
<pre><code class="language-python">grd_smerge_24 = meb.sum_of_grd(grd_smerge,used_coords=&quot;dtime&quot;,span = 24) # 根据3小时降水量里计算24小时降水量
grid_rain24 = meb.get_grid_of_data(grd_smerge_24)
print(grid_rain24)</code></pre>
<pre><code>members:['国省融合预报']
levels:[0.]
gtime:['20220615080000', '20220620080000', '12h']
dtimes:[24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99, 102, 105, 108, 111, 114, 117, 120, 123, 126, 129, 132, 135, 138, 141, 144, 147, 150, 153, 156, 159, 162, 165, 168]
glon:[108.0, 118.0, 0.1]
glat:[30.0, 38.0, 0.1]</code></pre>
<pre><code class="language-python">grid0 = meb.grid([100,105,1],[20,21,1],gtime = [&quot;2022050108&quot;,&quot;2022050208&quot;,&quot;6h&quot;])
grd = meb.grid_data(grid0)
a = np.arange(5).reshape(1,1,5,1,1,1)
grd.values += a
print(grd)</code></pre>
<pre><code>&lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 5, dtime: 1, lat: 2, lon: 6)&gt;
array([[[[[[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]]],
[[[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.]]],
[[[2., 2., 2., 2., 2., 2.],
[2., 2., 2., 2., 2., 2.]]],
[[[3., 3., 3., 3., 3., 3.],
[3., 3., 3., 3., 3., 3.]]],
[[[4., 4., 4., 4., 4., 4.],
[4., 4., 4., 4., 4., 4.]]]]]])
Coordinates:
* member (member) &lt;U5 'data0'
* level (level) int32 0
* time (time) datetime64[ns] 2022-05-01T08:00:00 ... 2022-05-02T08:00:00
* dtime (dtime) int32 0
* lat (lat) int32 20 21
* lon (lon) int32 100 101 102 103 104 105</code></pre>
<pre><code class="language-python">grd_sum = meb.sum_of_grd(grd,used_coords=[&quot;time&quot;],span = 24)
print(grd_sum)</code></pre>
<pre><code>&lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 2, dtime: 1, lat: 2, lon: 6)&gt;
array([[[[[[ 6., 6., 6., 6., 6., 6.],
[ 6., 6., 6., 6., 6., 6.]]],
[[[10., 10., 10., 10., 10., 10.],
[10., 10., 10., 10., 10., 10.]]]]]])
Coordinates:
* member (member) &lt;U5 'data0'
* level (level) int32 0
* time (time) datetime64[ns] 2022-05-02T02:00:00 2022-05-02T08:00:00
* dtime (dtime) int32 0
* lat (lat) int32 20 21
* lon (lon) int32 100 101 102 103 104 105</code></pre>
<p>从上面的结果中dtime = 24的求和结果是原始数据中3—24小时共8个时效的累加。dtime=27的求和结果是6—27时效的累加结果。</p>
<h1>不规则数据的时间取整</h1>
<p><font face="黑体" color=blue size = 5><strong>time_ceilling(sta,step = 1, time_unit = "h",begin_hour= 8)</strong></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</font></strong></td>
<td style="text-align: left;">观测时间不规则的站点数据,例如闪电定位数据</td>
</tr>
<tr>
<td style="text-align: left;"><strong>step</strong></td>
<td style="text-align: left;">向后取整的时间间隔</td>
</tr>
<tr>
<td style="text-align: left;"><strong>time_unit</strong></td>
<td style="text-align: left;">向后取整的时间间隔单位</td>
</tr>
<tr>
<td style="text-align: left;"><strong>begin_hour</strong></td>
<td style="text-align: left;">默认值为8,代表常用的北京时设置,例如当时取整的间间隔为3小时,则会将8点之后至11点期间的所有观测样本的time都设置为11:00:00, 11点之后到14点的样本的时间都设置为14点。如果begin_hour = 0 则,代表采用世界时,0点之后到3点的样本会记为3点</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">path = r&quot;H:\test_data\input\meb\m41.txt&quot;
sta = meb.read_stadata_from_micaps41_lightning(path,column = meb.m41_element_column.归一化电流强度值)
print(sta)</code></pre>
<pre><code> level time dtime id lon lat data0
0 0 2008-06-24 01:00:04 0 1 114.8664 26.57132 -29.16124
1 0 2008-06-24 02:00:04 0 2 106.4083 23.33219 -51.30987
2 0 2008-06-25 03:00:05 0 3 121.0393 28.38015 -28.92107
3 0 2008-06-25 04:00:01 0 4 102.8865 25.18426 -205.69330
4 0 2008-06-26 05:00:01 0 5 110.0666 24.17627 -46.67589
5 0 2008-06-26 06:00:01 0 6 109.5917 24.25497 -31.43308</code></pre>
<pre><code class="language-python">sta_1h = meb.time_ceilling(sta)
print(sta_1h)</code></pre>
<pre><code> level time dtime id lon lat data0
0 0 2008-06-24 02:00:00 0 1 114.8664 26.57132 -29.16124
1 0 2008-06-24 03:00:00 0 2 106.4083 23.33219 -51.30987
2 0 2008-06-25 04:00:00 0 3 121.0393 28.38015 -28.92107
3 0 2008-06-25 05:00:00 0 4 102.8865 25.18426 -205.69330
4 0 2008-06-26 06:00:00 0 5 110.0666 24.17627 -46.67589
5 0 2008-06-26 07:00:00 0 6 109.5917 24.25497 -31.43308</code></pre>
<pre><code class="language-python">sta_3h = meb.time_ceilling(sta,step = 3)
print(sta_3h)</code></pre>
<pre><code> level time dtime id lon lat data0
0 0 2008-06-24 02:00:00 0 1 114.8664 26.57132 -29.16124
1 0 2008-06-24 05:00:00 0 2 106.4083 23.33219 -51.30987
2 0 2008-06-25 05:00:00 0 3 121.0393 28.38015 -28.92107
3 0 2008-06-25 05:00:00 0 4 102.8865 25.18426 -205.69330
4 0 2008-06-26 08:00:00 0 5 110.0666 24.17627 -46.67589
5 0 2008-06-26 08:00:00 0 6 109.5917 24.25497 -31.43308</code></pre>
<pre><code class="language-python">sta_3h = meb.time_ceilling(sta,step = 3,begin_hour=0)
print(sta_3h)</code></pre>
<pre><code> level time dtime id lon lat data0
0 0 2008-06-24 03:00:00 0 1 114.8664 26.57132 -29.16124
1 0 2008-06-24 03:00:00 0 2 106.4083 23.33219 -51.30987
2 0 2008-06-25 06:00:00 0 3 121.0393 28.38015 -28.92107
3 0 2008-06-25 06:00:00 0 4 102.8865 25.18426 -205.69330
4 0 2008-06-26 06:00:00 0 5 110.0666 24.17627 -46.67589
5 0 2008-06-26 09:00:00 0 6 109.5917 24.25497 -31.43308</code></pre>
<h1>最大值出现时效</h1>
<p><font face="黑体" color=blue size = 5><strong>loc_of_max(sta,used_coords = ["dtime"],ignore_missing = False)</strong></font><br />
循环每个层次,起报时间,站点和成员, 对时效序列数据(一维)求最大值,返回最大值对应的时效值 </p>
<h1>最小值出现时效</h1>
<p><font face="黑体" color=blue size = 5><strong>loc_of_min(sta,used_coords = ["dtime"],ignore_missing = False)</strong></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</font></strong></td>
<td style="text-align: left;"><a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a>,可以包含多个层次、起报时间、时效、站点和数据成员</td>
</tr>
<tr>
<td style="text-align: left;"><strong>used_coords</strong></td>
<td style="text-align: left;">最大(小)值统计的维度,目前暂时只支持 used_coords = ["dtime"]的情况,即计算每个站点每个时刻起报的时效序列中的最大(小)值对应的时效值。</td>
</tr>
<tr>
<td style="text-align: left;"><strong>ignore_missing</strong></td>
<td style="text-align: left;">若某些站点的时效序列不完整时,是否返回改点的统计结果,默认是不返回</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"># 测试按时效累加的功能,先生成包含多个时效的站点数据
data = {&quot;id&quot;:[54511,50000],
&quot;lon&quot;:[100,100],
&quot;lat&quot;:[30,30],
&quot;time&quot;:[datetime.datetime(2020,1,1,9,0),datetime.datetime(2020,1,2,9,0)],
'level':[0,850],
&quot;ecmwf&quot;:[0,0],
&quot;scmoc&quot;:[0,0]}
df = pd.DataFrame(data)
station = meb.sta_data(df)
# 以温度预报为例,
dtime_list = np.arange(3,25,3)
sta_list = []
for dh in dtime_list:
sta = station.copy()
sta.loc[:,&quot;ecmwf&quot;] = np.ceil(np.random.randn(2)*10)
sta.loc[:,&quot;scmoc&quot;] = np.ceil(np.random.randn(2)*10)
meb.set_stadata_coords(sta,dtime = dh)
sta_list.append(sta)
temp= pd.concat(sta_list,axis =0)
temp = temp.reset_index(drop = True)
temp = temp.drop([13,15],axis = 0)
print(temp) #</code></pre>
<pre><code> level time dtime id lon lat ecmwf scmoc
0 0 2020-01-01 09:00:00 3 54511 100 30 -3.0 8.0
1 850 2020-01-02 09:00:00 3 50000 100 30 -1.0 -5.0
2 0 2020-01-01 09:00:00 6 54511 100 30 11.0 8.0
3 850 2020-01-02 09:00:00 6 50000 100 30 -9.0 4.0
4 0 2020-01-01 09:00:00 9 54511 100 30 -6.0 1.0
5 850 2020-01-02 09:00:00 9 50000 100 30 8.0 15.0
6 0 2020-01-01 09:00:00 12 54511 100 30 15.0 15.0
7 850 2020-01-02 09:00:00 12 50000 100 30 8.0 10.0
8 0 2020-01-01 09:00:00 15 54511 100 30 11.0 -0.0
9 850 2020-01-02 09:00:00 15 50000 100 30 -15.0 6.0
10 0 2020-01-01 09:00:00 18 54511 100 30 -17.0 -5.0
11 850 2020-01-02 09:00:00 18 50000 100 30 18.0 -10.0
12 0 2020-01-01 09:00:00 21 54511 100 30 -11.0 -3.0
14 0 2020-01-01 09:00:00 24 54511 100 30 -23.0 4.0</code></pre>
<pre><code class="language-python">dtime_min = meb.loc_of_min(temp) # 54511站温度最低点出现在12小时时效,
print(dtime_min) #50000站时效序列不完整,返回结果中不包含</code></pre>
<pre><code> level time dtime id lon lat ecmwf scmoc
0 0 2020-01-01 09:00:00 0 54511 100 30 24 18</code></pre>
<pre><code class="language-python">dtime_min = meb.loc_of_min(temp,ignore_missing = True) # 忽略时效的完整性
print(dtime_min) </code></pre>
<pre><code> level time dtime id lon lat ecmwf scmoc
0 0 2020-01-01 09:00:00 0 54511 100 30 24 18
1 850 2020-01-02 09:00:00 0 50000 100 30 15 18</code></pre>
<pre><code class="language-python">dtime_min = meb.loc_of_max(temp,ignore_missing = True) # 忽略时效的完整性
print(dtime_min) </code></pre>
<pre><code> level time dtime id lon lat ecmwf scmoc
0 0 2020-01-01 09:00:00 0 54511 100 30 12 12
1 850 2020-01-02 09:00:00 0 50000 100 30 18 9</code></pre>
<pre><code class="language-python"></code></pre>