温湿廓线
Siphon是一个用于访问大气和海洋数据源的Python库。它提供了易于使用的工具,可以从THREDDS数据服务器中自动获取、解析和检索数据。Siphon库旨在使使用Python进行科学数据分析变得更加容易。
Siphon库主要提供以下功能:
- Catalog检索:Siphon可以连接到THREDDS(Thematic Real-time Environmental Distributed Data Services)目录,帮助用户轻松地搜索和发现可用的数据集。
- 数据访问:Siphon通过使用NetCDF Subset Service (NCSS)和NetCDF OPeNDAP (DODS)协议从数据服务器中获取数据。
- 数据解析:Siphon提供了一组工具来解析获取的数据,并将其转换为NumPy数组或Pandas数据框。
- 数据检验: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复制