诊断
<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><font face="黑体" color=blue size = 5><strong>change(data,delta = 24,used_coords = "time")</strong></font><br />
计算站点或网格数据相对前一个时刻或前一个时效的变化,可以用于计算变温,变压,也可用于根据随时效累计的降水数据计算每个时效段的降水。 </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=blue size = 5>data</font></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;">计算变化的所用的维度,可选项为"time","dtime",分布代表在时间方向和时效方向求变化量</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;"><a href="https://www.showdoc.cc/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 = {&quot;id&quot;:[54511,54512],
&quot;lon&quot;:[100,101],
&quot;lat&quot;:[30,31]}
df = pd.DataFrame(data)
station = meb.sta_data(df)
time0 = datetime.datetime(2020,1,1,8,0)
sta_list = []
for dh in range(6):
time1 = time0 + datetime.timedelta(hours = dh * 12)
sta = station.copy()
sta[&quot;temp&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 = &quot;time&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 = {&quot;id&quot;:[54511],
&quot;lon&quot;:[100],
&quot;lat&quot;:[30],
&quot;time&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[&quot;rain&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=&quot;dtime&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=&quot;dtime&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=&quot;dtime&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&quot;H:\test_data\input\meb\grd_sele_test.nc&quot;)
print(grd)</code></pre>
<pre><code>&lt;xarray.DataArray 'data0' (member: 3, level: 1, time: 10, dtime: 4, lat: 81, lon: 101)&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=&quot;time&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=&quot;dtime&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><font face="黑体" color=blue size = 5><strong>speed_angle_to_wind(speed,angle = None)</strong></font><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><font face="黑体" color=blue size = 5>speed</font></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;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;">如果输入的是站点数据,则返回站点数据,如果输入的是网格数据则返回网格数据。</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong> </p>
<pre><code class="language-python">data = {&quot;id&quot;:np.arange(54511,54515).tolist(),
&quot;lon&quot;:np.arange(100,104,1).tolist(),
&quot;lat&quot;:np.arange(30,34,1).tolist(),
&quot;speed&quot;:(np.random.rand(4)*10),
&quot;angle&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 = [&quot;speed&quot;]) #仅包含风速的数据
angle = meb.sele_by_para(sta_speed_angle,member = [&quot;angle&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><font face="黑体" color=blue size = 5><strong>u_v_to_wind(u,v)</strong></font><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><font face="黑体" color=blue size = 5>u</font></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><font face="黑体" color=blue size = 5>v</font></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;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;">如果输入的是站点数据,则返回站点数据,如果输入的是网格数据则返回网格数据。</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong> </p>
<pre><code class="language-python">u = meb.sele_by_para(sta_uv,member = &quot;u&quot;)
v = meb.sele_by_para(sta_uv,member = &quot;v&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><font face="黑体" color=blue size = 5><strong>t_dtp_to_rh(temp,dtp)</strong></font><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><font face="黑体" color=blue size = 5>temp</font></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><font face="黑体" color=blue size = 5>dtp</font></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;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;">相对湿度,单位%,如果输入的是站点数据,则返回站点数据,如果输入的是网格数据则返回网格数据。</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong> </p>
<pre><code class="language-python">sta_t = speed.copy()
meb.set_stadata_names(sta_t,&quot;temp&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,&quot;dpt&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><font face="黑体" color=blue size = 5><strong>t_q_p_to_rh(temp,dtp)</strong></font><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><font face="黑体" color=blue size = 5>temp</font></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><font face="黑体" color=blue size = 5>q</font></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一样,同为站点数据或网格数据。单位为g/kg</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=blue size = 5>pressure</font></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;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;">相对湿度,单位%,如果输入的是站点数据,则返回站点数据,如果输入的是网格数据则返回网格数据。</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong> </p>
<pre><code class="language-python">grid0 = meb.grid([70,140,1],[15,60,1])
temp = meb.read_griddata_from_nc(r&quot;H:\test_data\input\meb\dia_temp.nc&quot;,level = 850,grid = grid0)
q = meb.read_griddata_from_nc(r&quot;H:\test_data\input\meb\dia_q.nc&quot;,level = 850,grid = grid0)
q.values *= 1000 #原数据的单位是kg/kg, 将单位转换成g/kg
pressure = 850</code></pre>
<pre><code class="language-python">rh = meb.t_q_p_to_rh(temp,q,pressure,unit = &quot;%&quot;)</code></pre>
<pre><code class="language-python">meb.contourf_xy(rh)</code></pre>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=8a9d753289b81e6d5777620a91c60c51&amp;file=file.png" alt="" /></p>
<h1>相对湿度_基于温度、比湿</h1>
<p><font face="黑体" color=blue size = 5><strong>t_q_to_rh_on_isobar(temp,q,unit = "%")</strong></font><br />
根据温度、比湿和气压计算相对湿度,但是气压并不是以单独的变量方式输入,而是以温度的垂直坐标中的气压值作为输入</p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=blue size = 5>temp</font></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><font face="黑体" color=blue size = 5>q</font></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一样,同为站点数据或网格数据。单位为g/kg</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;">相对湿度,单位%,如果输入的是站点数据,则返回站点数据,如果输入的是网格数据则返回网格数据。</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong> </p>
<pre><code class="language-python">print(temp)</code></pre>
<pre><code>&lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 46, lon: 71)&gt;
array([[[[[[291.915, 291.715, 291.468, ..., 291.061, 291.636,
291.412],
[291.5 , 291.44 , 291.294, ..., 291.589, 291.503,
291.676],
[291.326, 291.397, 291.17 , ..., 291.511, 291.511,
291.748],
...,
[286.567, 286.538, 287.054, ..., 293.216, 291.329,
290.051],
[286.3 , 286.22 , 286.506, ..., 293.81 , 292.025,
290.914],
[286.857, 286.766, 286.817, ..., 292.257, 291.025,
290.73 ]]]]]])
Coordinates:
* member (member) &lt;U5 'data0'
* level (level) int32 850
* time (time) datetime64[ns] 2023-07-20T12:00:00
* dtime (dtime) int32 0
* lat (lat) int32 15 16 17 18 19 20 21 22 23 ... 53 54 55 56 57 58 59 60
* lon (lon) int32 70 71 72 73 74 75 76 77 ... 134 135 136 137 138 139 140
Attributes:
dtime_units: hour</code></pre>
<pre><code class="language-python">rh = meb.t_q_to_rh_on_isobar(temp,q,unit = &quot;%&quot;)
meb.contourf_xy(rh)</code></pre>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=8a9d753289b81e6d5777620a91c60c51&amp;file=file.png" alt="" /></p>
<h1>比湿_基于温度、湿度、气压</h1>
<p><font face="黑体" color=blue size = 5><strong>t_rh_p_to_q(temp,rh,pressure,rh_unit = "%",check = False)</strong></font><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><font face="黑体" color=blue size = 5>temp</font></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><font face="黑体" color=blue size = 5>rh</font></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><font face="黑体" color=blue size = 5>pressure</font></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;">可选项为"%",或其它任意字符,取默认值"%"时,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;"><font face="黑体" color=blue size=5>return</font></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[&quot;rh&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,&quot;pressure&quot;)
pre[&quot;pressure&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><font face="黑体" color=blue size = 5><strong>t_rh_to_tw(temp,rh,pressure,rh_unit = "%")</strong></font><br />
根据温度和相对湿度计算湿球温度 </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=blue size = 5>temp</font></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><font face="黑体" color=blue size = 5>rh</font></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;">可选项为"%",或其它任意字符,取默认值"%"时,rh单位为%,其取值为0-100的实数, 其它任意参数设置下rh为0到1的实数。</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;">比湿,站点数据或网格数据,单位℃</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong> </p>
<pre><code class="language-python">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><font face="黑体" color=blue size = 5><strong>temp_decrease_in_process(sta,used_coords = ["dtime"])</strong></font><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><font face="黑体" color=blue size = 5>sta</font></strong></td>
<td style="text-align: left;"><a href="https://www.showdoc.cc/meteva?page_id=3975600580125986">站点数据</a>,可以包含多个层次、起报时间、时效、站点和数据成员</td>
</tr>
<tr>
<td style="text-align: left;"><strong>used_coords</strong></td>
<td style="text-align: left;">最大(小)值统计的维度,目前暂时只支持 used_coords = ["dtime"]的情况,即计算每个站点每个时刻起报的时效序列中包含的过程降温</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;">站点数据</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong> </p>
<pre><code class="language-python"># 测试按时效累加的功能,先生成包含多个时效的站点数据
data = {&quot;id&quot;:[54511,50000],
&quot;lon&quot;:[100,100],
&quot;lat&quot;:[30,30],
&quot;time&quot;:[datetime.datetime(2020,1,1,9,0),datetime.datetime(2020,1,2,9,0)],
'level':[0,850],
&quot;ecmwf&quot;:[0,0],
&quot;scmoc&quot;:[0,0]}
df = pd.DataFrame(data)
station = meb.sta_data(df)
# 以温度预报为例,
dtime_list = np.arange(3,85,3)
sta_list = []
for dh in dtime_list:
sta = station.copy()
sta.loc[:,&quot;ecmwf&quot;] = np.ceil(np.random.randn(2)*10)
sta.loc[:,&quot;scmoc&quot;] = np.ceil(np.random.randn(2)*10)
meb.set_stadata_coords(sta,dtime = dh)
sta_list.append(sta)
temp= pd.concat(sta_list,axis =0)
temp = temp.reset_index(drop = True)
temp = temp.drop([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>