爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7888|回复: 8

MeteoInfo脚本示例:多站点数据平均

[复制链接]

新浪微博达人勋

发表于 2017-3-16 15:22:25 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 MeteoInfo 于 2018-7-11 16:28 编辑

日常用到的站点数据(比如micaps 1类地面全要素观测)每个时次包含的站点都不一样,要同时计算多个站点数据的平均值就比较困难。MeteoInfoLab提供了Series类可以对一维数组设置index,方便此类操作。这里给出一个计算micaps 1类数据多个站点日平均温度的例子供参考。需要首先确定计算哪些站点(在文件cma_stations_base.csv中),然后在提取micaps文件中站点和温度数组,组合成为Series数据类型,再从中提取出设定站点数据(如果某个设定站点在micaps数据中不存在则为nan),放入一个数据列表中,最后对数据列表进行平均即可。

  1. #Get stations
  2. stfn = os.path.join('D:/Working/Stations/cma_stations_base.csv')
  3. table = readtable(stfn, delimiter=',', format='%4s%3f')
  4. stids = table[u'区站号']
  5. lons = table[u'经度']
  6. lats = table[u'纬度']

  7. #Read data
  8. datadir = r'U:\data\micaps\2016\plot'
  9. year = 2016
  10. month = 12
  11. day = 1
  12. t = datetime.datetime(year, month, day)
  13. temps = []
  14. for hour in range(2, 24, 3):
  15.     t = t.replace(hour=hour)
  16.     fn = os.path.join(datadir, t.strftime('%y%m%d%H') + '.000')
  17.     print fn
  18.     f = addfile_micaps(fn)
  19.     st = f1['Stid'][:]
  20.     temp = f1['Temperature'][:]   
  21.     #Make series data
  22.     s = series(temp, index=st)
  23.     #Extract data by stations
  24.     s = s[stids]
  25.     temps.append(s.data)

  26. #Average
  27. ave = mean(temps)

  28. #Plot
  29. axesm(bgcolor=(204,255,255))
  30. lworld = shaperead('D:/Temp/map/country1.shp')
  31. lchina = shaperead('D:/Temp/map/bou2_4p.shp')
  32. geoshow(lworld, edgecolor='k', facecolor=(255,251,195))
  33. geoshow(lchina, edgecolor='k')
  34. levs = arange(0, 35, 2)
  35. layer = scatterm(lons, lats, ave, levs)
  36. colorbar(layer)
  37. yticks([20,30,40,50])
  38. title('Daily averged temperature (' + t.strftime('%Y-%m-%d') + ')')
  39. xlim(72, 136)
  40. ylim(16, 55)


station_data_average.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-3-23 19:30:13 | 显示全部楼层
MeteoInfo脚本很强大
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-12-10 09:43:28 | 显示全部楼层
学习学习。。。。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2018-1-4 21:12:52 | 显示全部楼层
谢谢老师分享,学习中
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-3-2 11:32:34 | 显示全部楼层
谢谢老师分享,学习中
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-6-9 12:40:27 | 显示全部楼层
王老师请问一下有没有降水阈值相关的脚本呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-6-9 15:05:15 | 显示全部楼层
lynpatty 发表于 2018-6-9 12:40
王老师请问一下有没有降水阈值相关的脚本呢?

获取降水数组,用percentile函数得到降水阈值。比如降水量数组是 a ,95%的阈值是 v = percentile(a, 95)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-7-24 02:24:19 | 显示全部楼层
#Get stations
stfn = os.path.join('D:/Working/Stations/cma_stations_base.csv')
table = readtable(stfn, delimiter=',', format='%4s%3f')
stids = table[u'区站号']
lons = table[u'经度']
lats = table[u'纬度']

王老师可以展示一下csv文件的内容吗?
看起来有三列数据,但是format='%4s%3f'看起来是定义了两类格式,
而且区站号一般是5位字符,这里的%4s不知道怎么理解

最近在试用readtable读取包含“区站号 经度 纬度 站名”的文本文件,看了家园的很多样例和官网的介绍,还是不太明白这些参数的作用,主要是format和usecols
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-24 11:12:27 | 显示全部楼层
mikado 发表于 2020-7-24 02:24
#Get stations
stfn = os.path.join('D:/Working/Stations/cma_stations_base.csv')
table = readtable(s ...

format='%4s%3f'值的数据前4列是字符型,后续3列是浮点型。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表