如何获取GFS数据未来一周的预报之温湿廓线

2024-06-20 18:12:23 浏览数 (1)

温湿廓线

Siphon是一个用于访问大气和海洋数据源的Python库。它提供了易于使用的工具,可以从THREDDS数据服务器中自动获取、解析和检索数据。Siphon库旨在使使用Python进行科学数据分析变得更加容易。

Siphon库主要提供以下功能:

  1. Catalog检索:Siphon可以连接到THREDDS(Thematic Real-time Environmental Distributed Data Services)目录,帮助用户轻松地搜索和发现可用的数据集。
  2. 数据访问:Siphon通过使用NetCDF Subset Service (NCSS)和NetCDF OPeNDAP (DODS)协议从数据服务器中获取数据。
  3. 数据解析:Siphon提供了一组工具来解析获取的数据,并将其转换为NumPy数组或Pandas数据框。
  4. 数据检验:Siphon提供了一些工具,可以帮助用户验证数据是否满足预期格式和要求。

Siphon库广泛应用于气象和海洋学领域,以及其他需要使用大量科学数据的领域。它简化了数据获取和处理的过程,使得用户可以更高效地进行科学研究和分析。

总之,Siphon是一个强大的Python库,为科学家和工程师提供了从THREDDS目录和数据服务器中获取数据的简单方法,并提供了工具来解析、检验和分析这些数据。

下面基于官方示例略作修改,修改主要因过时而报错的代码 进行数据索引与作图

数据索引

In [20]:

代码语言:javascript复制
代码语言:javascript复制
from datetime import datetime

import matplotlib.pyplot as plt

from siphon.catalog import TDSCatalog
代码语言:javascript复制

In [21]:

代码语言:javascript复制
代码语言:javascript复制
best_gfs = TDSCatalog('http://thredds.ucar.edu/thredds/catalog/grib/NCEP/GFS/'
                      'Global_0p5deg/catalog.xml?dataset=grib/NCEP/GFS/Global_0p5deg/Best')
print(best_gfs.datasets)
代码语言:javascript复制
代码语言:javascript复制
['Best GFS Half Degree Forecast Time Series']

In [22]:

代码语言:javascript复制
代码语言:javascript复制
best_ds = best_gfs.datasets[0]
ncss = best_ds.subset()
代码语言:javascript复制

然后,我们可以使用“ncss”对象创建一个新的查询对象,该对象 便于向服务器请求数据。 设置坐标为 115E 40N

In [23]:

代码语言:javascript复制
代码语言:javascript复制
query = ncss.query()
query.lonlat_point(115, 40).time(datetime.utcnow())
query.accept('netcdf4')
query.variables('Temperature_isobaric', 'Relative_humidity_isobaric')
代码语言:javascript复制
代码语言:javascript复制
var=Temperature_isobaric&var=Relative_humidity_isobaric&time=2024-02-11T08:39:29.333010&longitude=115&latitude=40&accept=netcdf4

In [24]:

代码语言:javascript复制
data = ncss.get_data(query)
list(data.variables)
代码语言:javascript复制
['latitude',
 'longitude',
 'stationAltitude',
 'station_id',
 'station_description',
 'profileId',
 'nobs',
 'profileTime',
 'stationIndex',
 'altitude',
 'Temperature_isobaric',
 'Relative_humidity_isobaric']

我们将提取要使用的变量以及压力值。要获取 压力的正确变量的名称(与温度和 相对湿度,我们看一下“坐标”属性。最后一个变量 “坐标”中列出的是压力维度。

In [25]:

代码语言:javascript复制
代码语言:javascript复制
temp = data.variables['Temperature_isobaric']
relh = data.variables['Relative_humidity_isobaric']
press_name = relh.coordinates.split()[-1]
press = data.variables[press_name]
press_vals = press[:].squeeze()
代码语言:javascript复制

作图

0 人点赞