前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Siphon使用IGRA2为数据源画探空图

Siphon使用IGRA2为数据源画探空图

作者头像
MeteoAI
发布2020-02-19 10:29:56
8560
发布2020-02-19 10:29:56
举报
文章被收录于专栏:MeteoAI

Siphon 还提供了 Integrated Global Radiosonde Archive (IGRA2)为数据源的数据管道。在修改完uwyo的代码后,顺便来看看另一个数据集的。使用的话我感觉还是怀俄明哪个比较好,它更新快,基本上国际时间00,12时一过半小时就可以访问最新的数据;而且国内访问也快;绘图代码简单易懂,也便于气象工作者根据自己的需要再次修改。IGRA2的更新比较慢,反正是3月份这回的中国区基本都是提示无数据;访问也很慢,不清楚是墙的原因还是网站本身技术的原因,和Matlab启动速度有的一拼;代码比怀俄明的那个稍微复杂些,因为他提供的数据参量更多,像位温,假位温这样的都有,怀俄明的只有一个露点。需要精细化比对探空数据的可能需要IGRA2的数据,需要快速分析天气的更喜欢怀俄明。 IGRA2 Upper Air Data Request 官网文档给出了具体用法,和怀俄明的那个模块很相似

带入模块

代码语言:javascript
复制
from datetime import datetime
from siphon.simplewebservice.igra2 import IGRAUpperAir

设置站好和时间

代码语言:javascript
复制
date = datetime(2014, 9, 10, 0)
station = 'USM00070026'

发送请求,获取数据

代码语言:javascript
复制
df, header = IGRAUpperAir.request_data(date, station)

这里有两点需要注意

  • 站点编号。IGRA2目前收录了2700多个站点的数据(如上图密密麻麻的红点),为了便于管理,给各个站点都做了统一编号,这个编号的组成大约是’国家代码‘+’000‘+’原站点编号‘。这里的原站点编号就是怀俄明网站上各个站点的5位数编号,像青岛原本用ZSQD表示的就是54857,四位字母编号一般是省市级的站点才有。而IGRA2官方也提供了一份详细的全球站点统一编号列表,包含每个站点的编号,位置(经纬度),网络关联,站点名称和记录周期。
  • 获取格式中的header。header表示的相当于nc文件的头文件,用于描述这段数据的一些特征。而df才是爬到的数据。

而IGRA2的数据也与怀俄明的不一样

代码语言:javascript
复制
dfIGRA2.keys()
---
Out[26]:
Index(['pressure', 'reported_height', 'calculated_height', 'temperature',
       'temperature_gradient', 'potential_temperature',
       'potential_temperature_gradient', 'virtual_temperature',
       'virtual_potential_temperature', 'vapor_pressure',
       'saturation_vapor_pressure', 'reported_relative_humidity',
       'calculated_relative_humidity', 'u_wind', 'u_wind_gradient', 'v_wind',
       'v_wind_gradient', 'refractive_index', 'date'],
      dtype='object')
==========================
dfuwyo.keys()
---
Out[27]:
Index(['pressure', 'height', 'temperature', 'dewpoint', 'direction', 'speed',
       'u_wind', 'v_wind', 'station', 'station_number', 'time', 'latitude',
       'longitude', 'elevation'],
      dtype='object')

比较麻烦的是IGRA2的数据没有露点的数据,而这个数据有是绘图必须的。好在Metpy库提供了calc的计算模块,专门处理大气科学上的这些乱七八糟的计算。这里用metpy.calc.dewpoint这个功能实现从水汽分压计算露点。官方也给出了一个示例,可以直接用。虽然功能上说是用水汽分压计算,但是只要有表面压强就可以计算了。

代码语言:javascript
复制
mixing = 10 * units('g/kg')
e = mpcalc.vapor_pressure(list(df['pressure'])* units.mbar, mixing)
df['dewpoint'] = mpcalc.dewpoint(e)

最后还有风速和风向这两个参数没有解决,calc也提供了模块搞定这个问题。怀俄明的代码是用风速和风向算u,v分矢量,而IGRA2恰好反过来。

代码语言:javascript
复制
df['u_wind'], df['v_wind'] = mpcalc.wind_components(df['speed'],np.deg2rad(df['direction']))
---
df['speed']=mpcalc.wind_speed(df['u_wind'], df['v_wind'])
df['direction']=mpcalc.wind_direction(df['u_wind'], df['v_wind'])

calc还有其他功能,可以查阅官方文档了解。

添加如下代码:可以使程序运行,但是风向的转换似乎有问题,而官方的calc的包也总是报错,暂时不管了,先这么滴吧,还是用怀俄明的数据吧。

代码语言:javascript
复制
f, header= IGRAUpperAir.request_data(date, station, derived=True)
df['speed']=mpcalc.wind_speed(df['u_wind'], df['v_wind'])

def mydirection(u,v):
    theta=np.arctan2(u, v)
    mydirection=np.rad2deg(theta)+180
    return mydirection

df['direction']=mydirection(df['u_wind'], df['v_wind'])

mixing = 10 * units('g/kg')
e = mpcalc.vapor_pressure(list(df['pressure'])* units.mbar, mixing)
df['dewpoint'] = mpcalc.dewpoint(e)

转载请注:Siphon使用IGRA2为数据源画探空图 - Bugatii100Peagle

更多详见:https://zhuanlan.zhihu.com/p/102032217

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MeteoAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 设置站好和时间
  • 发送请求,获取数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档