爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9909|回复: 15

MeteoInfoLab脚本示例:小时数据日平均

[复制链接]

新浪微博达人勋

发表于 2016-8-5 17:21:39 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2019-4-2 12:00 编辑

通过readtable函数可以将文本数据读取到一个表格中,其中的format参数可以确定每列数据的数据类型,如果数据中包含时间列就可以对数据进行按照时间平均等操作。这里通过北京2014年12月PM2.5小时平均数据给出一个例子。读取数据到一个表格,并对小时数据进行日平均(通过表格数据的ave_day等函数),然后绘图。表格数据还有ave_hour, ave_month, ave_year等函数进行数据的小时平均、月平均、年平均计算。

部分数据:
Time AQI Grade PM2.5 PM10 CO NO2 O3 O3_8h SO2
2014120104 375.86 5.86 33.57 485.00 0.26 8.29 46.14 48.25 2.29
2014120105 69.12 2.00 9.38 87.75 0.25 6.00 40.25 46.12 5.00
2014120106 54.50 1.88 8.25 59.75 0.28 7.12 40.50 43.62 5.25
2014120107 46.38 1.38 6.62 47.12 0.29 11.62 37.75 40.88 5.00
2014120108 46.38 1.38 6.62 47.12 0.29 11.62 37.75 40.88 5.00
2014120109 25.60 1.00 8.40 25.60 0.34 17.20 30.60 39.00 7.60
2014120110 20.75 1.00 7.00 19.88 0.35 14.62 40.12 39.12 8.12
2014120111 20.75 1.00 7.00 19.88 0.35 14.62 40.12 39.00 8.12
2014120112 17.88 1.00 6.71 10.80 0.35 11.75 54.12 41.00 7.50
2014120113 18.71 1.00 7.80 9.67 0.34 11.86 58.29 42.62 7.14
2014120114 18.71 1.00 7.80 9.67 0.34 11.86 58.29 42.62 7.14
2014120115 18.71 1.00 7.80 9.67 0.34 11.86 58.29 42.62 7.14
2014120116 17.75 1.00 6.50 13.62 0.37 17.00 50.57 46.43 6.00
2014120117 16.38 1.00 6.88 13.43 0.40 22.25 46.12 49.88 6.12


脚本程序:
  1. fn = r'V:\haze_analysis\aqi\data-station\obs_Beijing_201412.txt'
  2. table = readtable(fn, format='%{yyyyMMddHH}D%9f')
  3. t_hour = table['Time']
  4. data_hour = table['PM2.5']
  5. tab_day = table.ave_day(['PM2.5'])
  6. data_day = tab_day['PM2.5']
  7. t_day = tab_day['Date']
  8. plot(t_hour, data_hour, '-b')
  9. plot(t_day, data_day, '-ro')
  10. ylabel(r'$\rm{PM_{2.5}} \ (\mu g \ m^{-3})$')
  11. xaxis(axistype='time')
  12. title('Beijing - 201412')


day_ave.png


DataFrame数据对象比Table具有更强的表格数据处理能力,可以对某一列数据进行操作,也可以对整个DataFrame进行日平均等计算。

  1. fn = r'V:\haze_analysis\aqi\stationData\2014\Beijing\obs_Beijing_201412.txt'
  2. df = DataFrame.read_table(fn, format='%9f', index_col=0, \
  3.     index_format='%{yyyyMMddHH}D')
  4. df_day = df.resample('D').mean()
  5. pm10 = df_day['PM10'].values
  6. pm25 = df_day['PM2.5'].values
  7. t_day = df_day.index.data
  8. plot(t_day, pm10, '-b^', label=r'$\rm{PM_{10}}$')
  9. plot(t_day, pm25, '-ro', label=r'$\rm{PM_{2.5}}$')
  10. ylabel(r'$\rm{PM}$' + u' (μg/m' + r'$^{-3})$', fontname='arial')
  11. xaxis(axistype='time')
  12. legend()
  13. title('Beijing - 201412')

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

新浪微博达人勋

发表于 2016-8-10 11:32:48 | 显示全部楼层
射月楼主
威武!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-8-17 09:06:58 | 显示全部楼层
这个用sql也很容易实现
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-10-7 12:17:56 | 显示全部楼层
又一款极其强大的气象软件
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-9-26 20:05:41 | 显示全部楼层
第八行是data_hour?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-9-26 23:19:36 | 显示全部楼层
蓝胖子 发表于 2018-9-26 20:05
第八行是data_hour?

谢谢指出这个错误,已在1楼更新
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-12-2 13:21:25 | 显示全部楼层
楼主会用matlab处理吗
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-4-2 10:39:11 | 显示全部楼层
王老师,这个函数可以把后面的数据当做一个矩阵一次求出多种污染物的均值吗?请王老师指教!!!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-4-2 12:01:55 | 显示全部楼层
sfz13851581045 发表于 2019-4-2 10:39
王老师,这个函数可以把后面的数据当做一个矩阵一次求出多种污染物的均值吗?请王老师指教!!!

可以用DataFrame来完成,详见一楼新加上的脚本程序。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-4-2 13:33:29 | 显示全部楼层
本帖最后由 sfz13851581045 于 2019-4-2 13:59 编辑
MeteoInfo 发表于 2019-4-2 12:01
可以用DataFrame来完成,详见一楼新加上的脚本程序。

王老师,威武!这个软件真的太给力了,就是还有两个小小的疑问:(1)刚刚我试了一下程序,发现这个程序在计算日均值的时候会把空值点算在内,有没有办法在计算日均值的时候不把空值点计算在内?(2)我想把处理过的数据用asciiwrite('F:/MeteoInfo/MeteoInfo/work/Data/2018_O3_day.txt',df_day, colnum=360,format='%-10.2f')读出来,提示是生成的数据不是一个数组,怎么把数据提取出来呢?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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