meteva

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


统计

<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 = {&amp;quot;id&amp;quot;:np.arange(54511,54515).tolist(), &amp;quot;lon&amp;quot;:np.arange(100,104,1).tolist(), &amp;quot;lat&amp;quot;:np.arange(30,34,1).tolist(), &amp;quot;ec&amp;quot;:(np.random.rand(4)*100).astype(np.int16), &amp;quot;grapes&amp;quot;:(np.random.rand(4)*100).astype(np.int16), &amp;quot;ncep&amp;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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>mean_of_sta(sta,used_coords = [&quot;member&quot;],span = 24,equal_weight = False,keep_all = True)</strong>&lt;/font&gt;<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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;sta&lt;/font&gt;</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 = [&quot;member&quot;],used_coords = [&quot;time&quot;], used_coords = [&quot;dtime&quot;] 三种参数设置。</td> </tr> <tr> <td style="text-align: left;"><strong>span</strong></td> <td style="text-align: left;">累计时长,单位小时。当,used_coords = [&quot;time&quot;], used_coords = [&quot;dtime&quot;],该参数不能缺省,必须为大于0的实数或整数</td> </tr> <tr> <td style="text-align: left;"><strong>equal_weight</strong></td> <td style="text-align: left;">当,used_coords = [&quot;time&quot;],例如当时间序列 为 08,11,14,17,20, span = 12&lt;br&gt;   若equal_weight = True,则08时不参与平均, 参与平均计算的11,14,17,20时刻的数据,且它们权重都为1.&lt;br&gt;    若equal_weight = False, 则08,11,14,17,20都参与平均,但是 08和20时的权重为0.5,其它的都为1. &lt;br&gt; &lt;br&gt; 当used_coords = [&quot;dtime&quot;]时,例如时效序列为12,15,18,24, span = 12. &lt;br&gt;    如果 equal_weight = True,则参与平均的时效为15,18,24且它们的权重相同。 &lt;br&gt;    如果 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;">&lt;font face=&quot;黑体&quot; color=blue size=5&gt;return&lt;/font&gt;</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 = {&amp;quot;id&amp;quot;:[54511,54512], &amp;quot;lon&amp;quot;:[100,101], &amp;quot;lat&amp;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[&amp;quot;data0&amp;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 = [&amp;quot;time&amp;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 = [&amp;quot;time&amp;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 = {&amp;quot;id&amp;quot;:[54511], &amp;quot;lon&amp;quot;:[100], &amp;quot;lat&amp;quot;:[30], &amp;quot;time&amp;quot;:datetime.datetime(2020,1,1,9,0), 'level':0, &amp;quot;rain&amp;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[&amp;quot;rain&amp;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 = [&amp;quot;dtime&amp;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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>std_of_sta(sta,used_coords = [&quot;member&quot;])</strong>&lt;/font&gt;<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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;sta&lt;/font&gt;</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;">&lt;font face=&quot;黑体&quot; color=blue size=5&gt;return&lt;/font&gt;</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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>min_of_sta(sta,used_coords = [&quot;member&quot;],span = None,contain_start = False,keep_all = True,ignore_missing = False)</strong>&lt;/font&gt;<br /> 计算站点数据的最小值 </p> <h1>计算站点数据最大值</h1> <p>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>max_of_sta(sta,used_coords = [&quot;member&quot;],span = None,contain_start = False,keep_all = True,ignore_missing = False)</strong>&lt;/font&gt;<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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;sta&lt;/font&gt;</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 = [&quot;member&quot;],used_coords = [&quot;time&quot;], used_coords = [&quot;dtime&quot;] 三种参数设置。</td> </tr> <tr> <td style="text-align: left;"><strong>span</strong></td> <td style="text-align: left;">累计时长,单位小时。当,used_coords = [&quot;time&quot;], used_coords = [&quot;dtime&quot;],该参数缺省则代表在所在维度上所对所有坐标(时间或时效)求1各最小值</td> </tr> <tr> <td style="text-align: left;"><strong>ignore_missing</strong></td> <td style="text-align: left;">在use_coords =[&quot;time&quot;] 或[&quot;dtime&quot;],且span = None时,若某些站点的时间或时效序列不完整时,是否返回改点的统计结果,默认是不返回</td> </tr> <tr> <td style="text-align: left;"><strong>contain_start</strong></td> <td style="text-align: left;">当,used_coords = [&quot;time&quot;] 或[&quot;dtime&quot;] ,且span != None时,统计是否需包含时段起点值,例如当时间序列 为 08,11,14,17,20, span = 12&lt;br&gt;   contain_start = True,则08时的值参与统计,否正不参与.&lt;br&gt;</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>|&lt;font face=&quot;黑体&quot; color=blue size=5&gt;return&lt;/font&gt;|<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 = {&amp;quot;id&amp;quot;:[54511,50000], &amp;quot;lon&amp;quot;:[100,100], &amp;quot;lat&amp;quot;:[30,30], &amp;quot;time&amp;quot;:[datetime.datetime(2020,1,1,9,0),datetime.datetime(2020,1,1,9,0)], 'level':[0,0], &amp;quot;temp&amp;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[:,&amp;quot;temp&amp;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= [&amp;quot;dtime&amp;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= [&amp;quot;dtime&amp;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= [&amp;quot;dtime&amp;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= [&amp;quot;dtime&amp;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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>sum_of_sta(sta,used_coords = [&quot;member&quot;],span = None,keep_all = True)</strong>&lt;/font&gt;<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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;sta&lt;/font&gt;</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 = [&quot;member&quot;],used_coords = [&quot;time&quot;], used_coords = [&quot;dtime&quot;] 三种参数设置。</td> </tr> <tr> <td style="text-align: left;"><strong>span</strong></td> <td style="text-align: left;">累计时长,单位小时。当,used_coords = [&quot;time&quot;], used_coords = [&quot;dtime&quot;],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;">&lt;font face=&quot;黑体&quot; color=blue size=5&gt;return&lt;/font&gt;</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 = {&amp;quot;id&amp;quot;:[54511,54512], &amp;quot;lon&amp;quot;:[100,101], &amp;quot;lat&amp;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[&amp;quot;data0&amp;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=[&amp;quot;time&amp;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=[&amp;quot;time&amp;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=[&amp;quot;time&amp;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 = {&amp;quot;id&amp;quot;:[54511], &amp;quot;lon&amp;quot;:[100], &amp;quot;lat&amp;quot;:[30], &amp;quot;time&amp;quot;:datetime.datetime(2020,1,1,9,0), 'level':0, &amp;quot;rain&amp;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=[&amp;quot;dtime&amp;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=[&amp;quot;dtime&amp;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=[&amp;quot;dtime&amp;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-&amp;gt;36, 36-&amp;gt;48的间隔是12小时, #此时对于36和48小时时效也能有相应技术结果,但是可能和实际的物理意义不匹配, #因此建议span最好要设置成时效间距最大值的倍数。 rain06 = meb.sum_of_sta(rain,used_coords=[&amp;quot;dtime&amp;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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>mean_of_grd(grd,used_coords = [&quot;member&quot;])</strong>&lt;/font&gt;<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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;grd&lt;/font&gt;</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维度,该参还可以设置为&quot;dtime&quot;和&quot;time&quot;,目前还未支持其他维度上的平均</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;"><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 = [&amp;quot;GRAPES&amp;quot;,&amp;quot;EC&amp;quot;,&amp;quot;NCEP&amp;quot;]) grd = meb.grid_data(grid0) grd.values[0,...] = 1 grd.values[1,...] = 2 grd.values[2,...] = 3 print(grd)</code></pre> <pre><code>&amp;lt;xarray.DataArray 'data0' (member: 3, level: 1, time: 1, dtime: 1, lat: 3, lon: 6)&amp;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) &amp;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>&amp;lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 3, lon: 6)&amp;gt; array([[[[[[2., 2., 2., 2., 2., 2.], [2., 2., 2., 2., 2., 2.], [2., 2., 2., 2., 2., 2.]]]]]]) Coordinates: * member (member) &amp;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 = [&amp;quot;2022050108&amp;quot;,&amp;quot;2022050208&amp;quot;,&amp;quot;6h&amp;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>&amp;lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 5, dtime: 1, lat: 2, lon: 6)&amp;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) &amp;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=[&amp;quot;time&amp;quot;],span = 12) print(grd_mean)</code></pre> <pre><code>&amp;lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 5, dtime: 1, lat: 2, lon: 6)&amp;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) &amp;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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>var_of_grd(grd,used_coords = [&quot;member&quot;])</strong>&lt;/font&gt;<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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;grd&lt;/font&gt;</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;">&lt;font face=&quot;黑体&quot; color=blue size=5&gt;return&lt;/font&gt;</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 = [&amp;quot;GRAPES&amp;quot;,&amp;quot;EC&amp;quot;,&amp;quot;NCEP&amp;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>&amp;lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 3, lon: 6)&amp;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) &amp;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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>std_of_grd(grd,used_coords = [&quot;member&quot;])</strong>&lt;/font&gt;<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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;grd&lt;/font&gt;</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;">&lt;font face=&quot;黑体&quot; color=blue size=5&gt;return&lt;/font&gt;</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>&amp;lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 3, lon: 6)&amp;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) &amp;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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>max_of_grd(grd,used_coords = [&quot;member&quot;])</strong>&lt;/font&gt;<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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;grd&lt;/font&gt;</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维度,该参还可以设置为&quot;dtime&quot;和&quot;time&quot;,目前还未支持其他维度上的平均</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;"><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>&amp;lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 3, lon: 6)&amp;gt; array([[[[[[3., 3., 3., 3., 3., 3.], [3., 3., 3., 3., 3., 3.], [3., 3., 3., 3., 3., 3.]]]]]]) Coordinates: * member (member) &amp;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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>min_of_grd(grd,used_coords = [&quot;member&quot;])</strong>&lt;/font&gt;<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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;grd&lt;/font&gt;</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维度,该参还可以设置为&quot;dtime&quot;和&quot;time&quot;,目前还未支持其他维度上的平均</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;"><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>&amp;lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 3, lon: 6)&amp;gt; array([[[[[[1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1.]]]]]]) Coordinates: * member (member) &amp;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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>sum_of_grd(grd,used_coords = [&quot;member&quot;])</strong>&lt;/font&gt;<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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;grd&lt;/font&gt;</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维度,该参数也可以设置为&quot;dtime&quot;和&quot;time&quot;,其他维度上的操作还不支持</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;"><a href="https://www.showdoc.com.cn/meteva?page_id=3975600815874861">网格数据</a>,当used_coords = [&quot;dtime&quot;]时,是滚动求和</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>&amp;lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 3, lon: 6)&amp;gt; array([[[[[[6., 6., 6., 6., 6., 6.], [6., 6., 6., 6., 6., 6.], [6., 6., 6., 6., 6., 6.]]]]]]) Coordinates: * member (member) &amp;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&amp;quot;O:\data\grid\NWFD_SMERGE\RAIN03\YYYYMMDD\YYMMDDHH.TTT.nc&amp;quot; grd_list = [] while time1 &amp;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 =&amp;quot;国省融合预报&amp;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=&amp;quot;dtime&amp;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 = [&amp;quot;2022050108&amp;quot;,&amp;quot;2022050208&amp;quot;,&amp;quot;6h&amp;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>&amp;lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 5, dtime: 1, lat: 2, lon: 6)&amp;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) &amp;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=[&amp;quot;time&amp;quot;],span = 24) print(grd_sum)</code></pre> <pre><code>&amp;lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 2, dtime: 1, lat: 2, lon: 6)&amp;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) &amp;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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>time_ceilling(sta,step = 1, time_unit = &quot;h&quot;,begin_hour= 8)</strong>&lt;/font&gt;<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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;sta&lt;/font&gt;</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;">&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">path = r&amp;quot;H:\test_data\input\meb\m41.txt&amp;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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>loc_of_max(sta,used_coords = [&quot;dtime&quot;],ignore_missing = False)</strong>&lt;/font&gt;<br /> 循环每个层次,起报时间,站点和成员, 对时效序列数据(一维)求最大值,返回最大值对应的时效值 </p> <h1>最小值出现时效</h1> <p>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>loc_of_min(sta,used_coords = [&quot;dtime&quot;],ignore_missing = False)</strong>&lt;/font&gt;<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>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;sta&lt;/font&gt;</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 = [&quot;dtime&quot;]的情况,即计算每个站点每个时刻起报的时效序列中的最大(小)值对应的时效值。</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;">&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"># 测试按时效累加的功能,先生成包含多个时效的站点数据 data = {&amp;quot;id&amp;quot;:[54511,50000], &amp;quot;lon&amp;quot;:[100,100], &amp;quot;lat&amp;quot;:[30,30], &amp;quot;time&amp;quot;:[datetime.datetime(2020,1,1,9,0),datetime.datetime(2020,1,2,9,0)], 'level':[0,850], &amp;quot;ecmwf&amp;quot;:[0,0], &amp;quot;scmoc&amp;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[:,&amp;quot;ecmwf&amp;quot;] = np.ceil(np.random.randn(2)*10) sta.loc[:,&amp;quot;scmoc&amp;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>

页面列表

ITEM_HTML