meteva

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


诊断

<p>[TOC]</p> <pre><code class="language-python">%matplotlib inline %load_ext autoreload %autoreload 2 import meteva.base as meb import numpy as np import pandas as pd import datetime</code></pre> <h1>变化量计算</h1> <p>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>change(data,delta = 24,used_coords = &quot;time&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;data&lt;/font&gt;</strong></td> <td style="text-align: left;"><a href="https://www.showdoc.cc/nmc?page_id=3744334022014027">站点数据</a> 或<a href="https://www.showdoc.com.cn/meteva/3975600815874861">网格数据</a></td> </tr> <tr> <td style="text-align: left;"><strong>delta</strong></td> <td style="text-align: left;">变化前后的时间间距</td> </tr> <tr> <td style="text-align: left;"><strong>used_coords</strong></td> <td style="text-align: left;">计算变化的所用的维度,可选项为&quot;time&quot;,&quot;dtime&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.cc/nmc?page_id=3744334022014027">站点数据</a> 或<a href="https://www.showdoc.com.cn/meteva/3975600815874861">网格数据</a>,仅保留相减的前后两个时刻(或时效)都有值的部分</td> </tr> </tbody> </table> <p><strong>调用示例</strong> </p> <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,8,0) sta_list = [] for dh in range(6): time1 = time0 + datetime.timedelta(hours = dh * 12) sta = station.copy() sta[&amp;quot;temp&amp;quot;] = dh meb.set_stadata_coords(sta,time = time1,level = 0,dtime = 0) sta_list.append(sta) temp= pd.concat(sta_list,axis =0) print(temp) #生成两个站点,逐12小时的温度观测数据 </code></pre> <pre><code> level time dtime id lon lat data0 temp 0 0 2020-01-01 08:00:00 0 54511 100 30 0 0 1 0 2020-01-01 08:00:00 0 54512 101 31 0 0 0 0 2020-01-01 20:00:00 0 54511 100 30 0 1 1 0 2020-01-01 20:00:00 0 54512 101 31 0 1 0 0 2020-01-02 08:00:00 0 54511 100 30 0 2 1 0 2020-01-02 08:00:00 0 54512 101 31 0 2 0 0 2020-01-02 20:00:00 0 54511 100 30 0 3 1 0 2020-01-02 20:00:00 0 54512 101 31 0 3 0 0 2020-01-03 08:00:00 0 54511 100 30 0 4 1 0 2020-01-03 08:00:00 0 54512 101 31 0 4 0 0 2020-01-03 20:00:00 0 54511 100 30 0 5 1 0 2020-01-03 20:00:00 0 54512 101 31 0 5</code></pre> <pre><code class="language-python">dt = meb.change(temp,delta = 12,used_coords = &amp;quot;time&amp;quot;) # 求12小时的变温 print(dt)</code></pre> <pre><code> level time dtime id lon lat data0 temp 0 0 2020-01-01 20:00:00 0 54511 100 30 0 1 1 0 2020-01-01 20:00:00 0 54512 101 31 0 1 2 0 2020-01-02 08:00:00 0 54511 100 30 0 1 3 0 2020-01-02 08:00:00 0 54512 101 31 0 1 4 0 2020-01-02 20:00:00 0 54511 100 30 0 1 5 0 2020-01-02 20:00:00 0 54512 101 31 0 1 6 0 2020-01-03 08:00:00 0 54511 100 30 0 1 7 0 2020-01-03 08:00:00 0 54512 101 31 0 1 8 0 2020-01-03 20:00:00 0 54511 100 30 0 1 9 0 2020-01-03 20:00:00 0 54512 101 31 0 1</code></pre> <pre><code class="language-python">dt = meb.change(temp) #采用默认值,求24小时的变温 print(dt)</code></pre> <pre><code> level time dtime id lon lat data0 temp 0 0 2020-01-02 08:00:00 0 54511 100 30 0 2 1 0 2020-01-02 08:00:00 0 54512 101 31 0 2 2 0 2020-01-02 20:00:00 0 54511 100 30 0 2 3 0 2020-01-02 20:00:00 0 54512 101 31 0 2 4 0 2020-01-03 08:00:00 0 54511 100 30 0 2 5 0 2020-01-03 08:00:00 0 54512 101 31 0 2 6 0 2020-01-03 20:00:00 0 54511 100 30 0 2 7 0 2020-01-03 20:00:00 0 54512 101 31 0 2</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} df = pd.DataFrame(data) station = meb.sta_data(df) # 以降水量预报为例,有的情况下时效可能是非等间距的, 每个时效的降水量代表从0时效开始的累计降水量。 dtime_list = [3,6,9,12,18,24,36,48] sta_list = [] 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) APCP= pd.concat(sta_list,axis =0) print(APCP) # 打印累计降水量</code></pre> <pre><code> level time dtime id lon lat data0 rain 0 0 2020-01-01 09:00:00 3 54511 100 30 0 3 0 0 2020-01-01 09:00:00 6 54511 100 30 0 6 0 0 2020-01-01 09:00:00 9 54511 100 30 0 9 0 0 2020-01-01 09:00:00 12 54511 100 30 0 12 0 0 2020-01-01 09:00:00 18 54511 100 30 0 18 0 0 2020-01-01 09:00:00 24 54511 100 30 0 24 0 0 2020-01-01 09:00:00 36 54511 100 30 0 36 0 0 2020-01-01 09:00:00 48 54511 100 30 0 48</code></pre> <pre><code class="language-python">rain03 = meb.change(APCP,delta = 3, used_coords=&amp;quot;dtime&amp;quot;) #由累计降水量计算逐3小时降水量 print(rain03)</code></pre> <pre><code> level time dtime id lon lat data0 rain 0 0 2020-01-01 09:00:00 6 54511 100 30 0 3 1 0 2020-01-01 09:00:00 9 54511 100 30 0 3 2 0 2020-01-01 09:00:00 12 54511 100 30 0 3</code></pre> <pre><code class="language-python">rain06 = meb.change(APCP,delta =6, used_coords=&amp;quot;dtime&amp;quot;) #由累计降水量计算逐6小时降水量 print(rain06)</code></pre> <pre><code> level time dtime id lon lat data0 rain 0 0 2020-01-01 09:00:00 9 54511 100 30 0 6 1 0 2020-01-01 09:00:00 12 54511 100 30 0 6 2 0 2020-01-01 09:00:00 18 54511 100 30 0 6 3 0 2020-01-01 09:00:00 24 54511 100 30 0 6</code></pre> <pre><code class="language-python">rain24 = meb.change(APCP,delta =24, used_coords=&amp;quot;dtime&amp;quot;) #由累计降水量计算逐24小时降水量 print(rain24)</code></pre> <pre><code> level time dtime id lon lat data0 rain 0 0 2020-01-01 09:00:00 36 54511 100 30 0 24 1 0 2020-01-01 09:00:00 48 54511 100 30 0 24</code></pre> <pre><code class="language-python">grd = meb.read_griddata_from_nc(r&amp;quot;H:\test_data\input\meb\grd_sele_test.nc&amp;quot;) print(grd)</code></pre> <pre><code>&amp;lt;xarray.DataArray 'data0' (member: 3, level: 1, time: 10, dtime: 4, lat: 81, lon: 101)&amp;gt; array([[[[[[ 2.59400e+00, 2.88400e+00, 1.60200e+00, ..., 7.60000e-02, 3.21000e-01, 4.58000e-01], [ 4.63900e+00, 5.85900e+00, 9.62000e-01, ..., 1.60000e-02, 2.59000e-01, 8.24000e-01], [ 6.62200e+00, 3.31100e+00, 1.81500e+00, ..., 0.00000e+00, 4.50000e-02, 4.12000e-01], ..., [ 0.00000e+00, 0.00000e+00, 0.00000e+00, ..., 9.10900e+00, 1.01930e+01, 1.11390e+01], [ 0.00000e+00, 0.00000e+00, 0.00000e+00, ..., 1.12450e+01, 1.05900e+01, 8.63600e+00], [ 0.00000e+00, 0.00000e+00, 0.00000e+00, ..., 7.20200e+00, 1.03300e+01, 9.93300e+00]], [[ 2.36050e+01, 2.25220e+01, 1.80360e+01, ..., 6.10000e-02, 3.00000e-02, 1.50000e-02], [ 2.42310e+01, 2.88090e+01, 2.12860e+01, ..., 4.60000e-02, 7.60000e-02, 1.99000e-01], [ 1.75020e+01, 2.56500e+01, 2.76190e+01, ..., 7.60000e-02, 6.10000e-02, 1.38000e-01], ... [ 0.00000e+00, 0.00000e+00, 0.00000e+00, ..., 0.00000e+00, 0.00000e+00, 0.00000e+00], [ 0.00000e+00, 0.00000e+00, 0.00000e+00, ..., 0.00000e+00, 0.00000e+00, 0.00000e+00], [ 0.00000e+00, 0.00000e+00, 0.00000e+00, ..., 0.00000e+00, 0.00000e+00, 0.00000e+00]], [[ 0.00000e+00, 0.00000e+00, 0.00000e+00, ..., 0.00000e+00, 0.00000e+00, 0.00000e+00], [ 0.00000e+00, 0.00000e+00, 0.00000e+00, ..., 0.00000e+00, 0.00000e+00, 0.00000e+00], [ 0.00000e+00, 0.00000e+00, 0.00000e+00, ..., 0.00000e+00, 0.00000e+00, 0.00000e+00], ..., [ 0.00000e+00, 0.00000e+00, 0.00000e+00, ..., 0.00000e+00, 0.00000e+00, 0.00000e+00], [ 0.00000e+00, 0.00000e+00, 0.00000e+00, ..., 0.00000e+00, 0.00000e+00, 0.00000e+00], [ 0.00000e+00, 0.00000e+00, 0.00000e+00, ..., 0.00000e+00, 0.00000e+00, 0.00000e+00]]]]]]) Coordinates: * member (member) object 'ECMWF' '网格预报指导报' '国省融合预报' * level (level) float64 0.0 * time (time) datetime64[ns] 2021-07-15T20:00:00 ... 2021-07-20T08:00:00 * dtime (dtime) int32 24 48 72 96 * lat (lat) float64 30.0 30.1 30.2 30.3 30.4 ... 37.6 37.7 37.8 37.9 38.0 * lon (lon) float64 108.0 108.1 108.2 108.3 ... 117.7 117.8 117.9 118.0</code></pre> <pre><code class="language-python">grid0 = meb.get_grid_of_data(grd) print(grid0) change_time= meb.change(grd,delta = 24,used_coords=&amp;quot;time&amp;quot;) grid1 = meb.get_grid_of_data(change_time) print(grid1)</code></pre> <pre><code>members:['ECMWF' '网格预报指导报' '国省融合预报'] levels:[0.] gtime:['20210715200000', '20210720080000', '12h'] dtimes:[24, 48, 72, 96] glon:[108.0, 118.0, 0.1] glat:[30.0, 38.0, 0.1] members:['ECMWF' '网格预报指导报' '国省融合预报'] levels:[0.] gtime:['20210716200000', '20210720080000', '12h'] dtimes:[24, 48, 72, 96] glon:[108.0, 118.0, 0.1] glat:[30.0, 38.0, 0.1]</code></pre> <pre><code class="language-python">change_time1= meb.change(grd,delta = 24,used_coords=&amp;quot;dtime&amp;quot;) grid2 = meb.get_grid_of_data(change_time1) print(grid2)</code></pre> <pre><code>members:['ECMWF' '网格预报指导报' '国省融合预报'] levels:[0.] gtime:['20210715200000', '20210720080000', '12h'] dtimes:[48, 72, 96] glon:[108.0, 118.0, 0.1] glat:[30.0, 38.0, 0.1]</code></pre> <h1>根据风速风向计算UV风</h1> <p>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>speed_angle_to_wind(speed,angle = None)</strong>&lt;/font&gt;<br /> 根据风向风速计算u、v </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;speed&lt;/font&gt;</strong></td> <td style="text-align: left;"><a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a>或<a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">网格数据</a></td> </tr> <tr> <td style="text-align: left;"><strong>angle</strong></td> <td style="text-align: left;"><a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a>或<a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">网格数据</a>。如果angle 不为 None,则其形式应和speed一样,同为站点数据或网格数据。 如果angle为None,则speed数据中应同时包含风速和风向。</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;: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;speed&amp;quot;:(np.random.rand(4)*10), &amp;quot;angle&amp;quot;:(np.random.rand(4)*360).astype(np.int16)} df = pd.DataFrame(data) sta_speed_angle = meb.sta_data(df) meb.set_stadata_coords(sta_speed_angle,level = 0,time = datetime.datetime(2019,1,2,8,0),dtime = 0) print(sta_speed_angle) </code></pre> <pre><code> level time dtime id lon lat speed angle 0 0 2019-01-02 08:00:00 0 54511 100 30 0.165637 21.0 1 0 2019-01-02 08:00:00 0 54512 101 31 9.635079 297.0 2 0 2019-01-02 08:00:00 0 54513 102 32 6.830427 359.0 3 0 2019-01-02 08:00:00 0 54514 103 33 7.449517 8.0</code></pre> <pre><code class="language-python">sta_uv = meb.speed_angle_to_wind(sta_speed_angle) #站点数据中同时包含风速和风向,则只需输入一个参数 print(sta_uv)</code></pre> <pre><code> level time dtime id lon lat u v 0 0 2019-01-02 08:00:00 0 54511 100 30 -0.059330 -0.154646 1 0 2019-01-02 08:00:00 0 54512 101 31 8.596383 -4.351661 2 0 2019-01-02 08:00:00 0 54513 102 32 0.140900 -6.828973 3 0 2019-01-02 08:00:00 0 54514 103 33 -1.036250 -7.377092</code></pre> <pre><code class="language-python">speed = meb.sele_by_para(sta_speed_angle,member = [&amp;quot;speed&amp;quot;]) #仅包含风速的数据 angle = meb.sele_by_para(sta_speed_angle,member = [&amp;quot;angle&amp;quot;]) #仅包含风向的数据 sta_uv = meb.speed_angle_to_wind(speed,angle) print(sta_uv)</code></pre> <pre><code> level time dtime id lon lat u v 0 0 2019-01-02 08:00:00 0 54511 100 30 -0.059330 -0.154646 1 0 2019-01-02 08:00:00 0 54512 101 31 8.596383 -4.351661 2 0 2019-01-02 08:00:00 0 54513 102 32 0.140900 -6.828973 3 0 2019-01-02 08:00:00 0 54514 103 33 -1.036250 -7.377092</code></pre> <h1>将U,V数据对齐合并</h1> <p>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>u_v_to_wind(u,v)</strong>&lt;/font&gt;<br /> 将u和v合并成一个包含u,v分量的风场数据 </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;u&lt;/font&gt;</strong></td> <td style="text-align: left;"><a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a>或<a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">网格数据</a></td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;v&lt;/font&gt;</strong></td> <td style="text-align: left;"><a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a>或<a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">网格数据</a>。 若u,v都是站点数据,它们的时空排列顺序可以不同,合并时会进行自动对齐,如果u,v是网格数据,则要求它们事先具有相同的网格范围</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">u = meb.sele_by_para(sta_uv,member = &amp;quot;u&amp;quot;) v = meb.sele_by_para(sta_uv,member = &amp;quot;v&amp;quot;) sta_uv_new = meb.u_v_to_wind(u,v) print(sta_uv_new)</code></pre> <pre><code> level time dtime id lon lat u v 0 0 2019-01-02 08:00:00 0 54511 100 30 -0.059330 -0.154646 1 0 2019-01-02 08:00:00 0 54512 101 31 8.596383 -4.351661 2 0 2019-01-02 08:00:00 0 54513 102 32 0.140900 -6.828973 3 0 2019-01-02 08:00:00 0 54514 103 33 -1.036250 -7.377092</code></pre> <h1>相对湿度_基于温度、露点</h1> <p>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>t_dtp_to_rh(temp,dtp)</strong>&lt;/font&gt;<br /> 根据温度露点计算相对湿度(仅用于气象领域,或相对温度不高于120℃的场景,不能应用于工程领域) </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;temp&lt;/font&gt;</strong></td> <td style="text-align: left;">温度, <a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a>或<a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">网格数据</a>,既可以为绝对温度,也可以为摄氏温度。</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;dtp&lt;/font&gt;</strong></td> <td style="text-align: left;">露点温度, <a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a>或<a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">网格数据</a>。其形式应和temp一样,同为站点数据或网格数据。既可以为绝对温度,也可以为摄氏温度。</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">sta_t = speed.copy() meb.set_stadata_names(sta_t,&amp;quot;temp&amp;quot;) sta_t.iloc[:,-1] = np.random.rand(4)*30 print(sta_t)</code></pre> <pre><code> level time dtime id lon lat temp 0 0 2019-01-02 08:00:00 0 54511 100 30 24.438363 1 0 2019-01-02 08:00:00 0 54512 101 31 8.947511 2 0 2019-01-02 08:00:00 0 54513 102 32 22.359041 3 0 2019-01-02 08:00:00 0 54514 103 33 18.670863</code></pre> <pre><code class="language-python">sta_dpt =sta_t.copy() meb.set_stadata_names(sta_dpt,&amp;quot;dpt&amp;quot;) sta_dpt.iloc[:,-1] -= 5 print(sta_dpt)</code></pre> <pre><code> level time dtime id lon lat dpt 0 0 2019-01-02 08:00:00 0 54511 100 30 19.438363 1 0 2019-01-02 08:00:00 0 54512 101 31 3.947511 2 0 2019-01-02 08:00:00 0 54513 102 32 17.359041 3 0 2019-01-02 08:00:00 0 54514 103 33 13.670863</code></pre> <pre><code class="language-python">rh = meb.t_dtp_to_rh(sta_t,sta_dpt) print(rh)</code></pre> <pre><code> level time dtime id lon lat rh 0 0 2019-01-02 08:00:00 0 54511 100 30 73.692382 1 0 2019-01-02 08:00:00 0 54512 101 31 70.772268 2 0 2019-01-02 08:00:00 0 54513 102 32 73.324691 3 0 2019-01-02 08:00:00 0 54514 103 33 72.654660</code></pre> <pre><code class="language-python">sta_t.iloc[:,-1] += 273.15 #转换成绝对温度 rh = meb.t_dtp_to_rh(sta_t,sta_dpt) #温度和露点中有一个是摄氏度,一个是绝对温度,不影响计算结果 print(rh)</code></pre> <pre><code> level time dtime id lon lat rh 0 0 2019-01-02 08:00:00 0 54511 100 30 73.736522 1 0 2019-01-02 08:00:00 0 54512 101 31 70.820216 2 0 2019-01-02 08:00:00 0 54513 102 32 73.369323 3 0 2019-01-02 08:00:00 0 54514 103 33 72.700181</code></pre> <h1>比湿_基于温度、湿度、气压</h1> <p>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>t_rh_p_to_q(temp,rh,pressure,rh_unit = &quot;%&quot;,check = False)</strong>&lt;/font&gt;<br /> 根据温度露点计算相对湿度(仅用于气象领域,或相对温度不高于120℃的场景,不能应用于工程领域) </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;temp&lt;/font&gt;</strong></td> <td style="text-align: left;">温度, <a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a>或<a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">网格数据</a>,既可以为绝对温度,也可以为摄氏温度。</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;rh&lt;/font&gt;</strong></td> <td style="text-align: left;">相对湿度, <a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a>或<a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">网格数据</a>。其形式应和temp一样,同为站点数据或网格数据</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;pressure&lt;/font&gt;</strong></td> <td style="text-align: left;">气压,实数、 <a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a>或<a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">网格数据</a>。当其为站点数据或网格数据时形式应和temp一样,同为站点数据或网格数据。单位为hPa</td> </tr> <tr> <td style="text-align: left;"><strong>rh_unit</strong></td> <td style="text-align: left;">可选项为&quot;%&quot;,或其它任意字符,取默认值&quot;%&quot;时,rh单位为%,其取值为0-100的实数, 其它任意参数设置下rh为0到1的实数。</td> </tr> <tr> <td style="text-align: left;"><strong>check</strong></td> <td style="text-align: left;">是否检查相对湿度的合理性,默认情况下不检查,如果check = True,则会检查rh是否位于0-100%的区间,检查不通过则返回None</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;">比湿,站点数据或网格数据,单位g/kg</td> </tr> </tbody> </table> <p><strong>调用示例</strong> </p> <pre><code class="language-python">q = meb.t_rh_p_to_q(sta_t,rh,1000) # rh的范围为0-100,p 为实数 print(q)</code></pre> <pre><code> level time dtime id lon lat q 0 0 2019-01-02 08:00:00 0 54511 100 30 14.286673 1 0 2019-01-02 08:00:00 0 54512 101 31 5.046867 2 0 2019-01-02 08:00:00 0 54513 102 32 12.505538 3 0 2019-01-02 08:00:00 0 54514 103 33 9.827534</code></pre> <pre><code class="language-python">print(sta_t)</code></pre> <pre><code> level time dtime id lon lat temp 0 0 2019-01-02 08:00:00 0 54511 100 30 297.588363 1 0 2019-01-02 08:00:00 0 54512 101 31 282.097511 2 0 2019-01-02 08:00:00 0 54513 102 32 295.509041 3 0 2019-01-02 08:00:00 0 54514 103 33 291.820863</code></pre> <pre><code class="language-python">rh01 = rh.copy() rh01[&amp;quot;rh&amp;quot;] *= 0.01 print(rh01)</code></pre> <pre><code> level time dtime id lon lat rh 0 0 2019-01-02 08:00:00 0 54511 100 30 0.737365 1 0 2019-01-02 08:00:00 0 54512 101 31 0.708202 2 0 2019-01-02 08:00:00 0 54513 102 32 0.733693 3 0 2019-01-02 08:00:00 0 54514 103 33 0.727002</code></pre> <pre><code class="language-python">q = meb.t_rh_p_to_q(sta_t,rh01,1000) # rh01的范围为0-1,p 为实数 print(q) # 当最大的相对湿度也小于1,当单位仍然采用默认值时,运行会提示警告</code></pre> <pre><code>警告:最大的相对湿度小于1%,请确认rh的单位是否为%,如果不是,请设置rh_unit = 1 level time dtime id lon lat q 0 0 2019-01-02 08:00:00 0 54511 100 30 0.142867 1 0 2019-01-02 08:00:00 0 54512 101 31 0.050469 2 0 2019-01-02 08:00:00 0 54513 102 32 0.125055 3 0 2019-01-02 08:00:00 0 54514 103 33 0.098275</code></pre> <pre><code class="language-python">q = meb.t_rh_p_to_q(sta_t,rh01,1000,rh_unit = 1) # rh01的范围为0-1,p 为实数 print(q)</code></pre> <pre><code> level time dtime id lon lat q 0 0 2019-01-02 08:00:00 0 54511 100 30 14.286673 1 0 2019-01-02 08:00:00 0 54512 101 31 5.046867 2 0 2019-01-02 08:00:00 0 54513 102 32 12.505538 3 0 2019-01-02 08:00:00 0 54514 103 33 9.827534</code></pre> <pre><code class="language-python">pre = rh01.copy() meb.set_stadata_names(pre,&amp;quot;pressure&amp;quot;) pre[&amp;quot;pressure&amp;quot;] = 850 + np.random.randn(4) * 100 print(pre)</code></pre> <pre><code> level time dtime id lon lat pressure 0 0 2019-01-02 08:00:00 0 54511 100 30 798.219412 1 0 2019-01-02 08:00:00 0 54512 101 31 845.821382 2 0 2019-01-02 08:00:00 0 54513 102 32 851.531228 3 0 2019-01-02 08:00:00 0 54514 103 33 885.505824</code></pre> <pre><code class="language-python">q = meb.t_rh_p_to_q(sta_t,rh01,pre,rh_unit = 1) # rh01的范围为0-1,pre 为站点数据 print(q)</code></pre> <pre><code> level time dtime id lon lat q 0 0 2019-01-02 08:00:00 0 54511 100 30 17.898178 1 0 2019-01-02 08:00:00 0 54512 101 31 5.966823 2 0 2019-01-02 08:00:00 0 54513 102 32 14.685941 3 0 2019-01-02 08:00:00 0 54514 103 33 11.098215</code></pre> <h1>湿球温度_基于温度、湿度</h1> <p>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>t_rh_to_tw(temp,rh,pressure,rh_unit = &quot;%&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;temp&lt;/font&gt;</strong></td> <td style="text-align: left;">温度, <a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a>或<a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">网格数据</a>,既可以为绝对温度,也可以为摄氏温度。</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;rh&lt;/font&gt;</strong></td> <td style="text-align: left;">相对湿度, <a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a>或<a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">网格数据</a>。其形式应和temp一样,同为站点数据或网格数据</td> </tr> <tr> <td style="text-align: left;"><strong>rh_unit</strong></td> <td style="text-align: left;">可选项为&quot;%&quot;,或其它任意字符,取默认值&quot;%&quot;时,rh单位为%,其取值为0-100的实数, 其它任意参数设置下rh为0到1的实数。</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">tw = meb.t_rh_to_tw(sta_t,rh) print(tw)</code></pre> <pre><code> level time dtime id lon lat tw 0 0 2019-01-02 08:00:00 0 54511 100 30 20.923067 1 0 2019-01-02 08:00:00 0 54512 101 31 6.049986 2 0 2019-01-02 08:00:00 0 54513 102 32 18.914520 3 0 2019-01-02 08:00:00 0 54514 103 33 15.360560</code></pre> <h1>过程降温</h1> <p>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;<strong>temp_decrease_in_process(sta,used_coords = [&quot;dtime&quot;])</strong>&lt;/font&gt;<br /> 循环每个层次,起报时间,站点和成员, 对时效序列数据(一维)求过程降温。 过程降温简单定义为24小时变温和48小时变温中的较小值(降幅更大者),解释过程考虑到降温过程通常持续1-2天,且考虑到消除日变化影响。 </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;">&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,85,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([53,55],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 20.0 -0.0 1 850 2020-01-02 09:00:00 3 50000 100 30 -7.0 -15.0 2 0 2020-01-01 09:00:00 6 54511 100 30 8.0 -6.0 3 850 2020-01-02 09:00:00 6 50000 100 30 3.0 27.0 4 0 2020-01-01 09:00:00 9 54511 100 30 12.0 2.0 5 850 2020-01-02 09:00:00 9 50000 100 30 -0.0 -5.0 6 0 2020-01-01 09:00:00 12 54511 100 30 -1.0 -1.0 7 850 2020-01-02 09:00:00 12 50000 100 30 -9.0 -6.0 8 0 2020-01-01 09:00:00 15 54511 100 30 10.0 4.0 9 850 2020-01-02 09:00:00 15 50000 100 30 15.0 5.0 10 0 2020-01-01 09:00:00 18 54511 100 30 -5.0 -4.0 11 850 2020-01-02 09:00:00 18 50000 100 30 14.0 7.0 12 0 2020-01-01 09:00:00 21 54511 100 30 20.0 -10.0 13 850 2020-01-02 09:00:00 21 50000 100 30 -7.0 16.0 14 0 2020-01-01 09:00:00 24 54511 100 30 12.0 2.0 15 850 2020-01-02 09:00:00 24 50000 100 30 1.0 1.0 16 0 2020-01-01 09:00:00 27 54511 100 30 8.0 -12.0 17 850 2020-01-02 09:00:00 27 50000 100 30 4.0 -3.0 18 0 2020-01-01 09:00:00 30 54511 100 30 -8.0 -9.0 19 850 2020-01-02 09:00:00 30 50000 100 30 -10.0 9.0 20 0 2020-01-01 09:00:00 33 54511 100 30 -4.0 -6.0 21 850 2020-01-02 09:00:00 33 50000 100 30 8.0 10.0 22 0 2020-01-01 09:00:00 36 54511 100 30 -9.0 -6.0 23 850 2020-01-02 09:00:00 36 50000 100 30 8.0 -3.0 24 0 2020-01-01 09:00:00 39 54511 100 30 -10.0 12.0 25 850 2020-01-02 09:00:00 39 50000 100 30 -7.0 4.0 26 0 2020-01-01 09:00:00 42 54511 100 30 3.0 2.0 27 850 2020-01-02 09:00:00 42 50000 100 30 4.0 1.0 28 0 2020-01-01 09:00:00 45 54511 100 30 -9.0 5.0 29 850 2020-01-02 09:00:00 45 50000 100 30 -9.0 22.0 30 0 2020-01-01 09:00:00 48 54511 100 30 -0.0 13.0 31 850 2020-01-02 09:00:00 48 50000 100 30 3.0 -26.0 32 0 2020-01-01 09:00:00 51 54511 100 30 -26.0 16.0 33 850 2020-01-02 09:00:00 51 50000 100 30 4.0 -19.0 34 0 2020-01-01 09:00:00 54 54511 100 30 -16.0 2.0 35 850 2020-01-02 09:00:00 54 50000 100 30 19.0 -2.0 36 0 2020-01-01 09:00:00 57 54511 100 30 -7.0 4.0 37 850 2020-01-02 09:00:00 57 50000 100 30 15.0 3.0 38 0 2020-01-01 09:00:00 60 54511 100 30 -9.0 8.0 39 850 2020-01-02 09:00:00 60 50000 100 30 5.0 -7.0 40 0 2020-01-01 09:00:00 63 54511 100 30 3.0 -13.0 41 850 2020-01-02 09:00:00 63 50000 100 30 14.0 4.0 42 0 2020-01-01 09:00:00 66 54511 100 30 -3.0 -9.0 43 850 2020-01-02 09:00:00 66 50000 100 30 -0.0 -0.0 44 0 2020-01-01 09:00:00 69 54511 100 30 -12.0 4.0 45 850 2020-01-02 09:00:00 69 50000 100 30 2.0 5.0 46 0 2020-01-01 09:00:00 72 54511 100 30 -14.0 -4.0 47 850 2020-01-02 09:00:00 72 50000 100 30 -1.0 12.0 48 0 2020-01-01 09:00:00 75 54511 100 30 -12.0 -0.0 49 850 2020-01-02 09:00:00 75 50000 100 30 1.0 -1.0 50 0 2020-01-01 09:00:00 78 54511 100 30 1.0 -1.0 51 850 2020-01-02 09:00:00 78 50000 100 30 7.0 17.0 52 0 2020-01-01 09:00:00 81 54511 100 30 24.0 5.0 54 0 2020-01-01 09:00:00 84 54511 100 30 13.0 -7.0</code></pre> <pre><code class="language-python">decrease = meb.temp_decrease_in_process(temp) print(decrease)</code></pre> <pre><code> level time dtime id lon lat ecmwf scmoc 0 0 2020-01-01 09:00:00 84 54511 100.0 30.0 -46.0 -25.0 1 850 2020-01-02 09:00:00 84 50000 100.0 30.0 -22.0 -29.0</code></pre> <pre><code class="language-python"></code></pre>

页面列表

ITEM_HTML