- 积分
- 55946
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-6-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 MeteoInfo 于 2018-7-11 16:28 编辑
日常用到的站点数据(比如micaps 1类地面全要素观测)每个时次包含的站点都不一样,要同时计算多个站点数据的平均值就比较困难。MeteoInfoLab提供了Series类可以对一维数组设置index,方便此类操作。这里给出一个计算micaps 1类数据多个站点日平均温度的例子供参考。需要首先确定计算哪些站点(在文件cma_stations_base.csv中),然后在提取micaps文件中站点和温度数组,组合成为Series数据类型,再从中提取出设定站点数据(如果某个设定站点在micaps数据中不存在则为nan),放入一个数据列表中,最后对数据列表进行平均即可。
- #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'纬度']
- #Read data
- datadir = r'U:\data\micaps\2016\plot'
- year = 2016
- month = 12
- day = 1
- t = datetime.datetime(year, month, day)
- temps = []
- for hour in range(2, 24, 3):
- t = t.replace(hour=hour)
- fn = os.path.join(datadir, t.strftime('%y%m%d%H') + '.000')
- print fn
- f = addfile_micaps(fn)
- st = f1['Stid'][:]
- temp = f1['Temperature'][:]
- #Make series data
- s = series(temp, index=st)
- #Extract data by stations
- s = s[stids]
- temps.append(s.data)
- #Average
- ave = mean(temps)
- #Plot
- axesm(bgcolor=(204,255,255))
- lworld = shaperead('D:/Temp/map/country1.shp')
- lchina = shaperead('D:/Temp/map/bou2_4p.shp')
- geoshow(lworld, edgecolor='k', facecolor=(255,251,195))
- geoshow(lchina, edgecolor='k')
- levs = arange(0, 35, 2)
- layer = scatterm(lons, lats, ave, levs)
- colorbar(layer)
- yticks([20,30,40,50])
- title('Daily averged temperature (' + t.strftime('%Y-%m-%d') + ')')
- xlim(72, 136)
- ylim(16, 55)
|
|