meteva

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


分组

<p>[TOC]</p> <pre><code class="language-python">%matplotlib inline %load_ext autoreload %autoreload 2 import meteva.base as meb import pandas as pd import numpy as np import datetime import copy</code></pre> <pre><code class="language-python">data = {&amp;quot;id&amp;quot;:[54511,54522],&amp;quot;lon&amp;quot;:[100,110],&amp;quot;lat&amp;quot;:[30,40],&amp;quot;ob&amp;quot;:[0,0],&amp;quot;grapes&amp;quot;:[0,0],&amp;quot;ec&amp;quot;:[0,0],} df = pd.DataFrame(data) sta = meb.sta_data(df) meb.set_stadata_coords(sta,level = 1000,time = datetime.datetime(2019,12,31,8,0),dtime = 0) sta1 = copy.deepcopy(sta) meb.set_stadata_coords(sta1,level = 850) sta = meb.combine_join(sta,sta1) sta1 = copy.deepcopy(sta) meb.set_stadata_coords(sta1,time = datetime.datetime(2020,1,1,20,0)) sta = meb.combine_join(sta,sta1) sta1 = copy.deepcopy(sta) meb.set_stadata_coords(sta1,dtime = 24) sta_all = meb.combine_join(sta,sta1) sta_all.iloc[:,-3] = [10,10,10,10,20,20,20,20,50,50,50,50,80,80,80,80] sta_all.iloc[:,-2:] = (np.random.rand(16,2)*100).astype(np.int16) sta_all.iloc[10:13,-1] = meb.IV print(sta_all)</code></pre> <pre><code> level time dtime id lon lat ob grapes ec 0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55 1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45 2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7 3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76 4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21 5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46 7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47 8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30 9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81 10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999 11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999 12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999 13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48 14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82 15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37</code></pre> <h1>将数据分组</h1> <p><strong>group((data,g = None,gll = None)</strong><br /> 将站点数据按指定方式进行分组 </p> <p><strong>参数说明:</strong><br />   <strong>&lt;font face=&quot;黑体&quot; color=green size=5&gt;data&lt;/font&gt;</strong> :<a href="https://www.showdoc.cc/nmc?page_id=3744334022014027">站点数据</a><br />   <strong>&lt;font face=&quot;黑体&quot; color=green size=5&gt;g&lt;/font&gt;</strong> :指定分组维度,对预报观测样本进行分组检验时的分组依据,缺省是为None,即不进行分组检验,非缺省时为字符串形式,可选项包括 </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;">None</td> <td style="text-align: left;">不分组,返回原数据和gll的原值</td> </tr> <tr> <td style="text-align: left;">&quot;level&quot;</td> <td style="text-align: left;">按层次进行分组</td> </tr> <tr> <td style="text-align: left;">&quot;time&quot;</td> <td style="text-align: left;">按起报时间分组</td> </tr> <tr> <td style="text-align: left;">&quot;time_range&quot;</td> <td style="text-align: left;">按起报时间区间分组</td> </tr> <tr> <td style="text-align: left;">&quot;year&quot;</td> <td style="text-align: left;">按起报时间中的年份进行分组</td> </tr> <tr> <td style="text-align: left;">&quot;month&quot;</td> <td style="text-align: left;">按起报时间中的月份进行分组</td> </tr> <tr> <td style="text-align: left;">&quot;day&quot;</td> <td style="text-align: left;">按起报时间中的日期进行分组</td> </tr> <tr> <td style="text-align: left;">&quot;dayofyear&quot;</td> <td style="text-align: left;">按起报时间中的日期在一年中的排序(day_of_year)进行分组</td> </tr> <tr> <td style="text-align: left;">&quot;hour&quot;</td> <td style="text-align: left;">按起报时间的小时数(hour_of_day)进行分组</td> </tr> <tr> <td style="text-align: left;">&quot;day_hour&quot;</td> <td style="text-align: left;">按起报时间的日期和小时数进行分组,在对分钟级滚动更新的预报进行分类检验时,按time分组太密,按day分组太稀,则可用该参数分组</td> </tr> <tr> <td style="text-align: left;">&quot;year_month&quot;</td> <td style="text-align: left;">在将多年的数据按月进行统计,并且要求不同年份的相同月份不做叠加时采用该参数</td> </tr> <tr> <td style="text-align: left;">&quot;ob_time&quot;</td> <td style="text-align: left;">按观测时间(起报时间+预报时效)进行分组</td> </tr> <tr> <td style="text-align: left;">&quot;ob_time_range&quot;</td> <td style="text-align: left;">按观测时间(起报时间+预报时效)区间进行分组</td> </tr> <tr> <td style="text-align: left;">&quot;ob_year&quot;</td> <td style="text-align: left;">按观测时间(起报时间+预报时效)中的年份进行分组</td> </tr> <tr> <td style="text-align: left;">&quot;ob_month&quot;</td> <td style="text-align: left;">按观测时间(起报时间+预报时效)中的月份进行分组</td> </tr> <tr> <td style="text-align: left;">&quot;ob_day&quot;</td> <td style="text-align: left;">按观测时间(起报时间+预报时效)中的日期进行分组</td> </tr> <tr> <td style="text-align: left;">&quot;ob_dayofyear&quot;</td> <td style="text-align: left;">按观测时间(起报时间+预报时效)中的日期在一年中的排序(day_of_year)进行分组</td> </tr> <tr> <td style="text-align: left;">&quot;ob_hour&quot;</td> <td style="text-align: left;">按观测时间(起报时间+预报时效)中的小时数(hour_of_day)进行分组</td> </tr> <tr> <td style="text-align: left;">&quot;ob_day_hour&quot;</td> <td style="text-align: left;">按起报时间的日期和小时数进行分组,在对分钟级滚动更新的预报进行分类检验时,按time分组太密,按day分组太稀,则可用该参数分组</td> </tr> <tr> <td style="text-align: left;">&quot;ob_year_month&quot;</td> <td style="text-align: left;">在将多年的数据按月进行统计,并且要求不同年份的相同月份不做叠加时采用该参数</td> </tr> <tr> <td style="text-align: left;">&quot;dtime&quot;</td> <td style="text-align: left;">按预报时效进行分组</td> </tr> <tr> <td style="text-align: left;">&quot;dtime_range&quot;</td> <td style="text-align: left;">按预报时效区间进行分组</td> </tr> <tr> <td style="text-align: left;">&quot;dday&quot;</td> <td style="text-align: left;">按预报时效包含的天数进行分组,例如预报时效为0、12、24和36小时的样本会分别被标记为 0、1、1和2</td> </tr> <tr> <td style="text-align: left;">&quot;dhour&quot;</td> <td style="text-align: left;">按预报时效整除24小时后的余数进行分组,例如预报时效为12、24和36小时的样本会分别被标记为 12,0和12</td> </tr> <tr> <td style="text-align: left;">&quot;id&quot;</td> <td style="text-align: left;">按站号进行分组</td> </tr> <tr> <td style="text-align: left;">&quot;lon_range&quot;</td> <td style="text-align: left;">按经度区间分组</td> </tr> <tr> <td style="text-align: left;">&quot;lon_step&quot;</td> <td style="text-align: left;">按经度进行等间距分组</td> </tr> <tr> <td style="text-align: left;">&quot;lat_range&quot;</td> <td style="text-align: left;">按维度区间分组</td> </tr> <tr> <td style="text-align: left;">&quot;lat_step&quot;</td> <td style="text-align: left;">按纬度进行等间距分组</td> </tr> <tr> <td style="text-align: left;">&quot;last_range&quot;</td> <td style="text-align: left;">按最后一列数据值的取值区间进行分组,分组后最后一列数据将被丢弃</td> </tr> <tr> <td style="text-align: left;">&quot;last_step&quot;</td> <td style="text-align: left;">根据最后一列数据值的大小进行等距分组,分组后最后一列数据将被丢弃</td> </tr> <tr> <td style="text-align: left;">**kwargs</td> <td style="text-align: left;">通过该参数接受和数据列名称相关的参数,有两种具体情形,&lt;br&gt;情形3:如果参数名称正好等于数据列名称,参数的值为一个列表,当数据列的取值属于列表时,结果会保留;&lt;br&gt;情形2:如果参数名称=数据列名称+&quot;_range时&quot;,参数值必须设置双层列表,其中内层列表为长度为2,代表取值范围,当数据列的取值在参数设定的取值范围内会被作为一组;&lt;br&gt;情形3:如果参数名称=数据列名称+&quot;_step时&quot;,参数值必须是长度等于2的列表,函数将根据它生成等间距的区间,用于分组。</td> </tr> </tbody> </table> <p>  <strong>&lt;font face=&quot;黑体&quot; color=green size=5&gt;gll</strong>: 指定分组的取值区间 </p> <table> <thead> <tr> <th style="text-align: left;">适用情况</th> <th style="text-align: left;">参数形式</th> <th style="text-align: left;">示例及效果</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">g=&quot;lon_step&quot;, &quot;lat_step&quot;、 &quot;last_step&quot;或者 列名称+&quot;_step&quot;时</td> <td style="text-align: left;">单层列表,其中第0个元素为等距分割的起始值,第1个元素为等级分割的间隔</td> <td style="text-align: left;">例如当站点数据集分布在经度范围为69-135°E的区域内,如果g=&quot;lon&quot;,gll = [100,10],则会将所有的数据按照[60,70),[70,80),[80,90),[90,100),[100,110),[110,120),[120,130)[130,140)共8个经度区间(前闭后开)分组</td> </tr> <tr> <td style="text-align: left;">g=&quot;time_range&quot;, &quot;ob_time_range&quot;, &quot;dtime_range&quot;, &quot;lon_range&quot;, &quot;lat_range&quot;, &quot;last_range&quot;或者 列名称+&quot;_range&quot;时</td> <td style="text-align: left;">双层列表,其中每一个内层列表的第0个元素为区间的起始值,第1个元素为区间的结束值(闭区间),不同区间可重叠</td> <td style="text-align: left;">例如当站点数据集分布在经度范围为69-139°E的区域内,如果g = &quot;lon&quot;,gll = [[80,90],[110-120]],则会从数据中提取经度位于80-90°E和110-120°E的两组数据</td> </tr> <tr> <td style="text-align: left;">g=&quot;grid&quot;时</td> <td style="text-align: left;">单层列表,列表中的每个元素为一个<a href="https://www.showdoc.cc/meteva?page_id=3975600815874861">网格信息类</a>变量</td> <td style="text-align: left;">例如当g = &quot;grid&quot;, gll = [meb.grid([100,110,1],[20,30,1]), meb.grid([120,130,1],[40,50,1])]时,就可以提取位于西南南部和东北的两块矩形区域的数据,并分为2组</td> </tr> <tr> <td style="text-align: left;">g等于其它可选项时</td> <td style="text-align: left;">None</td> <td style="text-align: left;">当g!=None时,按g参数对应的数据取值相同的分为一组,分组数量和数据取值的集合size一致,例如原始数据中包含54511, 54512, 54513三个站点,则会按站点号将所有相同站号的数据划分为一组,一共分为3组</td> </tr> <tr> <td style="text-align: left;">同上</td> <td style="text-align: left;">双层列表,其中内层列表的长度可以不固定,不同列表可重叠,如果内层列表size = 1,也可以不用列表形式,直接列出其中内容</td> <td style="text-align: left;">按g参数对应的数据,根据内层列表所列值进行分组例如原始数据中包含54511, 54512, 54513三个站点,如果gll ==[54511,[54511,54512],[54512,54513]] 则分为3组,第一组包含54511站,第2组包含所有站号为54511和54512的数据,第3组包含所有54512和54513。</td> </tr> </tbody> </table> <p>  <strong>&lt;font face=&quot;黑体&quot; color=blue size=5&gt;return</strong>&lt;/font&gt;: 有效的分组结果和分组方式,python元组数据,其中第一个元素为列表,列表中的元素为每个分组后的<a href="https://www.showdoc.cc/nmc?page_id=3744334022014027">站点数据</a>,元组的第二个元素为实际分类所采用的gll。在分组时,如果gll指定的分组里没有包含任何站点,则该分组参数会从gll中移除。</p> <p><strong>调用示例</strong></p> <pre><code class="language-python">result = meb.group(sta_all) print(result[0]) print(result[1])#不分组,返回值的第一个元素为站点数据,第二个元素为None</code></pre> <pre><code>[ level time dtime id lon lat ob grapes ec 0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55 1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45 2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7 3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76 4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21 5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46 7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47 8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30 9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81 10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999 11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999 12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999 13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48 14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82 15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37] None</code></pre> <pre><code class="language-python">#按照ob列的值进行分组,每种不同的观测值分为一组 result = meb.group(sta_all,g = &amp;quot;ob&amp;quot;) print(result[0]) print(result[1])</code></pre> <pre><code>[ level time dtime id lon lat ob grapes ec 0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55 1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45 2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7 3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76, level time dtime id lon lat ob grapes ec 4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21 5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46 7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47, level time dtime id lon lat ob grapes ec 8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30 9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81 10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999 11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999, level time dtime id lon lat ob grapes ec 12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999 13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48 14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82 15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37] [10, 20, 50, 80]</code></pre> <pre><code class="language-python">#按照ob列的值进行分组,分为两组,各组分别包含 ob 等于 10, 和ob等于20或50的样本 result = meb.group(sta_all,g = &amp;quot;ob&amp;quot;,gll = [[10],[20,50]]) print(result[0]) print(result[1])</code></pre> <pre><code>[ level time dtime id lon lat ob grapes ec 0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55 1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45 2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7 3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76, level time dtime id lon lat ob grapes ec 4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21 5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46 7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47 8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30 9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81 10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999 11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999] [[10], [20, 50]]</code></pre> <pre><code class="language-python">#按照ec列的值进行分组,分为3组,各组分别是ec 列属于[0,30],[31,50],[51,100]等3个区间的值。 result = meb.group(sta_all,g = &amp;quot;ec_range&amp;quot;,gll = [[0,30],[31,50],[51,100]]) print(result[0]) print(result[1])</code></pre> <pre><code>[ level time dtime id lon lat ob grapes ec 2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7 4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21 8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30, level time dtime id lon lat ob grapes ec 1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45 6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46 7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47 13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48 15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37, level time dtime id lon lat ob grapes ec 0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55 3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76 5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81 14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82] [[0, 30], [31, 50], [51, 100]]</code></pre> <pre><code class="language-python">#按照grapes列的值进行分组,每个分组grapes的取值分别处于间距为20的不同区间 result = meb.group(sta_all,g = &amp;quot;grapes_step&amp;quot;,gll = [0,20]) print(result[0]) print(result[1])</code></pre> <pre><code>[ level time dtime id lon lat ob grapes ec 1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45 2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7 5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999, level time dtime id lon lat ob grapes ec 3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76 6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46 11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999 14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82, level time dtime id lon lat ob grapes ec 7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47 8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30 12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999 15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37, level time dtime id lon lat ob grapes ec 0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55 4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21 9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81, level time dtime id lon lat ob grapes ec 13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48] [[0.0, 19.999999], [20.0, 39.999999], [40.0, 59.999999], [60.0, 79.999999], [80.0, 99.999999]]</code></pre> <pre><code class="language-python">result = meb.group(sta_all,g =&amp;quot;time&amp;quot;) #group_list_list = None print(result[0]) print(result[1]) #按起报时间分组,返回的第一个元素为两组站点数据构成的列表,第二个元素实际采用的分组方式</code></pre> <pre><code>[ level time dtime id lon lat ob grapes ec 0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55 1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45 2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7 3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76 8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30 9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81 10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999 11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999, level time dtime id lon lat ob grapes ec 4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21 5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46 7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47 12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999 13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48 14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82 15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37] [Timestamp('2019-12-31 08:00:00'), Timestamp('2020-01-01 20:00:00')]</code></pre> <pre><code class="language-python">result = meb.group(sta_all,g =&amp;quot;time&amp;quot;,gll = [[&amp;quot;2019123108&amp;quot;,&amp;quot;2020010120&amp;quot;],&amp;quot;2020010120&amp;quot;,&amp;quot;2030010108&amp;quot;]) print(result[0])#按指定方式的时间分组,分组结果中第一组包含了两天的数据样本,第二组包含了一天的数据样本 print(result[1]) #第三组没有包含数据样本,所以在结果中被删除了。</code></pre> <pre><code>[ level time dtime id lon lat ob grapes ec 0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55 1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45 2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7 3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76 4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21 5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46 7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47 8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30 9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81 10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999 11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999 12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999 13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48 14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82 15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37, level time dtime id lon lat ob grapes ec 4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21 5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46 7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47 12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999 13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48 14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82 15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37] [['2019123108', '2020010120'], ['2020010120']]</code></pre> <pre><code class="language-python">result = meb.group(sta_all,g =&amp;quot;time_range&amp;quot;,gll = [[&amp;quot;2019123108&amp;quot;,&amp;quot;2020010108&amp;quot;],[&amp;quot;2020010120&amp;quot;,&amp;quot;2020010220&amp;quot;]]) print(result[0])#按指定方式的时间分组,每一组根据列表给出的起止时间选取相应的数据,一共分成了2组 print(result[1]) </code></pre> <pre><code>[ level time dtime id lon lat ob grapes ec 0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55 1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45 2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7 3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76 8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30 9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81 10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999 11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999, level time dtime id lon lat ob grapes ec 4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21 5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46 7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47 12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999 13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48 14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82 15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37] [['2019123108', '2020010108'], ['2020010120', '2020010220']]</code></pre> <pre><code class="language-python">grid1 = meb.grid([95,105,1],[25,35,1]) grid2 = meb.grid([105,115,1],[35,45,1]) result = meb.group(sta_all,g =&amp;quot;grid&amp;quot;,gll = [grid1,grid2]) print(result[0])#按指定网格区域,一共分成了2组 print(result[1]) </code></pre> <pre><code>[ level time dtime id lon lat ob grapes ec 0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55 2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7 4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21 6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46 8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30 10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999 12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999 14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82, level time dtime id lon lat ob grapes ec 1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45 3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76 5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47 9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81 11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999 13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48 15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37] [&amp;lt;meteva.base.basicdata.grid.grid object at 0x0000022F2628F488&amp;gt;, &amp;lt;meteva.base.basicdata.grid.grid object at 0x0000022F2628FBC8&amp;gt;]</code></pre> <pre><code class="language-python">result = meb.group(sta_all,g = &amp;quot;lat_step&amp;quot;,gll = [30,5]) print(result[0])#按指定网格区域,一共分成了2组 print(result[1]) </code></pre> <pre><code>[ level time dtime id lon lat ob grapes ec 0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55 2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7 4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21 6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46 8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30 10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999 12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999 14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82, level time dtime id lon lat ob grapes ec 1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45 3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76 5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47 9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81 11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999 13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48 15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37] [[30.0, 34.999999], [40.0, 44.999999]]</code></pre> <pre><code class="language-python">sta_all[&amp;quot;div&amp;quot;] = (np.random.randn(16) * 100).astype(np.int16) print(sta_all) # 增加一列数据作为分组的依据,它可以是散点,涡度,下垫面类型等等</code></pre> <pre><code> level time dtime id lon lat ob grapes ec div 0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55 -28 1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45 118 2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7 45 3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76 -109 4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21 53 5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 0 6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46 -131 7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47 -49 8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30 -71 9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81 34 10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999 -258 11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999 -62 12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999 10 13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48 -49 14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82 -190 15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37 -8</code></pre> <pre><code class="language-python">result = meb.group(sta_all,g = &amp;quot;last_range&amp;quot;,gll =[[-200,0],[0,200]]) print(result[0])#根据最后一列数据分组,假设div代表散度的话,这样可将数据样本分为散度为正和为负的两组样本 print(result[1]) </code></pre> <pre><code>[ level time dtime id lon lat ob grapes ec 0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55 3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76 5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46 7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47 8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30 11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999 13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48 14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82 15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37, level time dtime id lon lat ob grapes ec 1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45 2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7 4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21 5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81 12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999] [[-200, 0], [0, 200]]</code></pre> <pre><code class="language-python">result = meb.group(sta_all,g = &amp;quot;last_step&amp;quot;,gll =[0,100]) print(result[0])#根据最后一列数据分组,假设div代表散度的话,这样可将数据样本分为散度为不同的取值区间是的多组样本 print(result[1]) </code></pre> <pre><code>[ level time dtime id lon lat ob grapes ec 10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999, level time dtime id lon lat ob grapes ec 3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76 6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46 14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82, level time dtime id lon lat ob grapes ec 0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55 7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47 8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30 11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999 13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48 15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37, level time dtime id lon lat ob grapes ec 2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7 4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21 5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81 12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999, level time dtime id lon lat ob grapes ec 1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45] [[-300.0, -200.000001], [-200.0, -100.000001], [-100.0, -1e-06], [0.0, 99.999999], [100.0, 199.999999]]</code></pre> <pre><code class="language-python">grid0 = meb.grid([100,102,1],[20,22,1],gtime=[&amp;quot;2019013108&amp;quot;],dtime_list = [24],level_list = [500,700],member_list = [&amp;quot;GRAPES&amp;quot;]) x= np.arange(3) y= np.arange(3) dat = np.array(np.meshgrid(x,y)) grd = meb.grid_data(grid0,dat) #根据网格信息和numpy数组生成网格数 print(grd)</code></pre> <pre><code>&amp;lt;xarray.DataArray 'data0' (member: 1, level: 2, time: 1, dtime: 1, lat: 3, lon: 3)&amp;gt; array([[[[[[0, 1, 2], [0, 1, 2], [0, 1, 2]]]], [[[[0, 0, 0], [1, 1, 1], [2, 2, 2]]]]]]) Coordinates: * member (member) &amp;lt;U6 'GRAPES' * level (level) int32 500 700 * time (time) datetime64[ns] 2019-01-31T08:00:00 * dtime (dtime) int32 24 * lat (lat) int32 20 21 22 * lon (lon) int32 100 101 102</code></pre> <pre><code class="language-python">grd_list = meb.group_grd(grd,g = &amp;quot;level&amp;quot;) print(grd_list)</code></pre> <pre><code>[&amp;lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 3, lon: 3)&amp;gt; array([[[[[[0, 1, 2], [0, 1, 2], [0, 1, 2]]]]]]) Coordinates: * member (member) &amp;lt;U6 'GRAPES' * level (level) int32 500 * time (time) datetime64[ns] 2019-01-31T08:00:00 * dtime (dtime) int32 24 * lat (lat) int32 20 21 22 * lon (lon) int32 100 101 102, &amp;lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 3, lon: 3)&amp;gt; array([[[[[[0, 0, 0], [1, 1, 1], [2, 2, 2]]]]]]) Coordinates: * member (member) &amp;lt;U6 'GRAPES' * level (level) int32 700 * time (time) datetime64[ns] 2019-01-31T08:00:00 * dtime (dtime) int32 24 * lat (lat) int32 20 21 22 * lon (lon) int32 100 101 102]</code></pre>

页面列表

ITEM_HTML