站点数据
<pre><code class="language-python">%matplotlib inline
%load_ext autoreload
%autoreload 2
import meteva.base as meb
import numpy as np
import datetime
import pandas as pd</code></pre>
<p><strong><font face="黑体" color=black size = 5>站点数据类</font></strong> </p>
<p>格式为<a href="https://pandas.pydata.org/pandas-docs/stable/reference/frame.html#dataframe">pandas.DataFrame</a>的数据。本函数库提供了对该网格数据的一序列初始化、读写和转换函数,经过本函数库初始化、读取或转换生成的站点数据统一具备顺序为level,time,dtime,id,lat,lon(层次,时间,预报时效,站点Id,站点经度,站点纬度) 共6个表示时空信息的列变量,在第7列开始为数据内容。</p>
<p><strong><font face="黑体" color=blue size = 5>初始化站点数据</font></strong><br />
<strong>sta_data(df,columns = None)</strong><br />
将一个普通的DataFrame数据,转换成站点数据,如果输入的数据对应的时间或空间维度缺失,则设置为缺省值 </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>df</font></strong></td>
<td style="text-align: left;">dataframe的站点数据</td>
</tr>
<tr>
<td style="text-align: left;"><strong>columns</strong></td>
<td style="text-align: left;">长度和df列数相同的列表,其中第i个元素是df第i列的数据将被赋予的列名称,例如若df第i列数据内容是站点号,columns[i]应该设置"id",若df第i列数据内容是时效,则clumns[i]应该设置"dtime",其它类似。</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;">前6列分别为'level', 'time', 'dtime', 'id', 'lon', 'lat' 的一个DataFrame</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code class="language-python">data = {&quot;站号&quot;:np.arange(54511,54611).tolist(),
&quot;经度&quot;:np.arange(100,110,0.1).tolist(),
&quot;纬度&quot;:np.arange(30,40,0.1).tolist(),
&quot;数据&quot;:np.random.randn(100)}
df = pd.DataFrame(data)
print(df)</code></pre>
<pre><code> 站号 经度 纬度 数据
0 54511 100.0 30.0 0.924758
1 54512 100.1 30.1 0.026250
2 54513 100.2 30.2 1.128623
3 54514 100.3 30.3 2.083939
4 54515 100.4 30.4 0.095637
.. ... ... ... ...
95 54606 109.5 39.5 0.774993
96 54607 109.6 39.6 -0.977270
97 54608 109.7 39.7 0.805824
98 54609 109.8 39.8 -1.411085
99 54610 109.9 39.9 -1.063808
[100 rows x 4 columns]</code></pre>
<pre><code class="language-python">sta = meb.sta_data(df,columns = [&quot;id&quot;,&quot;lon&quot;,&quot;lat&quot;,&quot;data0&quot;])
print(sta)</code></pre>
<pre><code> level time dtime id lon lat data0
0 NaN NaN NaN 54511 100.0 30.0 0.924758
1 NaN NaN NaN 54512 100.1 30.1 0.026250
2 NaN NaN NaN 54513 100.2 30.2 1.128623
3 NaN NaN NaN 54514 100.3 30.3 2.083939
4 NaN NaN NaN 54515 100.4 30.4 0.095637
.. ... ... ... ... ... ... ...
95 NaN NaN NaN 54606 109.5 39.5 0.774993
96 NaN NaN NaN 54607 109.6 39.6 -0.977270
97 NaN NaN NaN 54608 109.7 39.7 0.805824
98 NaN NaN NaN 54609 109.8 39.8 -1.411085
99 NaN NaN NaN 54610 109.9 39.9 -1.063808
[100 rows x 7 columns]</code></pre>
<p><strong><font face="黑体" color=blue size = 5>设置数据名称 </font></strong>
<strong>set_stadata_names(sta,data_name_list):</strong><br />
设置站点数据的内容部分(第7列之后)的列名称 </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;">站点数据,前6列分别为'level', 'time', 'dtime', 'id', 'lon', 'lat' 的一个DataFrame</td>
</tr>
<tr>
<td style="text-align: left;"><strong>data_name_list</strong></td>
<td style="text-align: left;">数据名称列表,其长度等于sta的列数 - 6</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;">None</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code class="language-python">meb.set_stadata_names(sta,[&quot;new_name&quot;])
print(sta)</code></pre>
<pre><code> level time dtime id lon lat new_name
0 NaN NaN NaN 54511 100.0 30.0 0.924758
1 NaN NaN NaN 54512 100.1 30.1 0.026250
2 NaN NaN NaN 54513 100.2 30.2 1.128623
3 NaN NaN NaN 54514 100.3 30.3 2.083939
4 NaN NaN NaN 54515 100.4 30.4 0.095637
.. ... ... ... ... ... ... ...
95 NaN NaN NaN 54606 109.5 39.5 0.774993
96 NaN NaN NaN 54607 109.6 39.6 -0.977270
97 NaN NaN NaN 54608 109.7 39.7 0.805824
98 NaN NaN NaN 54609 109.8 39.8 -1.411085
99 NaN NaN NaN 54610 109.9 39.9 -1.063808
[100 rows x 7 columns]</code></pre>
<p><strong><font face="黑体" color=blue size = 5>获取数据名称列表 </font></strong>
<strong>get_stadata_names(sta):</strong><br />
获取站点数据的内容部分(第6列之后)的列名称 </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;">站点数据,前6列分别为'level', 'time', 'dtime', 'id', 'lon', 'lat' 的一个DataFrame</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;">数据名称列表,其长度等于sta的列数 - 6</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code class="language-python">names = meb.get_stadata_names(sta)
print(names)</code></pre>
<pre><code>['new_name']</code></pre>
<p><strong><font face="黑体" color=blue size = 5>设置数据时空坐标 </font></strong>
<strong>set_stadata_coords(sta,level = None,time = None,dtime = None,id = None,lat = None,lon = None,alt = None):</strong><br />
设置站点数据时空坐标部分的取值 </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=blue size = 5>sta</font></strong></td>
<td style="text-align: left;">站点数据,前6列分别为'level', 'time', 'dtime', 'id', 'lon', 'lat' 的一个DataFrame</td>
</tr>
<tr>
<td style="text-align: left;"><strong>level</strong></td>
<td style="text-align: left;">层次,如果该参数不为None,则站点数据中level列设置为该参数值</td>
</tr>
<tr>
<td style="text-align: left;"><strong>time</strong></td>
<td style="text-align: left;">时间,如果该参数不为None,则站点数据中time列设置为该参数值</td>
</tr>
<tr>
<td style="text-align: left;"><strong>dtime</strong></td>
<td style="text-align: left;">时效,如果该参数不为None,则站点数据中dtime列设置为该参数值</td>
</tr>
<tr>
<td style="text-align: left;"><strong>id</strong></td>
<td style="text-align: left;">站号,如果该参数不为None,则站点数据中id列设置为该参数值</td>
</tr>
<tr>
<td style="text-align: left;"><strong>lat</strong></td>
<td style="text-align: left;">站点纬度,如果该参数不为None,则站点数据中lat列设置为该参数值</td>
</tr>
<tr>
<td style="text-align: left;"><strong>lon</strong></td>
<td style="text-align: left;">站点经度,如果该参数不为None,则站点数据中lon列设置为该参数值</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;">None</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code class="language-python">meb.set_stadata_coords(sta,level = 0,time = datetime.datetime(2019,1,1,8,0),dtime = 0)
print(sta)</code></pre>
<pre><code> level time dtime id lon lat new_name
0 0 2019-01-01 08:00:00 0 54511 100.0 30.0 0.924758
1 0 2019-01-01 08:00:00 0 54512 100.1 30.1 0.026250
2 0 2019-01-01 08:00:00 0 54513 100.2 30.2 1.128623
3 0 2019-01-01 08:00:00 0 54514 100.3 30.3 2.083939
4 0 2019-01-01 08:00:00 0 54515 100.4 30.4 0.095637
.. ... ... ... ... ... ... ...
95 0 2019-01-01 08:00:00 0 54606 109.5 39.5 0.774993
96 0 2019-01-01 08:00:00 0 54607 109.6 39.6 -0.977270
97 0 2019-01-01 08:00:00 0 54608 109.7 39.7 0.805824
98 0 2019-01-01 08:00:00 0 54609 109.8 39.8 -1.411085
99 0 2019-01-01 08:00:00 0 54610 109.9 39.9 -1.063808
[100 rows x 7 columns]</code></pre>
<pre><code class="language-python"></code></pre>
<h1>设置数据属性</h1>
<p><strong><font face="黑体" color=blue size = 5>set_stadata_attrs(sta, dtime_units = None,data_source = None,level_type =None,
var_name = None,var_cn_name = None,
var_units = None): </font></strong><br />
设置站点数据的属性</p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=blue size = 5>sta</font></strong></td>
<td style="text-align: left;">站点数据,前6列分别为'level', 'time', 'dtime', 'id', 'lon', 'lat' 的一个DataFrame</td>
</tr>
<tr>
<td style="text-align: left;"><strong>dtime_units</strong></td>
<td style="text-align: left;">时效的单位类型,可设置的选项包括"hour"和"minute"两种</td>
</tr>
<tr>
<td style="text-align: left;"><strong>data_source</strong></td>
<td style="text-align: left;">数据来源说明,例如"天擎"等</td>
</tr>
<tr>
<td style="text-align: left;"><strong>level_type</strong></td>
<td style="text-align: left;">层次类型说明,例如"等压面"等</td>
</tr>
<tr>
<td style="text-align: left;"><strong>var_name</strong></td>
<td style="text-align: left;">要素的名称,例如"temperature"</td>
</tr>
<tr>
<td style="text-align: left;"><strong>var_cn_name</strong></td>
<td style="text-align: left;">要素的中文名称,例如"温度"</td>
</tr>
<tr>
<td style="text-align: left;"><strong>var_units</strong></td>
<td style="text-align: left;">要素的单位,例如"℃"</td>
</tr>
<tr>
<td style="text-align: left;"><font face="黑体" color=blue size=5>return</font></td>
<td style="text-align: left;">None</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code class="language-python">meb.set_stadata_attrs(sta,dtime_units = &quot;minute&quot;)
print(sta.attrs[&quot;dtime_units&quot;])</code></pre>
<pre><code>minute</code></pre>